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


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat)
aptitude cv debian linux password samba server ubuntu windows
 
 

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


(последние правки 1 месяц)

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

Фактически задача поставлена максимально простая. В результате должно быть два каталога на файловом сервере в один могут читать-писать менеджеры, а во второй могут писать-читать руководители и соответственно руководители имеют доступ к каталогу менеджеров, а менеджеры ограничены своим каталогом отдела без персональных каталогов (хотя можно и персональные каталоги сделать). Домена нет, но в идеале у нас будут на файловом заведены пользователи с такими же паролями как на их локальных станциях (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.

Моя официальная страница на FaceBook
Мой микроблог в твиттер

Сборка Samba для платформы ARM из исходных кодов

Сборка Samba для платформы ARM из исходных кодов

Сегодня я предлагаю вам ознакомиться не с готовым решением, а принять участие в обсуждении ряда проблем на которые я обратил внимание при работе с общими ресурсами линукс, при доступе из Windows 10. С этими ситуациями я столкнулся при настройке файлового хранилища на базе BananaPI с Samba 4-ой версии.


Простейший способ монтирования сетевых ресурсов Windows (Samba) в Linux

Простейший способ монтирования сетевых ресурсов Windows (Samba) в Linux

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


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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .