Одна общая папка Samba, части пользователей запись, остальным чтение: valid users, write list и согласование с правами файловой системы

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

Решение (подтверждено). Одна секция в smb.conf с разграничением по спискам:

[projects]
   path = /srv/samba/projects
   valid users = admin, user1, @readers
   write list = admin, user1
   read only = yes
   create mask = 0664
   directory mask = 2775
   force group = projects

read only = yes делает шару по умолчанию только для чтения, write list перечисляет исключения; @readers подключает группу. force group и setgid в directory mask гарантируют, что созданные файлы принадлежат общей группе и читаемы всем. testparm проверяет синтаксис, smbcontrol all reload-config применяет без перезапуска.

Права файловой системы обязательны. Samba не может дать больше, чем позволяет ФС: каталог /srv/samba/projects должен принадлежать группе projects с правами 2775, а пользователи из write list быть в этой группе (usermod -aG projects user1). Для читателей достаточно r-x для «остальных» или членства в группе с read list. Проверка от имени пользователя: sudo -u user1 touch /srv/samba/projects/t && rm ….

Учётные записи Samba отдельны от системных: smbpasswd -a user1 после создания системного пользователя; отключённые системные пользователи всё равно должны существовать для сопоставления uid. Для ролей «только чтение» удобна отдельная группа; для гостевого чтения guest ok = yes с map to guest = Bad User в [global] (осторожно с сетями, где это недопустимо).

Диагностика «пишет / не пишет».

  • smbstatus показывает, кто подключён и под каким пользователем (Windows иногда подставляет кэшированные учётные данные другого пользователя: net use * /delete на клиенте).
  • Журнал /var/log/samba/log.<клиент> с log level = 2: отказы NT_STATUS_ACCESS_DENIED с указанием, ФС или списки.
  • Клиенты Windows кэшируют права на сессию: после изменения smb.conf переподключить диск.

Про две шары на один путь. Работает, но ломает ссылки между файлами у пользователей, удваивает записи в проводнике и усложняет аудит. Один путь, одна шара, списки.

Параметры описаны в документации Samba.