Я настраиваю Samba с поддержкой ACL на сервере Ubuntu 18.04 LTS, и я столкнулся со следующей ситуацией.
Вот smb.conf
содержание:
[global]
# naming
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
# networking
disable netbios = yes
local master = no
domain master = no
preferred master = no
# domain accounts
security = ADS
realm = EXAMPLE.COM
encrypt passwords = yes
invalid users = root
idmap config *:backend = tdb
idmap config *:range = 70001-80000
template shell = /bin/bash
winbind nss info = rfc2307
winbind use default domain = yes
winbind rpc only = yes
winbind cache time = 10
vfs objects = acl_xattr
map acl inherit = yes
acl group control = yes
store dos attributes = no
# logging
log file = /var/log/samba/log.%m
max log size = 1000
# permissions
create mode = 0644
directory mode = 0755
inherit acls = yes
map archive = no
# printers
load printers = no
# veto files
veto files = /._*/.DS_Store/
[All Users]
comment = All Home Directories
path = /home/EXAMPLE
browseable = yes
read only = no
valid users = @dl_acc_ro @dl_acc_rw
Из macOS Sierra я подключаюсь к общему ресурсу samba с помощью smb://myserver.com/test
. Затем я открываю терминал и $ cd /Volumes/test
и я наконец создаю файл с $ touch xxx
.
Вот результат $ ls -l
на моем Mac:
$ ls -l
-rwx------ 1 gregory staff 0 Sep 26 20:00 xxx
А теперь на самом сервере:
$ ls -l
-rwxrwxr-x+ 1 gregory utilisa. du domaine 0 Sep 26 18:00 xxx
И ACL:
$ getfacl /home/EXAMPLE/gregory
getfacl: Removing leading '/' from absolute path names
# file: home/EXAMPLE/gregory
# owner: gregory
# group: utilisa.\040du\040domaine
user::rwx
group::r-x
other::r-x
$ getfacl /home/EXAMPLE/gregory/xxx
getfacl: Removing leading '/' from absolute path names
# file: home/EXAMPLE/gregory/xxx
# owner: gregory
# group: utilisa.\040du\040domaine
user::rwx
user:gregory:rwx
group::r-x
group:utilisa.\040du\040domaine:r-x
mask::rwx
other::r-x
Как видите, обычный файл, созданный touch
установлен исполняемый бит. Есть ли способ избежать такого поведения? Я бы хотел, чтобы обычные файлы, созданные с помощью Samba, имели 0644
разрешения.
Для справки, я тестировал на рабочей станции Linux, и она демонстрирует такое же поведение, что заставляет меня поверить, что все это происходит на стороне сервера Samba.
Следовательно, ни один из трех исполняемых битов Unix, присутствующих в файле на общем диске Samba, бесполезен. Однако файлы DOS имеют свои собственные атрибуты, которые необходимо сохранять, когда они хранятся в среде Unix: архив, система и скрытые биты. Samba может сохранить эти биты, повторно используя биты прав доступа к исполняемым файлам на стороне Unix, если это будет предписано. Однако сопоставление этих битов имеет неприятный побочный эффект: если пользователь Windows хранит файл в общей папке Samba, а вы просматриваете его в Unix с помощью команды ls -al, некоторые из исполняемых битов не будут означать то, что вы хотели бы ожидайте от них.
Как это отключить? Следуя инструкции:
Три варианта Samba решают, отображаются ли биты: архив карты, система отображения и скрытая карта. Эти параметры сопоставляют атрибуты архива, системы и скрытия с битами владельца, группы и общего выполнения файла соответственно. Вы можете добавить эти параметры в общий ресурс [data], задав для каждого из них следующие значения:
[data]
map archive = no
map system = no
map hidden = no
Вы также вызываете отключить исполняемый бит, используя store dos attributes
флаг.
Взгляните на различные mask
настройки в smb.conf
. Например. create mask
, directory mask
, ...
Далее эти masks
могут зависеть от параметров монтирования на клиенте, что также может быть полезно при рассмотрении деталей.