Расчет маски создания файла по умолчанию Samba

Расчет маски создания файла по умолчанию Samba

Привет, у меня есть вопрос, на который я не могу найти подходящий ответ. Ситуация такова, что я установил сервер 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


И так далее...

Надеюсь, это поможет вам немного понять поведение самбы.

Связанный контент