У меня два одинаковых пользователя, один может получить доступ к общему ресурсу, а другие нет. Название акции 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 получить доступ к несуществующим общим ресурсам пользователей и спамить ваши журналы.