Intereting Posts

Почему файлы, созданные через Samba, получают разные разрешения ACL (маска) в зависимости от клиентской ОС?

Я тестировал это на чистой установке Debian Jessie, но у меня также есть эта проблема на других машинах (например, Ubuntu 12.04). В дополнение к базовой установке я установил sudo , samba и cifs-utils .

Общий каталог с ACL по умолчанию

Я включил ACL в корневую файловую систему и создал общий каталог:

 sudo mount -o remount,acl / mkdir -p /home/ryan/shared setfacl -d -mu:ryan:rwx /home/ryan/shared 

Samba Config

Я оставил все значения по умолчанию в /etc/samba/smb.conf и добавил один общий ресурс:

 [shared] comment = path = /home/ryan/shared writable = yes valid users = ryan 

Добавить пользователя Samba

Затем я добавил себя как пользователь Samba и перезапустил службу:

 sudo smbpasswd -a ryan sudo systemctl restart smbd 

Linux-клиент

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

 mkdir -p /home/ryan/mnt/shared sudo mount -t cifs -o user=ryan //127.0.0.1/shared /home/ryan/mnt/shared touch /home/ryan/mnt/shared/linux.txt 

Клиент Windows

Я также подключился к машине с Windows 8 и создал пустой текстовый файл с именем windows.txt .

Общий список каталогов

После этого список каталогов /home/ryan/shared выглядит следующим образом:

 -rw-r--r--+ 1 ryan ryan 0 Jun 20 23:45 linux.txt -rwxrwxr--+ 1 ryan ryan 0 Jun 20 23:46 windows.txt 

Файл ACL

ACL для linux.txt выглядит так:

 # file: linux.txt # owner: ryan # group: ryan user::rw- user:ryan:rwx #effective:r-- group::rx #effective:r-- mask::r-- other::r-- 

ACL для windows.txt выглядит так:

 # file: windows.txt # owner: ryan # group: ryan user::rwx user:ryan:rwx group::rx mask::rwx other::r-- 

Вопросов

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

Вы можете заставить Samba нормализовать все, что посылают клиенты, см. man smb.conf для таких вещей, как:

 create mask = 0775 force create mode = 0660 directory mask = 2775 force directory mode = 2771 

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

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

В среде Windows нет такой вещи, как umask, она ничего не знает о концепции группы unix. Файлы, созданные в Windows, получают разрешение от настроек в smb.conf. Даже если вы не вводили такие настройки самостоятельно, они имеют значения по умолчанию. Вы можете посмотреть эти значения с помощью команды testparm -s -v smb.conf | grep mask testparm -s -v smb.conf | grep mask . Маска в smb.conf имеет обратное значение по сравнению с той же umask. То есть, чтобы получить файл с premission -rw-r-r– вам нужен umask 022, но samba создаст маску 644.