воскресенье, 1 ноября 2009 г.

Файловый сервер Ubuntu 9.04 в домене Windows 2003 пошаговое руководство

Исходная ситуация была такая: есть некий сервер, на базе windows 2000 сервер (признаться честно - сомнительной лицензии, скорее всего пиратская), и этот сервер выполняет три основные функции: ftp-сервер (в основном, анонимный), файл-сервер и веб-сервер (простые html-страницы).
В связи с различными пертурбациями этот сервер от нас уезжает в регион, взамен него купили сервер - SuperMicro, на который планировалось поставить линукс и плавно перенести туда все функции.
Скажу честно, лучше всего с его RAID-массивом справился Ubuntu Server 9.04, поэтому он и был выбран в качестве основной ОС. Что бы там ни говорили про несовместимость Webmin и Ubuntu, я на него решительно поставил Webmin. Зачем? Элементарно - администрировать его не мне одному, адекватных спецов по Линуксу кроме меня нет, и чтобы по ночам не будили с глупыми вопросами для бытовых нужд и ставился Webmin. В конечном итоге все равно все конфигурировать руками пришлось. А вот наглядно поработать с пользователями и группами удобнее все же через веб-консоль.
На Ubuntu в ходе всех плясок был предустановлен следующий софт: Apache+MySQL+PHP для веб, Samba (практически все доступные потроха от нее, обязательно с winbind и kerberos 5), ProFTPD и SSH сервер (само собой).
Причем ProFTPD на стандартном компакт-диске не идет, его надо будет тянуть с инета.
Поскольку LAMP под Ubuntu настраивается довольно тривиально, я писать про это не буду.

Интернет для обновлений сервера у меня идет через прокси, поэтому первым делом после установки сервера чтобы работал apt-get через прокси создаем файл proxy в папке командой
sudo touch /etc/apt/apt.conf.d/proxy 
внутри которого пишем одну единственную строку:
Acquire::http::Proxy "http://10.115.1.250:3128";
(конечно же, подставляем свой айпи и свой порт вместо моих). Не забываем учитывать большие и маленькие буквы и не забываем точку с запятой в конце.
Следующим шагом (да, я сентиментален) делаем
sudo apt-get update
чтобы получить с сервера список пакетов

sudo apt-get install mc
и установить Midnight commander. Конечно, кому-то он нахрен не нужен, но я настоятельно рекомендую его новичкам, чтобы они понимали, что делают и визуально хотя бы приблизительно запоминали пути и файлы.
Кстати, еще один плюс Midnight Commander'а в том, что его можно запустить командой
sudo mc
и совершенно не парясь получить как рутовый доступ к файлам через панельки, так и рутовую консоль (Ctrl+O работает идеально), без необходимости повторно подтверждать пароль после некоторого простоя. В дальнейшем я писать слово sudo не буду, подразумевая, что все команды должны выполняться с правами суперпользователя, через консоль mc.
Кстати, если вы работаете через putty то (во избежания мусора на экране) слева в пункте меню Translation выберите в выпадающем списке вместо KOI8-R привычный для убунты UTF-8.
Следующим шагом добавляем пару необходимых репозиториев - для этого редактируем файл
/etc/apt/sources.list 
и вносим в него две строки:
deb http://download.webmin.com/download/repository sarge contrib 

- правильно, это webmin, после чего сохраняем файл и выполняем команды
apt-get install webmin

конечно же, соглашаясь и нажимая "да" везде, где потребуется. Одновременно с этим ставим Иксы, если надо, и простенький менеджер окон:
apt-get install xorg blackbox
чтобы blackbox запускался автоматически по команде
xinit
делаем следующее: в папке своего пользователя (того единственного, которого Вы завели когда ставили систему), например, /home/iamuser создаем соответствующий rc-файл
touch /home/iamuser/.xinitrc
да, с точкой впереди. В этом файле пишем строку:
exec blackbox
и сохраняем. Теперь для того, чтобы запустить иксы, надо будет лишь набрать xinit и все. Кстати, включать их лишний раз не рекомендую - они нужны лишь для того, чтобы наглядно управлять виртуальной машиной на стадии установки-настройки, дабы сильно не заморачиваться с командной строкой.

Но это все была лирика. Теперь - самое главное и страшное: надо настроить Samba таким образом, чтобы она принимала всю регистрационную информацию с виндового контроллера домена. Честно говоря, настраивать самбу через вебмин - ну, разве что кроме создания расшаренных ресурсов - это извращение. Вручную редактируем файлы и сразу пишем туда всю необходимую информацию. Объясню подробно на своих конфигах:
/etc/samba/smb.conf
[global]
    log file = /var/log/samba/log.%m  #файл лога
    restrict anonymous = 2

    idmap gid = 10000-20000
    socket options = TCP_NODELAY
    client use spnego = no
    null passwords = yes
    encrypt passwords = yes
     realm = SIBRC.MCHS.RU 
#домен, в котором мы будем регистрироваться
    template shell = /bin/bash
    dns proxy = no
    netbios name = SERV2
#netbios имя этого сервера
    idmap uid = 10000-20000
    password server = 10.115.1.100
#адрес сервера, на котором будут проверяться пароли  
    path = /home
#базовый путь к домашней папке
    template homedir = /home/%D/%U #формат шаблона для автоматического создания папок
    workgroup = VSRC #netbios-название домена
    os level = 20
    security = ads
    syslog = 0
    usershare allow guests = yes
    max log size = 1000

[parus]
#шара бухгалтеров, туда смогут писать и читать только они
    writeable = yes
    user = @VSRC\obu
#на самом деле это не пользователь, это ГРУППА
    only user = yes
    write list = @VSRC\obu
#на самом деле это тоже группа
    path = /home/parus

[ftproot]
#это путь к корню ftp, для внутреннего пользования, общедоступен
    writeable = yes
    public = yes
    path = /home/ftp

На этом с самбой вроде все. Но на самом деле для того, чтобы это все заработало, надо еше настроить kerberos. Поэтому второй конфиг, который мы правим -
/etc/krb5.conf
В нем у меня дословно следующее:


[logging]
default = FILE:/var/log/krb5.log

[libdefaults]
default_realm = SIBRC.MCHS.RU #Большими буквами пишем свой домен
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24000
clock_skew=150

[realms]
#Здесь мы его еще раз описываем
SIBRC.MCHS.RU = {
   default_domain = SIBRC.MCHS.RU
#Большими буквами пишем свой домен
   kdc = dc.sibrc.mchs.ru #полное название контроллера домена
   admin_server = 10.115.1.100 #айпи адрес контроллера домена

}

[domain_realm]
#Тут тавтология какая-то, но без нее не работает:
.SIBRC.MCHS.RU = SIBRC.MCHS.RU
SIBRC.MCHS.RU = SIBRC.MCHS.RU  


После этого перезагружаем все запчасти строкой
/etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start 
Проверяем/обновляем радости кербероса следующей последовательностью команд:
 kinit winadmin
(winadmin - имя администратора домена) 
Он запросит пароль для авторизации на вашем контроллере домена. Вводите, и все ок.
После этого самый трогательный момент (на этом месте у многих не получается что-то - в основном из-за лишних строк в конфигах) - включение нашего сервера в домен винды:
net ads join -u webadmin
Он опять запросит пароль - дайте - и если он не написал что-то про неверную роль сервера, то полдела сделано!
Запрашиваем списки пользователей и групп контроллера домена windows командами
wbinfo -u
wbinfo -g

- он вывалит на экран все группы и всех пользователей. Чувствуете радость? Правильно :)
Теперь еще несколько конфигов перед началом работы (обычно меняются только пара строк, остальное остается нетронутым, что поменялось - я выделил в комментарии):
/etc/nsswitch.conf
passwd:         compat winbind #тут должно быть так
group:          compat winbind
#тут должно быть так
shadow:         compat
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis


/etc/pam.d/common-account
добавляем строку
account sufficient pam_winbind.so 

/etc/pam.d/common-auth
 добавляем строки
auth sufficient pam_winbind.so
auth sufficient pam_unix.so nullock_secure use_first_pass
auth required pam_deny.so  






/etc/pam.d/common-session
добавляем строку

session required pam_mkhomedir.so umask=0022 skel=/etc/skel  

/etc/pam.d/sudo
добавляем строки

auth sufficient pam_winbind.so
auth sufficient pam_unix.so use_first_pass
auth required pam_deny.so  
 



В общем-то и все.
Еще раз делаем
/etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start 
и у нас все должно работать! :)

Конечно же, следите за тем, чтобы все папки, указанные в конфигах, существовали. Кстати, создайте папку с нетбиос-именен домена в домашней папке, которая указана в конфиге самбы.
В моем случае это папка
/home/VSRC
Откровенно говоря, не факт, что она ему понадобится, но быть должна.

Следующий трудный момент - настройка ProFTP
Для начала установим его командой
apt-get install proftpd
Надо сказать, что и его НЕ НАДО настраивать через вебмин - замаетесь. Вебмин нужен лишь как руль, а конфигурировать лучше руками.
В случае с Ubuntu ProFTP имеет два файла конфига - основной, /etc/proftpd/proftpd.conf и тот, где по идее должны быть прописаны все виртуальные ftp-сервера - /etc/proftpd/modules.conf
Кстати, перед установкой я настоятельно рекомендую взять вот эти файлы, распаковать архив в какую-нибудь отдельную папочку и выполнить в ней команду
dpkg -i *.deb
Эти файлы содержат необходимые исправления для того, чтобы русские буквы в proftpd отображались корректно.

Итак, мои конфиги (остановился я на принципиальных моментах):
/etc/proftpd/proftpd.conf

Include /etc/proftpd/modules.conf
UseIPv6                off #выключаем адреса
IPv6
IdentLookups off
ServerName SERV2
#netbios-имя сервера
ServerType            standalone
DeferWelcome off
CharsetLocal UTF-8
#важный момент - кодировка на сервере одна...
CharsetRemote CP1251 #...а пользователю дается другая
MultilineRFC2228        on
DefaultServer on
ShowSymlinks            on
TimeoutNoTransfer        600
TimeoutStalled            600
TimeoutIdle            1200
DisplayLogin welcome.msg
DisplayChdir                   .message true
ListOptions                    "-l"
DenyFilter            \*.*/
Port 21
MaxInstances            30
User proftpd
#пользователь по умолчанию
Group serv2 #группа по умолчанию
Umask                022  022
AllowOverwrite            on
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

QuotaEngine off


Ratios off


DelayEngine on


ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock


AdminControlsEngine off


Вносите свои изменения, и можно использовать этот конфиг.
Второй же содержит информацию об открытых папках, я особо модули не отключал, просто дописал в конце свои строки, где подробно об анонимном пользователе ftp:
/etc/proftpd/modules.conf

ModulePath /usr/lib/proftpd
ModuleControlsACLs insmod,rmmod allow user root
ModuleControlsACLs lsmod allow user *
LoadModule mod_ctrls_admin.c
LoadModule mod_tls.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_wrap.c
LoadModule mod_load.c
LoadModule mod_ban.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_file.c
LoadModule mod_dynmasq.c
LoadModule mod_ifsession.c

#указываете папку, которая будет считаться корнем для анонима
AnonRequirePassword off #не требуем пароль
User anonymous #пользователь в системе, от имени которого будет идти запись
Group VSRC\domain users #группа, от имени которой будет идти запись (заметьте - группа принадлежит контроллеру домена windows)
DisplayLogin welcome.msg
DisplayChdir .message
 


AllowRetrieveRestart on #разрешаем докачку
MaxClients none #не ограничиваем в количестве подключений - сетка-то локальная
DefaultChdir /home/ftp #тоже надо, корень анонима
LoginPasswordPrompt off #не запрашиваем пароль
AllowAll
AllowOverwrite on
GroupOwner VSRC\domain users
RootLogin off
AuthUsingAlias off
 

#особые права для особой папки - оставил для примера
AllowRetrieveRestart on #разрешаем дописывать файлы
AllowStoreRestart on
AllowAll 
#разрешаем гадить в папке как только ему хочется
AllowOverwrite on


Все. Безумный анонимный доступ готов.

1 комментарий: