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

Samba 4.1 process_usershare_file: не удалось выполнить стат / var / lib / samba / usershares / share. даже если пользователь может указать эту папку и файл статистики

У меня два одинаковых пользователя, один может получить доступ к общему ресурсу, а другие нет. Название акции storage_photos, он находится в папке /storage/photos/.

$ getfacl /storage/photos
getfacl: Removing leading '/' from absolute path names
# file: storage/photos
# owner: root
# group: photos
user::rwx
group::rwx
group:photos:rwx
mask::rwx
other::r--
default:user::rwx
default:group::rwx
default:group:photos:rwx
default:mask::rwx
default:other::r--

Оба рассматриваемых пользователя являются членами photos группа:

$ groups john
john : john sambashare photos

$ groups lisa
lisa : lisa sambashare photos

И поскольку они входят в папку sambashare, они могут перечислить /var/lib/samba/usershares/:

sudo -u lisa ls -ltha /var/lib/samba/usershares/
total 24K
drwxrwx--T 2 root sambashare 4.0K Oct 25 17:06 .
-rw-r--r-- 1 root root        125 Oct 25 17:06 storage_photos

Учитывая это, странно обнаруживать, что одному пользователю не удается получить доступ к общему ресурсу, а другому - удается:

smbclient //Server/storage_photos -U lisa%pass
Domain=[ONE] OS=[Unix] Server=[Samba 4.1.6-Ubuntu]
tree connect failed: NT_STATUS_ACCESS_DENIED

smbclient //Server/storage_photos -U john%pass
Domain=[ONE] OS=[Unix] Server=[Samba 4.1.6-Ubuntu]
smb: \>

На стороне сервера сбой с уровнем ведения журнала 2 выглядит так:

[2015/10/25 23:12:20.646681,  0] ../source3/param/loadparm.c:4365(process_usershare_file)
  process_usershare_file: stat of /var/lib/samba/usershares/storage_photos failed. Permission denied
[2015/10/25 23:12:20.649381,  2] ../source3/smbd/service.c:407(create_connection_session_info)
  guest user (from session setup) not permitted to access this share (storage_photos)
[2015/10/25 23:12:20.649437,  1] ../source3/smbd/service.c:550(make_connection_snum)
  create_connection_session_info failed: NT_STATUS_ACCESS_DENIED

Между тем успех скучен:

[2015/10/25 23:14:30.321507,  2] ../source3/smbd/service.c:856(make_connection_snum)
  device (ipv4:192.168.1.5:46134) connect to service storage_photos initially as user john (uid=1000, gid=1000) (pid 5297)
[2015/10/25 23:16:10.409218,  1] ../source3/smbd/service.c:1130(close_cnum)
  device (ipv4:192.168.1.5:46134) closed connection to service storage_photos

Теперь самое интересное из сбоя в следующем: process_usershare_file: stat of /var/lib/samba/usershares/storage_photos failed. Permission denied. Почему произойдет сбой доступа, даже если пользователь может просмотреть файл:

sudo -u lisa stat /var/lib/samba/usershares/storage_photos
  File: ‘/var/lib/samba/usershares/storage_photos’
  Size: 125             Blocks: 8          IO Block: 4096   regular file
Device: 900h/2304d      Inode: 137795      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-10-25 17:06:46.704318935 +0100
Modify: 2015-10-25 17:06:46.700318935 +0100
Change: 2015-10-25 17:06:46.700318935 +0100
 Birth: -

Из этого можно сделать вывод, что по какой-то причине samba не использует правильного пользователя unix для статистики файла, когда Лиза пытается войти в систему, но когда это делает Джон.

И Джон, и Лиза могут подключаться к машине по ssh. В машине есть libpam-smbpass установлен в соответствии с предписаниями этот вопрос о переполнении стека. Но после перезапуска сервера проблема не исчезла.

Все это использует следующий стандартный файл Ubuntu 14.04 smb.conf. Общие ресурсы определяются файловыми системами ZFS, в которых включен параметр sharemb.

[global]  
        workgroup = ONE  
        server string = %h server (Samba, Ubuntu)  
        server role = standalone server  
        map to guest = Bad User  
        obey pam restrictions = Yes  
        pam password change = Yes  
        passwd program = /usr/bin/passwd %u  
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .  
        unix password sync = Yes  
        syslog = 0  
        log file = /var/log/samba/log.%m  
        max log size = 1000  
        dns proxy = No  
        usershare allow guests = Yes  
        panic action = /usr/share/samba/panic-action %d  
        idmap config * : backend = tdb

Почему-то переустановка winbind на сервере проблему решил, но не сразу. Как будто при аутентификации происходит какое-то кеширование. Итак, решение состоит в том, чтобы выполнить следующее, а затем немного расслабиться.

sudo apt-get remove winbind && sudo apt-get install winbind

Мне очень жаль, но я не могу придумать причину, по которой это решило бы проблему, когда перезапуск winbind этого не сделал, потому что apt должен сохранять файлы конфигурации, пока вы не очищаете пакет.

Сообщение об ошибке от "process_usershare_file" вводит в заблуждение и связано с user_shares, которые предназначены для того, чтобы локальный пользователь, вошедший в GUI, мог обмениваться папками с другими рабочими станциями в стиле Windows. Этот параметр совершенно не актуален для выделенных серверов Samba (где никто никогда не работает с локальной консолью), но, к сожалению, включен по умолчанию в большинстве дистрибутивов и часто вызывает подобные ложные ошибки. Хуже того, поток ошибок иногда даже замедляет работу сервера (это очень заметно на быстрых серверах, подключенных к 10GigE).

Чтобы избавиться от этого сообщения, добавьте его в [global] раздел smb.conf файл:

usershare max shares = 0

И перезапустите smbd, чтобы включить его. Это, по крайней мере, предотвратит попытки клиентов Samba получить доступ к несуществующим общим ресурсам пользователей и спамить ваши журналы.