Мой блог - Простейший файловый сервер в Ubuntu/Debian Linux на базе Samba с базовым разделением прав доступа

Простейший файловый сервер в Ubuntu/Debian Linux на базе Samba с базовым разделением прав доступа

Для небольшого офиса с гетерогенной средой на 15 пользователей (рабочих станций) понадобилось настроить несколько общих сетевых ресурсов с набором прав доступа по группам. О поддержке контроллера домена речи не идет и требуется настроить на простейшей железяке выделенный файловый сервер с доступом с рабочих станций MAC/Linux/Windows. Проще всего реализовать эту схему на базе Samba, она получается несложная в администрировании и можно даже дополнительно реализовать графический интерфейс пользователя.

Фотография автора

Автор: Антон Черноусов
Опубликовано: 2 месяца, 1 неделя (последние правки: 0 минут назад) - 0 комментариев
Категории записи: Linux, Samba, Ubuntu, Рабочие станции, Системное администрирование


Фактически задача поставлена максимально простая. В результате должно быть два каталога на файловом сервере в один могут читать-писать менеджеры, а во второй могут писать-читать руководители и соответственно руководители имеют доступ к каталогу менеджеров, а менеджеры ограничены своим каталогом отдела без персональных каталогов (хотя можно и персональные каталоги сделать). Домена нет, но в идеале у нас будут на файловом заведены пользователи с такими же паролями как на их локальных станциях (MAC/Linux/Windows), а пользователи соответственно свои пароли не меняют на рабочих станциях.

Простая самба-шара

Начнем мы как обычно с установки необходимых для работы пакетов (фактически нам понадобится только один пакет Samba):

# aptitude install samba

После того как мы установили пакет SAMBA наш хост становится доступен по протоколу SMB, правда без открытых ресурсов, авторизации и т.п. И мы начинаем с создания локальных пользователей и пользователей samba для реализации связки самба-пользователь -> внутренний пользователь сервера.

# useradd izmylov
# passwd izmylov
# smbpasswd -a izmylov

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

Следующим этапом, создаем каталог для нашего файлового хранилища с двумя каталогами "Отдел продаж" и "АУП":

# mkdir /opt/share/
# mkdir /opt/share/"Отдел продаж"
# mkdir /opt/share/"АУП"

Создаем минимальную конфигурацию в файле /etc/samba/smb.conf и немного поэкспериментируем, наша минимальная рабочая конфигурация:

[global]
   workgroup = TECHTRADE
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   server role = standalone server
   passdb backend = tdbsam
   obey pam restrictions = no
   encrypt passwords = yes
   map to guest = bad user
   usershare allow guests = 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

Это практически штатный конфигурационный файл я только поменял параметры obey pam restrictions = no и encrypt passwords = yes, так как современные версии Windows использует шифрование паролей и аутентификацию challenge/response, что делаем невозможным использование PAM-авторизации. 

Как я и говорил, сейчас мы немного поэкспериментируем и создадим каталог /opt/tmp/, с правами доступа 777:

# mkdir /opt/tmp/
# chmod 777 /opt/tmp/

И создаем раздел конфигурации для доступа к этому каталогу:

[tmp]
   comment = Temp Directory
   browseable = yes
   path = /opt/tmp/
   guest ok = no

Используя параметр guest ok мы запретили гостевой доступ к каталогу, что нам требуется согласно технического задания, в этом режиме при попытке доступа к каталогу у вас будет запрошен пароль.

Гостевой доступ запрещен

Первым делом, мы разрешаем гостевой доступ (обязательно укажите параметр read only = No, так как поведение в гостевом режиме по умолчанию предполагает именно Read Only режим), переходим в этот каталог и создаем текстовый файл и каталог.

Тестовый файл и папка

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

# ls -lua /opt/tmp/
total 16
drwsrwsrwt 3 root   root 4096 дек 13 03:12 .
drwsrwsrwt 4 root   root 4096 дек 13 03:13 ..
-rwxr--r-- 1 nobody root    2 дек 13 03:12 Guest-File-New.txt
drwxr-sr-x 2 nobody root 4096 дек 13 03:12 Guest-Folder-New

Как вы видите, при гостевом доступе локальные файлы создаются от имени пользователя nobody, но фактически этот режим нас не интересует, и мы отключаем гостевой режим и создаем файлы авторизовавшись как пользователь izmylov (с паролем который мы создали в начале статьи).

Права доступа к samba файлам и каталогам

Аналогично проверяем права в консоли сервера:

# ls -lua /opt/tmp/        
total 24 drwsrwsrwt 4 root    root 4096 дек 13 03:18 . drwsrwsrwt 4 root    root 4096 дек 13 03:13 .. -rwxr--r-- 1 nobody  root    2 дек 13 03:12 Guest-File-New.txt drwxr-sr-x 2 nobody  root 4096 дек 13 03:12 Guest-Folder-New drwxr-sr-x 2 izmylov root 4096 дек 13 03:17 Imylov-Folder-New -rwxr--r-- 1 izmylov root    2 дек 13 03:18 Izmylov-File-New.txt

Как вы видите, владельцем является одноименный локальный пользователь, группа назначена root, а режим по умолчанию соответственно 755 для каталога и 744 для файла. Если вы принудительно на этапе монтирования не передаете логин и пароль, то для авторизации штатными средствами операционной системы будут использоваться локальные учетные данные и именно ради этого мы и создаем локальных и samba-пользователей идентичных пользователям рабочих станций.

Систему прав доступа на уровне как файловой системы, так и групп я уже рассматривал в статье "Блеск и нищета системы разграничения прав доступа в Linux" и как я уже говорил мы можем использовать расширенный набор ACL файловой системы Ext, но это может запросто сломать мозг тем кому я потом передам сервер и документацию и поэтому мне не хотелось бы выходить за рамки штатного Linux-функционала.

Для реализации задачи описанной в т.з. я первым делом создаю всех пользователей (локальных и самба, это описано в начале статьи) и дополнительно создаю две группы, SALES и AUP:

# useradd popova
# passwd popova
# smbpasswd -a popova 
# useradd danchenko # passwd danchenko # smbpasswd -a danchenko ...
# groupadd sales # groupadd aup

Это конечно "Мартышкин труд", но для небольшой группы пользователей и простых ограничений можно использовать такой подход. Логично, что мы добавляем локальных пользователей в соответствующие группы, а членов группы AUP мы дополнительно включаем и в группу SALES.

# usermod -a -G sales ivanova 
...
# usermod -a -G aup yurganova # usermod -a -G aup chekashova

Ограничить доступ к общему сетевому ресурсу можно двумя способами. Во первых, ограничив доступ на уровне SMB-протокола (можно разрешать и запрещать на уровне файла конфигурации для пользователей и групп), а во вторых, мы можем управлять доступом на уровне файловой системы и я буду использовать оба метода. Дополнительно, обратите внимание, что для реализации общего доступа к файлам нам надо форсировать использование определенной группы и дополнительно сменить режим создания файлов и каталогов для того чтобы все пользователи могли редактировать файлы коллег (по умолчанию гости и группа может только читать файлы созданные другим пользователем).

В итоге, конфигурация описывающая требуемый функционал выглядит следующим образом:

[sales]
   comment = Отдел продаж
   browseable = yes
   read only = no
   path = /opt/share/SALES/
   valid users = @sales, @aup
   force group = sales
   force directory mode = 0770
   force create mode = 0660
   guest ok = no

[aup]   comment = АУП   browseable = yes   read only = no   path = /opt/share/AUP/   valid users = @aup   force group = sales   force directory mode = 0770   force create mode = 0660   guest ok = no

Фактически мы добавили только четыре новых параметра:

  • valid users = @sales, @aup - ограничиваем доступ для групп пользователей (с @группы, а без соответственно пользователи)
  • force directory mode = 0770 - изменили режим создания каталогов 
  • force create mode = 0660 - изменили режим создания файлов
  • force group = sales - принудительно устанавливает создаваемым файлам и каталогам группу sales

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

# chown -R root:sales /opt/share/
# chmod -R 770 /opt/share/

После этого мы ограничиваем доступ к каталогам для пользователя, root и группы sales, а для остальных пользователей доступ закрыт. Как вы видите простые файловые сервера для небольших групп можно строить и без доменов и при этом настраивать разграничения по доступу даже более гибко чем в рамках рабочей группы Windows.

Пожалуйста, оцените мою статью (всего оценок 6, средняя оценка 3.83):

Комментарии к статье:

Пока комментариев нет

Оставьте комментарий:

обязательно

обязательно (не публикуется)

необязательно

обязательно

обязательно