Пользователь
0,0
рейтинг
24 августа 2011 в 00:49

Администрирование → Debian Server для новичка из песочницы

Как-то обеспокоился наличием собственного FTP-сервака. Тем более под это дело «на помойку» был отдан комп этак десятилетней давности. Так как я человек хоть и виндовый, но начинал с чистого ДОСа (про книжки тов. Фигурнова кто помнит?), то я решил сделать все на линуксе. В линуксе я был ноль полный. Еще и усложнил задачу — только консоль, никаких исков (как же — это ж линукс). Дистрибутивом был выбран Debian. Так получилось, что надобность в 2Тб личном хранилице отпала через год и комп был отдан в хорошие руки, а хард пристроен в нужное место. Но был накоплен неплохой опыт стопроцентного новичка. Какие только глупые ошибки я не совершал поначалу! И хабр читал, между прочим, пока разбирался с проблемами. Поэтому эту свою дебютную (первую) статью на хабре я посвящаю тем, кто хочет заняться линуксом с нуля и эта статья призвана для плавного ввода «в тему», являясь, по сути, фильтрацией и систематизацией всего того, что я нашел на просторах интернета. Ранее я этот материал уже публиковал, но, думаю, на хабре он тоже будет полезен.

Что и как хотим получить в результате:
— консольная установка ОС с флешки;
— навыки консольного управление;
— создание собственного репозитория;
— обеспечение удаленного доступа по протоколу FTP/SFTP;
— обеспечение удаленного управления по протоколу SSH;
— дистанционное включение сервера, находящегося за маршрутизатором;
— создание условий работы веб-сервера (в идеале связка nginx+apache).

В инете куча всяких пошаговых инструкций. Порой там бывают досадные ошибки, а если еще линуксоид и сопливый еще покамест, то можно пару часов потратить только на то, что бы понять, что не нужна лишняя палочка или точечка — в линуксе важно все! Нижеизложенное делается для практических целей поставленных задач — не надо воспринимать все как серьезную инструкцию для создания серьезного сервера. Тем более в процессе «восстановления опыта» могут и ошибки тоже быть и у меня…

— Раз



Итак, имеется пустой комп с подключенной периферией. Для начала нужно установить саму ОС. Имеется так же образы всех дисков Debian 6.0.0 stable. От лазерных носителей я давно отказался, т.е. для установки нужно изготовить загрузочную флешку. Флешка нашлась на 2Gb. После поисков оказалось, что изготовить можно, но из самой линуксовой среды. Пришлось установить с образа первого диска дебиан на виртуальную машину (подключаем образ к виртуалке в качестве виртуального CD-ROM и установка выполняется «честно» как бы с лазерного диска). Устанавливал «оптом» — т.е. и GUI тоже (в 6 версии был только GNOME). Тем не менее, после того, как все сделалось, грузим деабиан, подключаем флешку к виртуалке и открываем консоль.

Выполняем команду:

# dmesg

Видим что-то типа этого:
[373982.581725] sd 8:0:0:0: [sdc] 4001760 512-byte hardware sectors (2049 MB)
[373982.582718] sd 8:0:0:0: [sdc] Write Protect is off
[373982.582718] sd 8:0:0:0: [sdc] Mode Sense: 03 00 00 00
[373982.582718] sd 8:0:0:0: [sdc] Assuming drive cache: write through
[373982.584152] sd 8:0:0:0: [sdc] 4001760 512-byte hardware sectors (2049 MB)
[373982.585718] sd 8:0:0:0: [sdc] Write Protect is off
[373982.585718] sd 8:0:0:0: [sdc] Mode Sense: 03 00 00 00
[373982.585718] sd 8:0:0:0: [sdc] Assuming drive cache: write through
[373982.585718] sdc:
[373982.589280] sd 8:0:0:0: [sdc] Attached SCSI disk


Это значит, что флешка определилась в системе.

Скачиваем файл boot.img.gz (debian.org) для нужной архитектуры (в моем случае i386) и копируем его в какую-нибудь директори. Далее выполняем команду из этой директории:

# zcat boot.img.gz > /dev/sdc

Теперь надо вытащить и воткнуть обратно USB флешку, чтобы новая структура/таблица разделов распозналась. Это обновит таблицу разделов, хранимую udev. Для проверки выполняем следующие команды:

# mkdir /mnt
# mount /dev/sdс /mnt/
# ls /mnt


и видим инсталляционные файлы, такие как syslinux.cfg, setup.exe, и так далее. Значит все нормально — флешку примонтировали.

Далее скачиваем ISO образ netinstall (debian.org) размером 150-180MB для соответствующей архитектуры (в моем случае i386). Netinstall устанвливает базовую систему, сеть не нужна. Копируем этот образ в какую-нибудь директорию и из этой директории выполняем и отмонтируем флешку:

# cp debian-6.0.1a-i386-netinst /mnt
# umount /dev/sdс


Уф. Теперь при себе есть всегда флешка для установки.

Если же необходимо включить такой инсталлятор на флешку с другими ОСами, то можно обратиться к загрузчику grub. У меня уже имеется загрузочная флешка с grub4dos. Создаем папку debian в корне флешки и кидаем туда: debian-6.0.1a-i386-netinst.iso, initrd.gz, initrdg.gz, linux — последние 3 файла можно выдернуть с первого установочного диска Debian 6.0.0 stable или скачать (debian.org). А в меню grub'a (menu.lst) нужно добавить следующее:
title Debian 6.0.1a - Netinstall (Basic System, VGA Install)
kernel /debian/linux video=vesa:ywrap,mtrr vga=788 -- quiet
initrd /debian/initrdg.gz

title Debian 6.0.1a - Netinstall (Basic System, TXT Install)
kernel /debian/linux -- quiet
initrd /debian/initrd.gz


Теперь втыкаем флешку в наш импровизированный сервак, через BIOS выбираем загрузку с флешки и штатно устанавливаем Debian. При установке ничего особого я не обнаружил: выбираем установку с графическим интерфейсом и далее диалоговый режим. Разметить файловую систему можно автоматом — на первый раз сойдет. После установки и перезагрузки, а так же входа в систему мы будем радостно лицезреть черный экран с приглашением командной строки — базовая установка выполнена!

— Два



Далее необходимо настоить доступ и управление по протоколу SSH. Так же, что бы особо не париться с консолью нужно бы установить mc (Midnight Commander) — аналог nc (Norton Commander) в DOS или tc (TotalCommander) в Windows. Но для установки нужно скопировать из сети пакет и установить его. Сети же нет. В то же время практически весь хоть сколько-то нужный софт есть на дисках Debian 6.0.0 stable (дисков, кажется, 6). Но я отказался от работы с дисками. Можно настроить сеть и воспользоваться официальным сетевым репозиторием — способ проще некуда. Однако это решение не для нас — нужна широкая автономность на первом этапе. Да и с каких пор мы идем по легкому пути — знакомство носит все же больше исследовательский характер. Значит нужно сделать свой локальный репозиторий.

1) подготовка…

Придется опять еще раз вернуться в виртульную машину. Входим в консоль под root'ом (на сервере мы в будущем настроим sudo, что бы по каждой ерунде не светить root'а). Создаем директории:

# mkdir debian/pool
# mkdir debian/pool/contrib
# mkdir debian/pool/main


В эти директории копируем содержимое одноименных директорий со всех дисков. Получится одна папочка объемом этак с 30Гб. После того, как содержимое всех дисков скопировано, создаём директории для хранения информации об находящихся в репозитарии пакетах:

# cd /debian
# mkdir -p debian/dists/stable/contrib/binary-i386
# mkdir -p debian/dists/stable/main/binary-i386


Далее все команды выполняются исходя из текущего каталога debian — за его пределы никуда не выходим! Собираем списки пакетов:

# apt-ftparchive packages pool/main/ > dists/stable/main/binary-i386/Packages
# apt-ftparchive packages pool/contrib/ > dists/stable/contrib/binary-i386/Packages


Сжимаем списки:

# gzip -c dists/stable/contrib/binary-i386/Packages > dists/stable/contrib/binary-i386/Packages.gz
# gzip -c dists/stable/main/binary-i386/Packages > dists/stable/main/binary-i386/Packages.gz


Создаём файлы Release:

# apt-ftparchive release pool/contrib/ > dists/stable/contrib/binary-i386/Release
# apt-ftparchive release pool/main/ > dists/stable/main/binary-i386/Release
# cd /debian/pool/dists/stable
# apt-ftparchive release. > Release


Теперь папку /debian можно скопировать на жесткий диск и при желании подключать и организовывать локальные репозитории в других системах. Что и делаем — копируем папку на съемных USB-хард.

2) подключение… заходим на сервер под root'ом

Подключаем USB-хард к серверу. Далее соображаем как определился хард:

# dmesg

Монтируем его и сливаем все что натворили раньше:
# mount /dev/sda1 /mnt/
# mkdir /dpool
# cp -r /mnt/* /dpool


Правим файл /etc/apt/sources.list — комментим все репозитории и прописываем наш:

deb file:/debian/ stable contrib main

Тут надо сделать краткое отступление. Как поправить файл, если одна консоль? Для этого есть редактор vi:

# cd /etc/apt
# sudo vi sources.list


Далее делаем что нужно: передвигаем курсор в нужную позицию и жмем «i». Это режим ввода. Делаем что нужно. Сделали и жмем ESC для возврата в командный режим. Далее — все по новой. После того как все завершено жмем последовательность «ESC: w! Enter» — это команда возврата с сохранением изменений. Страшно? После установки mc жизнь упростится…

Делаем апдейт:

# apt-get update
# apt-cache gencaches


Готово наше локальное хранилище!

— Три



Теперь наконец-то добрались до SSH вплотную почти.

1) не всю же жизнь под root'ом работать…

Но сначала немного облегчим себе жизнь — настроим sudo. Sudo — система позволяющая делегировать те или иные привилегированные ресурсы пользователям с ведением протокола работы. Проще говоря user сможет выполнять действия, которые изначально предполагалось выполнять только от root'а.

Заходим на сервер под root'ом и открываем файл /etc/sudoers. Используем опять же редактор vi:

# cd /etc
# vi sudoers


Ищем строку:

root ALL=(ALL) ALL

И под ней дописываем:

user ALL=(ALL) ALL

Выходим с сохранением. Готово! Теперь можно заходить под user'ом, но при выполнении критических команд просто перед командой добавлять «sudo». В первый раз система запросит текущий пароль для идентификации. Выходим из системы и заходим под user'ом. Пароль от root'а можно отныне записать на бумажке — пользоваться будем сильно редко, можно и забыть)

2) замучила консоль и vi…

Ставим пакет:

# sudo apt-get install mc

После установки введя команду

# mc

Теперь можно радоваться и забыть про команды mkdir, cp, ls, cd, а так же консольное управление в vi. Править файлы теперь можно по F4. Ностальгия по 2000ым — тогда я на 386ом только нортом и пользовался…

3) наконец-то SSH…

Ставим пакет:

# sudo apt-get install ssh

После успешной установки нужно добавить в конец файла /etc/ssh/sshd_config строку для ограничения доступа:

AllowUsers root, user

Выполняем:

# sudo mc

Далее идем по указанному пути и правим файл. После правки проблем с сохранением не будет — mc запущен под root'ом же. После правки нужно обновить сервис ssh — выходим в консоль и выполняем рестарт сервиса:

# sudo /etc/init.d/ssh restart

— Четыре



1) сеть…

Для последнего штриха перед переходом на удаленное управление нужно только настроить сеть. У меня ситуация простая: комп подключен к маршрутизатору проводом. Так как на маршрутизаторе включен DHCP, то интернет получим от него автоматом.

Настройки сетевых интерфейсов хранятся в файле: /etc/network/interfaces

Вот пример рабочего содержимого файла:
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 10.0.0.10
        netmask 255.0.0.0
        network 10.0.0.0
        broadcast 10.255.255.255
        gateway 10.0.0.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 10.0.0.1
        dns-search debian


Запускаем mc через sudo и правим этот файл в соответствии с теми сетевыми настройками, которые справедливы для вашей сети.

Настройка имени сервера и хостов находятся: /etc/hostname, /etc/hosts
Если наш сервер называется «debian», то проверяем:
В hostname значится только:

debian

А в host первые строчки:

127.0.0.1 localhost debian
10.0.0.10 debian.localhost debian


После всего этого гасим компьютер:

# sudo poweroff

2) удаленное управление…

Отключаем все кабели, тянем наш сервер в самый дальний угол и подключаем его в розетку и к сети. При этом надо заранее позаботится что бы на этапе загрузки BIOS не ждал нажатия кнопки с названием «any» после того как он с удивлением обнаружит, что клавиатура и мышь не обнаруживаются. Нажимаем кнопку питания и возвращаемся к рабочему компьютеру. На этом компе у меня винда. Как же теперь подключиться к серверу?

Есть такая программа putty. Добыть ее можно в интернете. После ее запуска во вкладке «Session» прописываем IP адрес нашего сервера, в качестве порта оставляем значение 22 (это стандартный порт для Shell). Проверяем, что во вкладке «Translation» выставлено UTF-8, что бы неогрести крякозяблев при отображении кириллицы. Возвращаемся в «Session» и открываем канал: «Open». После соединения нас попросят подтвердить создание ключей соединения с нами — подтверждаем. Вводит логин: user. Далее вводим пароль — пароль при вводе не отображается, т.е. это нормально. После соединения видим приглашение сервера и родную консоль, только не на всем мониторе, а в маленьком окошке, которое можно и подрястянуть мышкой. Это значит «Ура, товарищи!».

— Пять



В принципе, для досутпа к файловой системе можно использовать WinSCP. Это даст возможность копировать файлы между машинами. Но это будет не очень правильно, т.к. после авторизации SSH будет открыт доступ ко всей системе. В идеале хотелось бы просто сделать одну сетевую папку на сервере и открыть доступ к ней. И решение для этого есть.

Ставим пакет:

# sudo apt-get install samba

Теперь редактируем файл /etc/samba/smb.conf. Вот пример рабочего содержимого:
[global]

workgroup = WORKGROUP
server string = %h server
dns proxy = no

log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d

security = share
encrypt passwords = true
passdb backend = tdbsam

obey pam restrictions = yes

unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes

[homes]
comment = Home Directories
browseable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %S

[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700

[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no

[user]
path = /ftp/pub
readonly = no
guest ok = yes


В качестве комментария можно заметить следующее:
— необходимо указать рабочую группу, в которой работают виндовые машины;
— параметр security должен быть установлен в share;
— в секции «user» нужно указать реальный путь и разрешить гостевой доступ — собственно именно эту секцию мы в файл и добавляем.

После всего этого дела создаем указанные каталоги:

# mkdir /ftp
# mkdir /ftp/pub


И разбираемся с правами на эти папки:

# sudo chmod 0755 /ftp
# sudo chmod 0777 /ftp/pub
# sudo chown -R root /ftp


В таком случае доступ будет осуществлен к папке ftp, но в ней изменить ничего нельзя будет. А вот в папке pub — делаем что угодно. Естественно, можно все упростить выкинув папочку pub и поправив права для ftp…

Ну и напоследок перезагружаем сервис, что бы все настройки заработали:

# sudo /etc/init.d/samba restart

— Шесть



Теперь пора выпустить нашего малыша в сеть )))

Для начала неплохо было бы сделать сетевой файловый доступ и управление из любой точки сети. Но что мы имеем по топологии?
У нас должен быть выход в интернет с статичным реальный IP-адресом. Т.е. доступ из вне должен осуществляться напрямую, а не через коммутацию сетей провайдера. Например, пользователи сети Рамнет все сидят за большим NAT'ом, т.к. выходят в сеть через несколько пулов. Это значит, что IP выданный при регистрации вовсе и не совпадает с тем IP, который «отпечатывается», например, при посещении сайтов. Реальный IP — это однозначно тот IP, который прописан в сетевых настройках драйвера сетевой платы. Узнать реальный IP или нет можно воспользовавшись каким-нибудь сетевым сервисом в интернете, который показывает ваш IP-адрес. Допустим у нас имеется реальный IP.
Далее, если сетевой провод напрямую заведен на сервер, то проблем особых уже и нет — сервер уже в сети. А если стоит какое-то маршрутизирующее устройство (маршрутизатор, или промежуточный разветвитель-коммутатор на базе того же линукса)? В таком случае мы оказываемся уже за своим NAT'ом, который нужно немного настроить: осуществить проброс портов. Для каждой сетевой службы на машине имеется свой порт: SSH — 22, FTP — 21. Т.е., маршрутизатор нужно настроить так, что бы при обращении к порту по нашему реальному IP осуществлялось обращение именно к серверу по этому порту. Если наш сервер имеет адрес 10.0.0.10, а провайдером выдан реальный IP 172.122.34.89, то в маршрутизаторе необходимо выполнить проброс портов (Port Forwarding) 21 и 22 из вне (172.122.34.89) на сервер (10.0.0.10). Просто настраивается пара строчек в админке маршрутизатора или правится таблица маршуртизации промежуточного линукса-коммутатора. Допустим это тоже все сделали.

В таком случае для досутпа по SSH через putty необходимо просто будет указать реальный IP-адрес, порт 22 (см. выше, где описана небольшая настройка клиента putty). Осуществляем вход и получаем доступ к консоли сервера.

А файловый доступ? Тут чуть сложнее. Можно использовать WinSCP, но как уже упоминалось, это не наш метод. Samba работает только в локалке. Придется настроить FTP доступ…

Для FTP используем сервис proftpd. Ставим пакет:

# sudo apt-get install proftpd

Файл конфигурации находится здесь: /etc/proftpd/proftpd.conf. Вот пример рабочего файла:
Include /etc/proftpd/modules.conf

ServerName                      "Debian"
ServerType                      standalone
DeferWelcome                    off

MultilineRFC2228                on
DefaultServer                   on
ShowSymlinks                    on

TimeoutNoTransfer               600
TimeoutStalled                  600
TimeoutIdle                     1200

DisplayLogin                    welcome.msg
DisplayChdir                    .message true
ListOptions                     "-l"

DenyFilter                      \*.*/

DefaultRoot                     ~

RequireValidShell               off

Port                            21
                
<IfModule mod_dynmasq.c>
# DynMasqRefresh 28800
</IfModule>

MaxInstances                    10

User                            nobody
Group                           nogroup

Umask                           022  022
AllowOverwrite                  on

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>

<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

 <Anonymous /home/ftp/pub>
   User                         user1
   Group                        nogroup
   UserAlias                    anonymous user1
   #RequireValidShell           off
   MaxClients                   10
   TransferRate RETR,STOR 4096  

   <Limit LOGIN>
     AllowAll
   </Limit>
   <Limit READ>
     AllowAll
   </Limit>
   <Limit WRITE>
     AllowAll
   </Limit>
 </Anonymous>

 <Anonymous /home/ftp/pub>
   User                         user2
   Group                        nogroup
   #UserAlias                   anonymous user2
   #RequireValidShell           off
   MaxClients                   3
   #TransferRate RETR,STOR 4096

   <Limit LOGIN>
     AllowAll
   </Limit>
   <Limit READ>
     AllowAll
   </Limit>
   <Limit WRITE>
     AllowAll
   </Limit>
 </Anonymous></code>

Комментарии:
- сервер FTP запускаем отдельным процессом "standalone", хотя для слабых компов это и не будет оптимальным;
- секции "Anonymous" прописываем сами: для user1 будет открыт анонимный доступ с ограничением скорости в 4МБ/с и ограничением количества запускаемых серверов 10, для user2 ограничения скорости нет, а ограничение запускаемых таких серверов установлено в 3.

Перезапускаем ftp-сервер:

<b># sudo /etc/init.d/proftpd restart</b>

В таком случае мы сможем подключиться к нашему серверу используя любой FTP-клиент из любой точки сети. Учитываем, что порт 21 мы уже пробросили через маршрутизатор ранее. При этом можно использовать анонимный доступ или введя логин/пароль для авторизации снять лимит скорости скачивания/отправки. Но для авторизации нужно иметь зарегистрированные учетные записи на сервере. Создадим пользователей без создания для них домашних каталогов:

<b># sudo useradd user1
# sudo useradd user2</b>

И зададим им пароли:

<b># sudo passwd user1
# sudo passwd user2</b>

Ну вот теперь появилось уже что-то более-менее полезное)))

В идеале хотелось бы настроить защищенный SFTP доступ. Для proftpd существует модуль mod_sftp. Я очень долго (3 вечера) курил мануалы по этой теме и кое как сумел настроить. Но сервер нещадно резал скорость на уровне 10мегабит как при доступе внутри сети, так и снаружи. Ничего с этим не поделав пришлось отказаться пока от этого решения.
Так же SFTP можно настроить через SSH - в нем уже имеется такая возможность. Однако при такой организации у меня никак не получалось нормально запереть пользователя в нужной директории, т.к. иначе ему, после авторизации, открывался доступ сразу ко всей системе. 
SFTP идея гораздо полезнее (при FTP пароли вообще в открытом виде передаются, если это не анонимный доступ), но пока ее пришлось забросить.

Может быть будет кому-то интересно подключение mod_sftp. Я реализовывал так, что бы ключи авторизации цеплялись с SSH:
<source lang="bash"><IfModule mod_sftp.c>
SFTPEngine on
SFTPLog /var/log/proftpd/sftp.log
TransferLog /var/log/proftpd/xferlog-sftp.log
Port 2220
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPAuthorizedUserKeys file:~/.sftp/authorized_keys
SFTPCompression delayed
MaxLoginAttempts 6
</IfModule>


Это дело вставляется в proftpd.conf и доступ осуществляется через порт 2220. Но при этом mod_sftp должен быть установлен вместе с proftpd. В штатном репозитории proftpd собран без mod_sftp. Его придется «дособирать» самостоятельно. «Впатчивал» я по какой-то английской инструкции — уже не помню. Процесс это не менее творческий, чем сборка своего репозитория, а результат все равно не порадовал, поэтому это все описывать не буду.

— Семь



Итак, мы настроили FTP. Теперь хотелось бы уметь включать сервер когда надо. Например, нужно что-то взять из сетевой папки.

Тут есть одна тонкость. К нашему серверу подключено только электропитание и сеть. Но сетевые карты давно научились «будить» компьютер: достаточно только включить такую поддержку в BIOS компьютера и послеать не него «магический» пакет (Magic packet). Читаем в wikipedia:

Magic packet — это специальная последовательность байтов, которую для нормального прохождения по локальным сетям можно вставить в пакеты UDP или IPX. Обычно для WOL пакеты протоколов верхнего уровня рассылают широковещательно, так как в случае динамического присвоения адресов неизвестно, какой, скажем, IP-адрес соответствует какому MAC-адресу. Однако, для корректного прохождения через маршрутизатор, запрещающий широковещательные пакеты, можно послать пакет по какому-то определённому адресу.

Состав magic packet

Вначале идет так называемая «цепочка синхронизации»: 6 байт, равных 0xFF. Затем — MAC-адрес сетевой платы, повторённый 16 раз. То есть, если бы адрес платы выглядел как 01:02:03:04:05:06, то магический пакет оказался бы таким:

FFFFFFFFFFFF010203040506010203040506010203040506010203040506
010203040506010203040506010203040506010203040506010203040506
010203040506010203040506010203040506010203040506010203040506
010203040506010203040506


Есть куча программ, половина из которых работает, а другая нет, которые формируют и отсылают такие пакеты по указанному IP. Но это справедливо только в локальной сети. Но ведь у нас реальный IP — значит можно попробовать просто отослать пакет на него, а маршрутизатор настроить на ретрансляцию этого пакета серверу. Пакеты на «побудку» рассылаются обычно по портам 7 или 9. Прокидываем их через маршрутизатор на IP сервера. Далее проще всего воспользоваться сетевым ресурсом wakeonlan.ru: забиваем свой реальный адрес IP и MAC адрес сетевой платы сервера. Жмем кнопочку «Включить компьютер!». После пары отправок система вполне может и написать о неудаче включения — сервер-то все же за NAT'ом, а отклик на пингование маршрутизатора разумнее выключить в настройках маршрутизатора. Такой способ включения удобен, правда придется выучить наизусть IP и MAC. Но у нас же память хорошая — мы же задаем и помним правильные пароли составом не менее 14 символов?) Зато теперь сервер можно включить с сотового телефона (при наличии в нем браузера и GPRS доступа).

Интересная так же штука вышла с маршрутизатором. Дело в том, что пока сервер включен маршрутизатор точно знает к какому его порту этот сервер подключен. Но как только сервер выключаем маршрутизатор, через некоторое время, начисто забывает этот факт. Заставить делать широковещательную рассылку «магического» пакета по всем портам я не сумел его заставить. Пришлось на разбирательство потратить приличное время. В результате на маршрутизатор установил прошивку от DD-WRT (на базе линукса). Прошивка по сравнению с штатными прошивками от производителей просто блещет функционалом. Он явно избыточен) Однако и она забывала порт, хотя широковещательно пакеты рассылать уже могла (только комп почему-то не включался). Если был бы вместо маршрутизатора коммутатор-комп на линукс, то можно было бы просто подредактировать таблицу маршрутизации и делов-то… Аналогично и тут — нужно внести изменения в таблицу ARP маршрутизатора. В данной прошивке есть некая консоль и можно при загрузке маршрутизатора добавить скрипт запуска. Что и делаем, скрип таков:
ip neigh change 10.0.0.10 lladdr 00:10:20:1F:C4:57 nud permanent dev br0
ip neigh add 10.0.0.10 lladdr 00:10:20:1F:C4:57 nud permanent dev br0


Подразумевается, что на физическом аппаратном уровне порты маршрутизатора и платы друг друга «узнают» по своим MAC-адресам (они же с собой постоянно общаются при наличии питания) и маршрутизатор «догадается» что вышеуказанный IPшник будет принадлежать именно этому адресату (пока комп не включен это знание маршрутизатору недосутпно ибо еще нет никакого интерфейса сетевого уровня — однако эта знание мы и заложили при загрузке в ARP) после включения.

Ну вот — на этом и закончивается мое первое знакомство с линуксом. Если кому-то это помогло — всегда пожалуйста.
Александр @AlexanderS
карма
38,2
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (105)

  • +3
    Отличная статья, но вместо vi лучше новичкам использовать nano. И откройте для себя mkdir -p
    • +6
      но вместо vi лучше новичкам использовать nano
      Вот не надо тут всякие недоредакторы рекламировать. Vi — необычайно мощная штука, и чем раньше человек откроет для себя его потенциал, тем лучше.
      • +43
        Vi — необычайно мощная штука, и чем раньше человек откроет
        При работе с Vi, трудности у новичков возникают не столько с открытием, как с закрытием :).
        • +6
          А я вот поддержу заминусованного человека. vi — очень удобный редактор. А знание его очень полезно, т.к. он по умолчанию есть во всяких HP-UX, AIX и Solaris'ах, а вот nano надо еще поискать.
          • +2
            мне больше vim нравится, он поудобнее будет, чем vi
            • +3
              > т.к. он по умолчанию есть во всяких HP-UX, AIX и Solaris'ах, а вот nano vim надо еще поискать.

              :)
          • +1
            Согласен, желательно уметь пользоваться теми вещами, которые есть под рукой, не будешь же с собой носить все время «пакет» любимых программ
          • +1
            vi is forever, vi is everywhere! =)
        • НЛО прилетело и опубликовало эту надпись здесь
          • +2
            у меня на одном собеседовании был вопрос «как выйти из vi?» :)
            • +12
              они вас не проверяли, а просили о помощи.
            • НЛО прилетело и опубликовало эту надпись здесь
        • –1
          у vi есть две функции: бибикать и все портить :)
          • 0
            не правильно шутку рассказали
            У vi 2 режима работы: в одном он бикает, а в другом всё портит
          • НЛО прилетело и опубликовало эту надпись здесь
      • +2
        А я вот сколько не пытался понять, так и не разобрался как он работает. Ни написать не могу ничего, не сохранить, не выйти. И в Инете, как назло, не нарыл нормального описания для чайника.
        • +3
          Открыли, нажали i, отредактировали, 2-3 раза esc, напечатали :wq. Сойдет)?
          • +3
            Идеальный мануал! :)

            Вот с ним уже можно вполне понимать справочники с командами типа ":wq". Иначе можно от разрыва сердца умереть. Случайно как-то получилось что-то «отредактировать», а точнее накосячить. Исправить не получается, закрыть не получается… Очень плохие впечатления :)
            • 0
              Ну да, когда у меня ещё бибикалка не была отключена в терминале — я познал пословицу «бибикать и всё портить»))
              На самом деле — он простой, можно вот такие штуки попробовать. Хотя скрипты я пишу сейчас в emacs'e, он больше похож на обычные редакторы, а возможностей больше, чем у vim'a. Но из-за размера его редко на серверах встретишь, поэтому пришлось и с vi познакомиться немного.
              • 0
                Очень точная пословица. Запомнил :-)
        • +2
          Откройте для себя vimtutor, он идет в комплекте с Vim'ом и позволяет за час-другой освоить Vim на достаточном для повседневных задач уровне.
        • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Мануалов дополна. И на русском тоже.

          Базово:
          # vi имя_файла
          — редактирование: нажать кнопку i в нужном месте
          — выход без сохранения: ESC: q! Enter
          — выход с сохранением: ESC: wq Enter

          Но редактор да, неудобен. А вообще у меня воспитание на двухоконном нортоне, посему мне не нужны ни проводник, ни еще чего-то. Поэтому я ве таки и поставил MC.
        • 0
          в консоли наберите vimtutor и будет вам щастье!
      • +2
        Ну-ну… Вы хотите поговорить об этом?) Я за emacs, например. Но nano/ee/joe действительно неплохие редакторы для «я новичек, мне просто надо быстро поправить строку в конфиге».

        А вообще в мануалах стоит писать «editor /etc/file.conf», дабы не холиварить.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Я когда в хостинге работал, именно там пересел на vi — он есть на каждом серваке. И ведь ни раз меня выручало это. Например, упал сервак: грузишься в single user mode через ip-kvm, а там нет никаких редакторов кроме vi.
          • НЛО прилетело и опубликовало эту надпись здесь
      • +1
        Все же человечней, для меня, vim. Новичкам с ним проще, а потом если vi встретят то точно смогут разобраться.
    • +2
      И откройте для себя mkdir -p
      И фигурные скобочки.
    • 0
      Полностью согласен. Сам давно юзаю Debian.
    • 0
      Еовичкам лучше юзать WinSCP и Notepad++
  • +2
    > Сети же нет.
    Почему? У вас WiFi-only сервер и в дефолтном ядре нет нужного драйвера? Так проще вставить сетевую карту и установить драйверы.

    Если хотите свой репозиторий — используйте стандартные инструменты, которые позволяют обновлять репозиторий.
  • НЛО прилетело и опубликовало эту надпись здесь
  • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Фигурнов это классика. Отличная книга, прекрасный автор. Читалось легко и приятно, хотя к данному топику и не относится :)
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Nostalgie
        • +3
          Norton Disk Doctor… aidstest… ADINF… config.sys… emm386.exe… эх
          • +1
            а как же smartdrv.exe?
            • +2
              Если вам дать сейчас 386 вы с ностальгией будете на нем работать? Ну, может быть первые минут 20.

              Ностальгия это больше от того, что было время, когда можно было придти домой и до ночи не вылезать из-за компа борясь за освобождение килобайт 20 памяти. Время когда никаких забот кроме этого в жизни может быть и не было. Зато радовался-то как, когда получалось )))
          • 0
            а также THIS IS NOT A QEMM ERROR!
  • +6
    Мы не ищем легких путей?
    Для записи загрузочных флешек есть UNetbootin.
    • +1
      и нет только. Гораздо более годная прога — PendriveLinux. Прямо из нее можно скачать все популярные и не очень *nix системы. PendriveLinux рекомендован Ubuntu.com.

      Ну а на линуксе/маке это и вообще две строчки.
    • +3
      dd для этого есть:)
  • +1
    зачем каждую нужную команду выполнять через sudo, если можно переключиться на постоянный рут шелл?
    • –3
      И случайно вместо rm -rf ./* запустить в нём rm -rf. /*
      • +1
        Без --preserve-root rm не даст вам отстрелить себе ногу.
        • 0
          / не даст, а /* — вполне.
        • +1
          --no-preserve-root разумеется
      • 0
        и часто вам действительно приходилось писать ./*? %)
        или это всё дутые мифы

        • +1
          Приходилось восстанавливать инфу с убитой таким образом машины. Благо там чел успел понять, что что-то тут не так, и нажать Ctrl-C, так что реально потерялось немного.
          • +1
            вообще говоря, набрать rm -rf * в любой директории с некоторым количеством значимых файлов тоже существенный фейл
            всякие там /bin, /lib, /usr грохнуть совсем не страшно
          • 0
            что с дураков взять ;)
            пусть кавычки везде ставят
    • 0
      Первый раз я так и делал.
      Но потом решил все же через sudo, что бы привыкнуть сразу. Ибо такая привычка скажется на безопасности в будущем.
    • НЛО прилетело и опубликовало эту надпись здесь
  • +9
    Интересная статья, бесспорно, только вот жаль, что в последнее время на хабре подавляющее большинство статей в стиле «Для начинающих». А мне вот, к примеру, экшна хочется, мяса там…
    • +1
      , трэша и угара ^)
    • 0
      Да на хабре вроде всего хватает.
  • –3
    Хороший, годный пост. Добавил в закладки.
  • +1
    ну а iptables разве не стоит настроить? ну хотя бы чтобы сервер ещё и роутером был и чтобы снаружи пускало только с определенных ip и т.д. имхо это тоже надо включать в такую инструкцию в обязательном порядке. ну ещё dns можно настроить через тот же dnsmasq
  • +2
    имхо vsftpd поюзабельнее будет.
  • +3
    Новичок может столкнуться с проблемой редактирования файла sudoers, рекомендую для его редактирования применять все же командочку visudo. Присоединяюсь к предыдущему комментарию, не мешало бы немного iptables добавить. В целом симпатичная статься, видно что написано было с душой.
    • 0
      Я уже точно не помню, но вроде из-под рута проблем возникнуть не должно.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Согласен, на счет рук, однажды такой вот умелец, накосячил в правилах, на рут был на дебиане выключен (логиниться не мог), у него видите ли не сохранялось, изменил права, сохранил, и сменил обратно, и больше у него команда sudo не сработала, пришлось грузить с CD, править файл… вообщем бед может быть много
  • 0
    > Так же SFTP можно настроить через SSH — в нем уже имеется такая возможность. Однако при такой
    > организации у меня никак не получалось нормально запереть пользователя в нужной директории, т.к. иначе > ему, после авторизации, открывался доступ сразу ко всей системе.

    Chroot'ить по sftp можно с помощью MySecureShell… И пересобирать не надо будет. Более того, это единственный вменяемый способ зачрутить по sftp юзеров на древних дебианах типа sarge не пытаясь собрать новую версию proftpd, которая может и не собраться.
    • 0
      SFTP+костыльный chroot выглядит уныло
      почему не FTPd с TLS?
  • 0
    > Так же SFTP можно настроить через SSH — в нем уже имеется такая возможность. Однако при такой
    > организации у меня никак не получалось нормально запереть пользователя в нужной директории, т.к. иначе
    > ему, после авторизации, открывался доступ сразу ко всей системе.

    Ой ну вашу ж… debian.pro/?s=sftp+chroot лениво было набрать?
  • +1
    Самой большой моей ошибкой при изучении Linux (Debian) было выполнение команды
    sudo chown 777 . -R
    из корня файловой системы на боевом сервере.
    Неладное я заподозрил, когда увидел сообщения, что к процессам получить доступ не удалось и не удалось им поменять права.

    С тех пор я гораздо внимательнее отношусь к тому, что пишу в консоль )
    • –1
      chown 777? может chmod 777?
      • +1
        Был бы внимательнее — выполнил бы chmod 777 да еще и в нужном каталоге.
        А так — именно chown 777 и в корне от рута…
        Попробуйте, довольно интересные эффекты )))
        • 0
          товарищ по несчастью — жму руку.
  • +7
    Рискую быть в минусе, но похоже возраст и интересы основной аудитории Хабра за последнее время сильно изменились, раз подобные статьи встречаются с восторогом.
    • +2
      К 1 сентября? =3
      • +1
        Ностальгия ;)
    • +3
      Рискую оказаться банальным, но сильно-интересно-профессиональные статьи появляются не так уж часто. На этом фоне любой материал аудитории начинает нравиться.

      И, пожалуй, не стану скрывать, что сам люблю подобные статьи. Так как я специалист в другой области, а Linux меня тоже интересует, но набегами. Подобные статьи позволяют мимоходом чуть улучшить свои непрофессиональные познания.
    • 0
      Я по роду своей деятельности инженер. Схемы описываю на VHDL. Кое-какой стаж есть. Иногда в инете надо что-то найти. И если тема называется «Основные правила VHDL для новичка», то я эту тстаью пропускаю, т.к. априори на много процентов уверен, что потрачу время, а свою специфичную проблему вряд ли решу.
      В названии написано ключевое слово «новичка». Так что читать или нет это только проблема выбора, т.к. из самого название вытекает содержание. Вот если бы я обозвал тему «Тонкая настройка Debian Server», то это было бы уже нагло )))
  • +5
    После успешной установки нужно добавить в конец файла /etc/ssh/sshd_config строку для ограничения доступа:

    AllowUsers root, user

    root то зачем? Для чего придумывали su и sudo, что бы потом так спокойно под рутом по ssh заходили? Я вот наоборот первым делом PermitRootLogin no ставлю. А то ломятся всякие. Ну и вообще авторизацию по паролю запрещаю. Ключи как-то надежнее :)
    • 0
      Принято к сведению!
  • +1
    Так же SFTP можно настроить через SSH — в нем уже имеется такая возможность. Однако при такой организации у меня никак не получалось нормально запереть пользователя в нужной директории, т.к. иначе ему, после авторизации, открывался доступ сразу ко всей системе.

    есть пакет scponly — ставите его chroot — версию шеллом пользователю — ну и в хоме пользователя создаете chroot-окружение (/usr/share/doc/scponly/setup_chroot/)
    и пользователи отлично пользуются sftp/scp ( можно еще в окружение положить бинарники rsync или что-то еще, что можно пользователю выполнять ) не имея при этом шелл-доступа
  • 0
    посоветую несколько штук

    Использовать пейджеры — dmesg | tail
    • +1
      Черт, не дописал


      Монтировать можно по UUID, тогда знать, какое виртуальное устройство назначили вашей флешке вовсе не надо.

      sudo mc

      не очень идейно, как мне кажется, в mc всегда можно Ctrl-O; sudo nano;…
  • +1
    netmask 10.0.0.0

    ru.wikipedia.org/wiki/Маска_подсети Если я правильно понял, здесь должно быть 255.0.0.0

    Статья вроде бы и хорошая. Но не уровня хабра. Практически все перечисленные вопросы находятся на первых страницах гугла и яндекса.
  • +4
    Предчувствую резкий слив кармы, но для кого написана эта статья? Что это за недоделанный мануал, как установить дебиан на обычный комп? Таких статей в интернетах полно и ничего полезного здесь я не вижу. Собрать три мануала в один — особого труда не представляет.

    Если это только ssh/ftp итд, то где информация, что вычищалось в системе? Или может быть автор поставил дефолтную систему и радостно ничего не чистил?

    Крайне умиляет:
    >Еще и усложнил задачу — только консоль, никаких исков (как же — это ж линукс).
    через несколько абзацев
    >Устанавливал «оптом» — т.е. и GUI тоже (в 6 версии был только GNOME).

    PS. Хабр скатился до мануалов по инсталляции дебиана. Даже не смешно.
    • 0
      Если это только ssh/ftp итд, то где информация, что вычищалось в системе?

      Что надо вычищать при установки с netinst без интернета? Там в принципе ставятся только необходимый минимум. Можно конечно часть пакетов удалить и заменить например на busybox, только смысл?
      • –1
        >Там в принципе ставятся только необходимый минимум.
        хм. вы настолько наивны? вот к несчастью нет ниодного сервера с дебианом под рукой. Но вот какие-то части моего организма подсказывают, что я в минимальной установке найду что-нибудь наподобие selinux, manpages, кучу ненужных библиотек, sendmail итд.
        • 0
          А вы похоже не ставили дебиан ;) Из выше перечисленного маны ставятся, но все же они полезные, удалять их, что бы сэкономить 1Мб… «кучу ненужных библиотек» слишком размыто. Да, например ставиться libselinux, только проблема в том, что она в зависимостях у cron (он тоже не нужен?), passwd и т.п. И удалить ее не так уж и просто, а если хочется ломать зависимости, то зачем дебиан? Тогда lfs в самый раз, можно поставить по минимуму :) Еще есть libsqlite, но ее тянет aptitude. aptitude тоже удалим? Есть perl-base, но он тоже идет как пакет первой необходимости. В общем найти что можно выпилить практически нереально, не считая одного пакета manpages.
          Смотреть, что стоит на уже готовом сервере смысла нет. Кто знает, как там разворачивали Debian. Я говорю именно про установку с netinst без сети с убиранием пары галок на этапе tasksel. Или с помощью debootstrap.
          # ls /usr/lib | wc -l
          88 88 1238
          • +1
            1 Так как в тексте промелькнула фраза о gnome сложно представить, что это была установка с нетинсталла.

            2 Последняя моя установка сего дистриба проходила где-то год назад. Поэтому сейчас точно вспомнить, что конкретно я там чистил я не осилю. Прийдется поставить куданить… инсталяция системы…
            debian-6.0.2.1-i386-netinst.iso 28-Jun-2011
            Итак — что бы я сразу выбросил:

            debconf
            atp-utils
            usbtools
            laptop-detect
            vim
            nano
            ncurses
            udev
            man-db

            Дальше перечислять не буду — нет времени, но куча пакетов lib… тоже должны уйти в топку.
            По поводу того, что не хочется ломать зависимости — Не будем холиварить, но я как то и не особо агитирую за дебиан.

            Я не хочу никого обидеть — мне действительно было бы интересно узнать, каким образом дебиан можно вылизать + как это сделать по возможности быстрее.
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Ну например чтобы получить чистую систему безо всякого мусора. Если мы конечно говорим о сервере. Экономим место, процессорное время итд итп. Линукс же :)
                • НЛО прилетело и опубликовало эту надпись здесь
                  • 0
                    Вполне возможно что время это отнимет изрядно, но радость от получения чистой системы многократно затмевает все горести очистки).
                    Особенно, если эту радость использовать для шаблона виртуального сервера и потом развернуть из него 50 или 100 машинок.
            • 0
              Я не хочу никого обидеть — мне действительно было бы интересно узнать, каким образом дебиан можно вылизать + как это сделать по возможности быстрее.

              Зачем? Взять другой дистрибутив не проще? Без debconf дебиан вообще остается дебианом? Можно хотя бы софт обновить? Или задача сделать что-то вроде ROM прошивки? Тогда точно дебиан просто не тот инструмент. Проще собрать статически тот же busybox и нужный ftp сервер.
              • 0
                Эммм. Может быть я неправильно выразился —
                Я бы хотел видеть в статье о установке сервера сугубо для ссш и фтп, установку сервера сугубо с фтп и ссш. МНЕ бы было интересно прочитать о том, как можно пилить дебиан.
                Мне уже до этой статьи было известно, что я могу взять что-то другое. Но взяв что-то другое я узнаю того, что мне было бы интересно о дебиане.
                В повседневной жизни я им не пользуюсь и навряд ли буду пользоваться, если будет возможность использовать rpm-based дистрибутив.

                Надеюсь сейчас смысл моего высказывания понятен)
                • 0
                  Да вот не очень мне понятно, зачем это делать с дебианом? Не, конечно возможно получилась бы интересная статья, как микроскопом забивать гвозди, как его для этого надо разобрать, убрать стекла и другие хрупкие части… Но он для этого не предназначен. На мой взгляд базовая система с 8мю запущенными процессами (udevd — 3 штуки, dhclient, rsyslogd, acpid, cron, getty (их вообще 6 штук по умолчанию запускается, но закомментировать в одном файле 5 строк не сложно)) уже достаточно минимальная, что бы от туда ничего не пришлось выпиливать. Да и потом, что вы хотите получить от ssh? Удалив nano и vi (vim и так не стоит), ncurses, практически сломав apt.
                  Повторю, все эти удаления ломают зависимости и в apt уже при таком раскладе уже практически нет смысла. Так зачем все ломать?
                  • 0
                    Насколько я понял — вы на продуктивные сервера ставите до безобразия ванильный дебиан и все доставляете сугубо apt, ничего не меняя в конфигах? Если это не так — мне было бы интересно что ВЫ делаете на свежеинсталеной системе.
                    • 0
                      Зависит от задачи. Но да, что либо дополнительно удалять из базовой системы я не вижу смысла. Тем более что уже сталкивался со случаями, когда такой излишний минимализм несколько мешал выполнять задачу, причем как всегда в самый не подходящий момент (что упало, доставить удаленное возможности нет, а надо :)) А так, в частности была как-то необходимость запустить на одном хосте несколько десятков виртуалок, для теста. Собрал образ дебиан с помощью debootstrap, сам образ получился где-то 400мб, я туда еще что-то доставлял, настроил и запустил. Каждая виртуалка кушала не более 40 мб. Т.е. имея 8Гб ОЗУ особых проблем не испытывал. Проц тоже грузил только тестируемый софт. Ну а экономить 400мб на харде как-то не видел смысла. Тем более что в ходе работы приходилось индивидуально что-то менять на одной из виртуалок. Так что излишнее обрезание могло бы привести к не очень приятным последствиям.
    • –1
      Отвечу на первое предложение. Определить тому, кому адресована статья можно путем анализа ее названия со словом «новичек». И сделать вывод тратить на нее свое время или нет.

      Про «крайне умиляет». Вы прочитали в одном абзаце: «Еще и усложнил задачу — только консоль, никаких исков», а в другом: «Устанавливал «оптом» — т.е. и GUI тоже » и сделали вывод о сопливости автора. Только если почитать внимательно, то тогда можно понять, что эти фразы относятся к двум разным установкам, а не к одной.

      Кстати, собрать три мануала в один оказывается и не такая простая задача. В каждом мануале по опечатке, а без опыта и образования вообще тяжко получается )))
  • 0
    В samba при security = share, секция [homes] работать не будет.
    Нужно либо security = user либо одно из доменных значений.
    smb-conf.ru/security-g.html
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Я немножко помешан на автономности.
      Дело в том, что интернета у меня неприлично долго не было. Потом появился плохой интернет. Потом появился полуплохой интернет. Ну и т.д. Поэтому осталась суровая привычка зависеть от сети минимально.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Так репозиторий-то только один раз сделать надо.
          Потом все это на внешний хард скинул и все. А в будущем ставим систему, монтируем хард, немного правим пути и далее все что душе угодно. Типа: есть интернет — лучше через него, а нет — ну и нет)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.