Привет, у меня есть вопрос, на который я не могу найти подходящий ответ. Ситуация такова, что я установил сервер 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. Это поведение может быть более или менее влиятельным, если использовать маску создания и режим принудительного создания (и другой набор для каталогов) - работает как и ожидалось, без каких-либо проблем.
Я обнаружил, что проблема отсутствия 0011 сохраняется независимо от использования маски создания 755 - биты x все равно удаляются из файла. Единственный вариант - использовать режим принудительного создания 755. После этого биты остаются, потому что OR добавляет их.
Я протестировал другие варианты создания маски, и, похоже, 0011 из файла удаляется каждый раз. 755, 777, 333 ... так что, похоже, это может быть какой-то защитный механизм, удаляющий x из группы и другие, предотвращающие выполнение скриптов никем, кроме владельца????
Но мой вопрос касается именно этого примера выше. Почему есть d755, но в результате -744. Где именно произошла магия потери 0011?
Большое спасибо за любые подсказки.
решение1
Волшебство потери 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
И так далее...
Надеюсь, это поможет вам немного понять поведение самбы.