Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 10: Сервер малого офиса / домашнего офиса

Оригинал: "Ubuntu Hacks: Chapter 10 - Small Office/Home Office Server"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: ноябрь 2010 г.

Совет # 94: Создаем файловый сервер

Открываем общий доступ к файлам из компьютеров с системами Linux, Windows и Macintosh.

Есть много различных протоколов для общего доступа к файлам, у каждого из которых есть сильные и слабые стороны и каждый из которых был разработан под конкретную платформу. Традиционными протоколами доступа к файлам в Unix является NFS (Network File System), в Mac OS - AppleShare, а в Windows - SMB (Server Message Block). Запуск файлового сервера в случае, когда доступ происходит из нескольких различных систем, требует одновременной поддержки нескольких протоколов, но в последние годы на всех платформах наблюдается сближение позиций и использование протокола CIFS (Common Internet File System). CIFS берет свое начало от SMB и является стандартным методом обмена файлами в последних версиях Windows. И, благодаря проекту Samba, он также очень хорошо поддерживается как клиент и как сервер в системах Linux и Mac OS.

Серверная часть Samba может работать в сети Windows даже в качестве контроллера домена и поддерживать нескольких методов аутентификации, в том числе LDAP и TDB. В крупных системах выгодно использовать LDAP, но этот метод более сложный в настройке, так что в данном совете будет описываться метод TDB, которого вполне хватит для сетей с несколькими сотнями пользователей.

Включаем поддержку квот

Чтобы работать с квотами, сначала установите пакет quota:

$ sudo apt-get install quota

Откройте в вашем любимом редакторе файл /etc/fstab (таблицу файловых систем) и найдите строку, в которой указана ссылка на раздел, в котором будет организован совместный доступ. Добавьте параметры usrquota и grpquota. Если ваш домашний директорий /home установлен в отдельном разделе, вам следует для него также добавить те же самые параметры. Конечный результат должен выглядеть примерно так:

/dev/hda2     /        ext3 defaults,usrquota,grpquota    0   1
/dev/hda3     /home    ext3 defaults,usrquota,grpquota    0   2

Затем настройте файлы квот для пользователей и для групп и перемонтируйте файловую систему:

$ sudo touch /quota.user /quota.group
$ sudo chmod 600 /quota.*
$ sudo mount -o remount /

Если у вас есть отдельный раздел /home, то и для него сделайте то же самое:

$ sudo touch /home/quota.user /home/quota.group
$ sudo chmod 600 /home/quota.*
$ sudo mount -o remount /home

Поскольку в разделах уже есть данные, вам нужно запустить утилиту проверки квот, чтобы она просканировала файловые системы и создала для каждого пользователя и для каждой группы записи их текущего состояния, после чего принудительно активируйте квоты:

$ sudo quotacheck -avugm
$ sudo quotaon -avug

Теперь механизм квот принудительно запущен, но лимиты для пользователей и для групп не установлены, так что ничего не ограничивает объем дискового пространства, которое они могут использовать.

Устанавливаем Samba

На вашем сервере установите сам пакет Samba, плюс некоторые дополнительные пакеты, в которых находится документация, средства совместного доступа к файлам и средства совместного доступа к принтерам:

$ sudo apt-get install samba samba-doc libcupsys2-gnutls10 \\
                 libkrb53 winbind smbclient

В конфигурационном файле Samba, созданном по умолчанию, нужно сделать несколько изменений. Так что откройте в редакторе файл /etc/samba/smb.conf, просмотрите его и сделайте настройки в соответствии со следующим примером. Большую часть примера можно скопировать без всяких изменений, но задайте для переменной WORKGROUP имя домена Windows (вы даже можете оставить его значение равным WORKGROUP), а для переменной FILESERVER укажите имя хоста вашего сервера Linux:

global]
   workgroup = WORKGROUP
   netbios name = FILESERVER
   server string = %h server (Samba, Ubuntu)

   passdb backend = tdbsam
   security = user
   username map = /etc/samba/smbusers
   name resolve order = wins bcast hosts
   domain logons = yes
   preferred master = yes
   wins support = yes

   ## Use CUPS for printing
   printcap name = CUPS
   printing = CUPS

   ## Set default logon
   logon drive = H:
   #logon script = scripts/logon.bat
   logon path = \\\\fileserver\\profile\\%U

   ## User management scripts
   add user script = /usr/sbin/useradd -m %u
   delete user script = /usr/sbin/userdel -r %u
   add group script = /usr/sbin/groupadd %g
   delete group script = /usr/sbin/groupdel %g
   add user to group script = /usr/sbin/usermod -G %g %u
   add machine script = /usr/sbin/useradd -s /bin/false/ -d /var/lib/nobody %u
   idmap uid = 15000-20000
   idmap gid = 15000-20000

   ## Settings to sync Samba passwords with system passwords
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\\snew\\sUNIX\\spassword:* %n\\n *Retype\\snew\\s UNIX\\spassword:* %n\\n .
   passwd chat debug = yes
   unix password sync = yes

   ## Set the log verbosity level
   log level = 3

[homes]
   comment = Home
   valid users = %S
   read only = no
   browsable = no

[printers]
   comment = All Printers
   path = /var/spool/samba
   printable = yes
   guest ok = yes
   browsable = no

[netlogon]
   comment = Network Logon Service
   path = /home/samba/netlogon
   admin users = Administrator
  valid users = %U
   read only = no

[profile]
   comment = User profiles
   path = /home/samba/profiles
   valid users = %U
   create mode = 0600
   directory mode = 0700
   writable = yes
   browsable = no

В следующей закомментированной строке:

#logon script = scripts/logon.bat

определяется скрипт Windows, который будет выполняться на рабочей станции Windows всякий раз, когда пользователь будет входить в систему. Это, действительно, может быть весьма удобно, если вы хотите для всех компьютеров в сети применять стандартные настройки; вы можете задать, как будет отображаться диск сервера, настроить принтеры или сконфигурировать прокси-сервер. Если у вас есть скрипт logon.bat, то раскомментируйте эту строку.

Создайте директории для хранения профилей и информации о входе в домен:

$ sudo mkdir -p /home/samba/netlogon
$ sudo mkdir /home/samba/profiles
$ sudo mkdir /var/spool/samba
$ sudo chmod 777 /var/spool/samba/
$ sudo chown -R root:users /home/samba/
$ sudo chmod -R 771 /home/samba/

Сделайте так, чтобы Samba увидела вашу новую конфигурацию:

$ sudo /etc/init.d/samba restart

Чтобы включить сервис WINS (Windows Internet Name Service), откройте в редакторе файл /etc/nsswitch.conf и найдите следующую строку:

hosts: files dns mdns

Замените ее строкой:

hosts: files wins dns mdns

Поскольку ваш файл-сервер будет контроллером домена (DC) для вашего домена Windows, вы должны указать компьютеры, которые будут входить в домен. Откройте файл /etc/hosts и добавьте в него все сервера и рабочие станции:

192.168.0.10 server1
192.168.0.101 workstation1
192.168.0.102 workstation2
...
192.168.0.107 workstation7

В Windows как правило, есть специальный пользователь с именем Administrator, который аналогичен пользователю root в Linux, так что добавьте пользователя root в базу данных паролей Samba и создайте для него псевдоним. Это позволит вам использовать имя пользователя Administrator при добавлении новых компьютеров в домен Windows:

$ sudo smbpasswd -a root
$ sudo sh -c "echo 'root = Administrator' > /etc/samba/smbusers"

Чтобы убедиться, что к этому моменту все работает, используйте команду smbclient и сделайте запрос к Samba:

$ smbclient -L localhost -U%

В выданном результате будет указана подробная информация о нескольких стандартных сервисах, таких как netlogon и ADMIN, а также будут перечислены машины, зарегистрированные в домене:

Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.21b]

        Sharename       Type      Comment
        ---------   ----      -------
        netlogon        Disk      Network Logon Service
        IPC$            IPC       IPC Service (fileserver server (Samba, Ubuntu))
        ADMIN$          IPC       IPC Service (fileserver server (Samba, Ubuntu))
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.21b]

        Server               Comment
        ---------            -------
        FILESERVER           fileserver server (Samba, Ubuntu)

        Workgroup  Master
        ---------            -------
        WORKGROUP            FILESERVER

Отобразите несколько стандартных групп, используемых в доменах Windows, в эквивалентные группы в Linux:

$ sudo net groupmap modify ntgroup="Domain Admins" unixgroup=root
$ sudo net groupmap modify ntgroup="Domain Users" unixgroup=users
$ sudo net groupmap modify ntgroup="Domain Guests" unixgroup=nogroup

Чтобы предоставить пользователям возможность аутентификации в домене, их нужно прописать в контроллере домена. Этот процесс необходимо повторять для каждого пользователя, но сейчас просто создайте одного пользователя, сначала добавив пользователя в Linux и затем установив пароль для этого пользователя в Samba. Этого пользователя также потребуется поместить в группу users, которая только что была сделана псевдонимом группы Windows Domain Users:

$ sudo useradd jon -m -G users
$ sudo smbpasswd -a jon

Теперь пользователю предоставлена возможность аутентификации на рабочих станциях в вашем домене, но в нем еще ничего не открыто для совместного доступа.

Открываем общий доступ

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

$ sudo mkdir -p /home/shares/public
$ sudo chown -R root:users /home/shares/public
$ sudo chmod -R ug+rwx,o+rx-w /home/shares/public

Каждый ресурс, для которого открыт общий доступ, должен быть сконфигурирован в Samba. Откройте файл /etc/samba/smb.conf и добавьте к концу файла следующие записи:

[public]
  comment = Public Share
  path = /home/shares/public
  valid users = @users
  force group = users 
  create mask = 0660
  directory mask = 0771
  writable = yes

Каждый раз, когда вы меняете конфигурацию, вам нужно перезапускать Samba:

$ sudo /etc/init.d/samba restart

Добавленный фрагмент позволяет всем пользователям группы @users получать доступ к ресурсу с полными привилегиями на запись. Во многих случаях это, вероятно, не то, что вам нужно. Если совместный доступ разрешено получать только определенным пользователям, то используйте, например, следующую строку:

valid users = jon,kyle,bill

Чтобы управлять большим количеством пользователей, вы можете создать новую отдельную группу, установить для нее соответствующие права для общего доступа и указать эту группу в конфигурации Samba. Тогда у вас появится возможность добавлять пользователей в эту группу и удалять их из нее без перенастройки или перезагрузки Samba:

valid users = @authors

Вы также можете создать совместный доступ только для чтения, задав для параметра writable значение no:

writable = no

Другим типичным сценарием является предоставление общего доступа на чтение/запись для некоторых пользователей, а для всех других - только для чтения:

  valid users = @authors,@editors
  read list = @authors
  write list = @editors

В Samba есть огромный спектр возможностей для задания различных вариантов доступа, так что для получения более подробной информации смотрите http://samba.org/samba/docs/.

Общий доступ к принтерам

Если у вас есть принтеры, которые вы хотите сделать доступными для ваших рабочих станций Windows через Samba, то сначала выполните настройки, описанные в разделе "Настройка принтера" [Совет # 9] для того, чтобы принтеры работали локально, а затем используйте команду cupsaddsmb чтобы сообщить Samba, что надо открыть к ним доступ. Чтобы открыть общий доступ ко всем принтерам, наберите:

$ sudo cupsaddsmb -a

Если вы хотите открыть общий доступ к конкретному принтеру, вы можете сослаться на конкретное название принтера в CUPS:

$ sudo cupsaddsmb laserjet

Назад Оглавление Вперед