Назад | Перейти на главную страницу

Расчет маски создания файла по умолчанию в 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. Это поведение может быть более или менее влиятельным при использовании режима создания маски и принудительного создания (и другого набора для 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.