LINUX.ORG.RU
решено ФорумAdmin

Как Samba формирует права на создаваемые в шаре файлы/каталоги?

 , ,


1

1

Здравствуйте.

[ 1. ДАНО ]
Домашняя ЛВС.
Сервер - Ubuntu Server 16.04.1 и Samba 4.3.11.
Клиенты - Win7Pro (учётка amok — в Самбе/Убунте есть), WinXP (учётка XPMUser — в Самбе/Убунте отсутствует).

[ 2. ЗАДАЧА ]
Сделать общедоступную шару для win-клиентов с полным беспределом: все могут всё (создавать файлы и каталоги любого уровня вложенности, удалять всё, запускать *.exe).

[ 3. ЧТО СДЕЛАНО ]
Создал каталог /usr/local/samba_shara, сменил пользователя/группу на nobody/nogroup и выставил ему права 0777.

Частично smb.conf

[global]
server role = standalone server
security = user
workgroup = WORKGROUP
guest account = nobody
map to guest = bad user

[shara]
path = /usr/local/samba_shara
browseable = yes
writable = yes
guest ok = yes
force user = nobody
force group = nogroup
force create mode = 0777
force directory mode = 0777

Провожу эксперимент:

  1. Создаю с win-клиента известной Самбе учёткой amok в шаре новый файл и каталог
  2. Копирую с win-клиента известной Самбе учёткой amok в шару существующий файл и каталог
  3. Создаю с другого win-клиента не известной Самбе учёткой XPMUser в шаре новый файл и каталог
  4. Копирую с другого win-клиента не известной Самбе учёткой XPMUser в шару существующий файл и каталог

Результат ниже:

$ ls -l --group-directories-first /usr/local/samba_shara/

drwxrwxr-x 2 nobody nogroup 4096 Feb  8 00:40 copied by amok
drwxrwxrwx 2 nobody nogroup 4096 Feb  9 00:17 copied by XPMUser
drwxrwxr-x 2 nobody nogroup 4096 Feb  9 00:15 created by amok
drwxrwxrwx 2 nobody nogroup 4096 Feb  9 00:17 created by XPMUser
-rwxrwxr-x 1 nobody nogroup    0 Feb  8 00:39 copied by amok.txt
-rwxrwxrwx 1 nobody nogroup    0 Feb  8 00:53 copied by XPMUser.txt
-rwxrwxrwx 1 nobody nogroup    0 Feb  9 00:05 created by amok.txt
-rwxrwxrwx 1 nobody nogroup    0 Feb  9 00:17 created by XPMUser.txt

Как видно, в требуемые 0777 попадают не все файлы/каталоги! Более того, для каталогов с точки зрения итоговых прав доступа есть разница кто их создаёт/копирует — amok или XPMUser! Но и это не всё — Самба ещё умудряется различать скопированный и созданный именно amok'ом файлы.

При создании amok'ом нового файла в шаре из лога /var/log/samba/log.MACHINE удалось выудить это:

$ tail -f /var/log/samba/log.fat | grep "Новый"

...
unix_mode(Новый текстовый документ.txt) returning 0777
nobody opened file Новый текстовый документ.txt read=Yes write=Yes (numopen=2)
set_file_oplock: granted oplock on file Новый текстовый документ.txt, 802:6600f6:0/2176840990, tv_sec = 589b87fe, tv_usec = 41953
...

При создании amok'ом нового каталога в шаре из лога /var/log/samba/log.MACHINE удалось выудить это:

$ tail -f /var/log/samba/log.fat | grep "Новая папка"

...
unix_mode(Новая папка) returning 0777
open_file_ntcreate: FILE_OPEN requested for file Новая папка and file doesn't exist.
unix_convert called on file "Новая папка"
unix_convert begin: name = Новая папка, dirpath = , start = Новая папка
New file Новая папка
Новая папка reduced to /usr/local/samba_shara/Новая папка
open_directory: opening directory Новая папка, access_mask = 0x17019b, share_access = 0x0 create_options = 0x1, create_disposition = 0x2, file_attributes = 0x10
unix_mode(Новая папка) returning 0777
...

[ 4. ПРОБЛЕМА/ВОПРОСЫ ]

  1. Почему несмотря на заданную опцию force user права доступа вновь создаваемых файлов/каталогов зависят от того, из-под какой именно win-учётки их создают?
  2. Каков алгоритм формирования итоговых прав вновь создаваемых в шаре Самбы файлов/каталогов (где задаются и от чего зависят изначальные права; количество и порядок наложения масок самой Самбы на эти права; участвует ли тут файловая система Убунты со своим umask, если да, то на каком этапе; участвует ли клиентская Windows)? Почему при заданных опциях «force create mode = 0777» и «force directory mode = 0777» итоговые права отличны от 0777?
  3. Где найти свежий/нормальный/с_примерами список-описание опций smb.conf (ru/eng)? Этот видел.

Помогите, пожалуйста, решить данную, как мне сначала казалось — простейшую, задачу. Без нормальной теоретической подготовки я могу ещё долго безрезультатно проводить натурные эксперименты и заниматься хернёй высчитывая от балды побитово права и umask'и :(

Спасибо!

P. S. Был удивлён, что log level = 10 Самбы стабильно «вешает» tail -f :)

Ответ на: комментарий от conalex

Не шмогла...

inherit permissions = yes

Почистил содержимое папки и снова провёл эксперимент по наполнению:

$ ls -l --group-directories-first /usr/local/samba_shara/

drwxrwxrwx 2 amok   amok    4096 Feb  8 00:40 copied by amok
drwxrwxrwx 2 nobody nogroup 4096 Feb  9 09:44 copied by XPMUser
drwxrwxrwx 2 amok   amok    4096 Feb  9 09:43 created by amok
drwxrwxrwx 2 nobody nogroup 4096 Feb  9 09:44 created by XPMUser
-rwxrw-r-- 1 amok   amok       0 Feb  8 00:39 copied by amok.txt
-rwxrw-rw- 1 nobody nogroup    0 Feb  8 00:53 copied by XPMUser.txt
-rwxrw-r-- 1 amok   amok       0 Feb  9 09:43 created by amok.txt
-rwxrw-rw- 1 nobody nogroup    0 Feb  9 09:44 created by XPMUser.txt

amokmen ()
Ответ на: Не шмогла... от amokmen

smb.conf:

[global]                                                                                                  
        workgroup = MY-HOME                                                                               
        server string = %h server (Samba, Ubuntu)                                                         
        dns proxy = no                                                                                    
        log file = /var/log/samba/log.%m                                                                  
        max log size = 1000                                                                               
        panic action = /usr/share/samba/panic-action %d                                                   
        # server role = standalone server                                                                 
        passdb backend = tdbsam                                                                           
        obey pam restrictions = yes                                                                       
        unix password sync = yes                                                                          
        passwd program = /usr/bin/passwd %u                                                               
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\
ssuccessfully* .                                                                                          
        pam password change = yes                                                                         
        map to guest = bad user                                                                           
        usershare allow guests = yes  
[home]
        path = /home/conformist
        comment = hopeless
        writeable = yes
        browseable = yes
        public = Yes
        create mask = 0644
        directory mask = 0755
        force user = conformist
Так же есть ещё один раздел, где владелец мой пользователь, описание точно такое же, как у [home], всё работает, кто угодно может писать/читать из шары.

conformist ★★★ ()
Ответ на: комментарий от conformist

Не понял, к чему был ваш комментарий. На всякий случай напомню часть своей задачи: «хочу чтобы всё в шаре было 0777». У вас так?

amokmen ()
Ответ на: комментарий от amokmen

У меня так, как приведено выше. Со всех машин (win) всё доступно и всё работает (что соответствует требованиям), можно исправить create mask, directory mask на желаемые.

conformist ★★★ ()
Ответ на: Не шмогла... от amokmen

попробуй прямо на сервере из-под юзеров amok и nobody файлы и каталоги посоздавать в твоей шаре. посмотри что без самбы будет.

можно попробовать разрулить на уровне фс при помощи acl.

conalex ★★★ ()
Последнее исправление: conalex (всего исправлений: 1)
Ответ на: комментарий от conformist

всё доступно и всё работает

Что вы вкладываете в эти понятия? Ещё раз повторюсь, хочу получить 0777 для всего в шаре, и не получаю.

И помимо просто «работает» мне бы ещё хотелось разобраться «как и почему». Вам удалось?

Вот, например, почему советуете заменить/добавить? опции create mask, directory mask. У меня же есть force create mode, force directory mode — их недостаточно или я их неверно использую под свою задачу?

amokmen ()
Ответ на: комментарий от conalex

Из-под amok на Убунте:

$ touch /usr/local/samba_shara/"created by amok on Ubuntu.txt"
$ mkdir /usr/local/samba_shara/"created by amok on Ubuntu"
$ ls -l /usr/local/samba_shara/

drwxrwxr-x 2 amok amok 4096 Feb  9 11:21 created by amok on Ubuntu
-rw-rw-r-- 1 amok amok    0 Feb  9 11:21 created by amok on Ubuntu.txt

Т. е. то, как и должно быть — 0775 для каталога и 0664 для файла — учитывая umask 0002 для amok.

Как из-под nobody что-то создать — не знаю (пробовал "su - nobody" — пароль какой-то требует). Также как и узнать какая у него umask.

Я пока не хочу применять другие методы. Хотелось бы разобраться с этим.

amokmen ()
Ответ на: комментарий от amokmen

Что вы вкладываете в эти понятия?

Самба шара раздаётся от пользователя, который был определён в конфиге. Владелец шары этот же пользователь. Все создаваемые файлы/каталоги принадлежат этому пользователю и он имеет право делать что хочет:

[ 2. ЗАДАЧА ] Сделать общедоступную шару для win-клиентов с полным беспределом: все могут всё (создавать файлы и каталоги любого уровня вложенности, удалять всё, запускать *.exe).

conformist ★★★ ()
Ответ на: комментарий от conformist

Хорошо, я понял: у вас всё работает так, как вам нужно. Только вот вы цитируете п. 2 из стартового сообщения и почему-то на нём останавливаетесь. А ведь главный там — п. 4 :)

amokmen ()
Ответ на: комментарий от conformist

Спасибо за информацию.

Теперь буду ждать тех, кто сконцентрируется на ВОПРОСАХ :)

amokmen ()
Ответ на: комментарий от conalex

Да, было прописано по умолчанию:

[global]
obey pam restrictions = yes

Заменил на no и, вроде, заработало.

Можешь кратко объяснить взаимосвязь?

amokmen ()
Ответ на: комментарий от amokmen

так вроде или заработало?

Можешь кратко объяснить взаимосвязь?

самба пускает на каждого юзера по процессу, который, который, внезапно, работает в _системе_ с _правами_ этого юзера. наложи на эту мысль то, что ты знаешь о pam, ну и учти, что obey pam restrictions - это «придерживаться ограничений pam».

conalex ★★★ ()
Ответ на: комментарий от conalex

А, я с мобильника просмотрел, что ты про сам параметр писал, а не про случай, когда он «no»

dhameoelin ★★★★★ ()
Ответ на: комментарий от conalex

Я уже пытался мучить эту официальную доку. Там везде при описании опций конфига стоят ссылки на несуществующий HTML-файл smb.conf.5.html

Придётся юзать man smb.conf.

amokmen ()
Ответ на: комментарий от conalex

О PAM я не знаю ничего. Однако вон Wiki подсказывает, что это придумка для авторизации. Поэтому я и не понимаю, как что-то связанное с авторизацией, влияет на права создаваемых файлов?! Раз файл нам уже позволяют создать, значит авторизацию мы так или иначе прошли? Причём в моём случае как таковой авторизации-то и не нужно, ибо разрешён безавторизационный доступ guest (предположу, что авторизация есть всегда, даже когда её формально быть не должно, но это сути дела не меняет).

amokmen ()
Ответ на: комментарий от conalex

Погонял ещё тесты, в т. ч. с вложениями: всё пляшет, так что большое спасибо!

amokmen ()
Ответ на: комментарий от amokmen

Косяк с результирующими правами, отличными от требуемых 0777, возникает из-за того, что из-за этого PAM на права создаваемого файла накладывается какая-то маска?

amokmen ()
Ответ на: комментарий от conalex

Начал гуглить, но что-то объём информации огромен и неясно с какой стороны подступиться.

Пока пытаюсь осмыслить логически, по-простому.

Очевидно, что включённая опция конфига obey pam restrictions = yes для знакомого Самбе (и Убунте) пользователя amok добавляет ещё одну итерацию где-то, в результате получается, что при неких операциях с файлом/каталогом на заданные в Самбе принудительные права 0777, накладывается маска umask 0002 (которая действительно равна 0002 для пользователя amok в Убунте).

Вопрос в том, почему при создании файла в шаре маска не срабатывает, а при копировании — срабатывает. И то и другое действие осуществляет amok. Получается, что PAM не участвует при создании файла в шаре, но активируется при копировании?

C каталогами ещё непонятнее: тут PAM работает всегда, и при создании в шаре каталога, и при копировании в неё существующего...

amokmen ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.