Привет, у меня есть вопрос, на который я не нашел подходящего ответа. Ситуация такова, что я устанавливаю сервер Samba и пытаюсь создать файл и папку на машине Windows. Все работает, как ожидалось, но есть небольшая проблема в том, что samba удаляет x бит из группы и другие в файле. Простой пример кода:
drwx--x--x. 4 root root 4096 Dec 13 20:01 smb
drwxrwx--x. 2 root amikon 4096 Dec 15 22:17 pokus
[pokus]
path = /smb/pokus
public = no
writable = yes
valid users = @amikon
[root@wserver pokus]# ls -l
drwxr-xr-x. 2 vanek amikon 4096 Dec 21 10:14 dir
-rwxr--r--. 1 vanek amikon 0 Dec 21 10:14 file.txt
Из многих экспериментов, которые я проводил, я понял, что при создании записи (файла или каталога) из Windows samba выполняет логическое И из маски по умолчанию и прав, поступающих с машины Windows. Это поведение может быть более или менее влиятельным при использовании режима создания маски и принудительного создания (и другого набора для dirs) - работает, как ожидалось, без каких-либо проблем.
Я обнаружил, что проблема отсутствия 0011 сохраняется с использованием маски создания 755 - биты x по-прежнему удаляются из файла. Единственный вариант - использовать режим принудительного создания 755. После этого биты остаются, потому что ИЛИ рекламируют их.
Я протестировал другие параметры создания маски и, похоже, каждый раз удаляется 0011 из файла. 755, 777, 333 ... так что похоже, что это может быть какой-то механизм защиты, удаляющий x из группы, а другие предотвращающие выполнение скриптов никому, кроме владельца ????
Но мой вопрос касается точного примера выше. Почему стоит d755 а в итоге -744. Где именно произошло волшебство проигрыша 0011?
Большое спасибо за любые подсказки.
Волшебство потери 0011 происходит потому, что это поведение Samba по умолчанию.
Выписка из документа:
Создать маску: значение этого параметра по умолчанию удаляет группу и другие биты записи и выполнения из режимов UNIX.
По умолчанию: создать маску = 0744
Вот ссылка : http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html
Ищи create mask (S)
В этом документе команда Samba не объясняет, почему они решили реализовать это поведение по умолчанию, но мне легко подумать о механизме безопасности (как вы упомянули).
Вы можете использовать inherit permissions = yes
директива, чтобы новый файл наследовал права своей родительской папки, но это не повлияет на бит x. Итак, в вашем случае это отобразит:
-rwxrw-r--. 1 vanek amikon 0 Dec 21 10:14 file.txt
Кроме того, как вы сказали, чтобы изменить это поведение, вам нужно будет явно определить свою собственную маску. Основное различие между командами create и force create заключается в следующем:
create mask
отнимает разрешения (маска И)force create mode
добавляет их после этого (маска ИЛИ)Также create mask
не может иметь дело с битом x для группы и других.
Итак, вам может потребоваться разобраться с обеими директивами для достижения некоторых целей.
Попробуем несколько образцов:
1) Если вам нужен только бит x для группы и других, вам придется объединить:
create mask = 0700 #Remove r bit from group and others
force create mode = 0711 #Add x bit only to group and others
Результат: -rwx--x--x 1 kris kris 0 Dec 21 14:20 file.txt
2) Если вам нужны биты r и x для группы и других, удалите create mask
директиву (потому что по умолчанию уже 0744) и просто добавьте:
;create mask = 0700 #remove r bit from group and others (commented)
force create mode = 0711 #Add x bit only to group and others
Результат: -rwxr-xr-x 1 kris kris 0 Dec 21 14:17 file.txt
И так далее...
Надеюсь, это поможет вам немного понять поведение Samba.