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

Centos7 Samba не может писать подкаталоги через GVFS

У меня действительно странная проблема с Samba, работающей на Centos 7. У меня есть несколько анонимных общих ресурсов, в которые может каждый писать. Обычно я получаю доступ к этим общим ресурсам с а) компьютеров с Windows, которые ремонтируются, и б) с компьютеров с Linux, которые монтируют их через GVFS.

Совсем недавно (я не уверен, когда это началось, возможно, после общесистемного обновления на сервере на прошлой неделе) я заметил, что не могу писать в подкаталоги общих ресурсов, когда они монтируются через GVFS. Я пробовал это и на Linux Mint Qiana, и на Sylvia. Я могу редактировать, создавать и удалять файлы в корне общего ресурса, но я не могу делать ничего из этого в любом подкаталоге любого общего ресурса на этом сервере. Я получаю сообщение об ошибке «В разрешении отказано».

Как ни странно, все эти операции работают должным образом на всех уровнях через: windows, smbclient или mount.cifs.

Кроме того, на том же компьютере с Linux, который не работает правильно на этом сервере, у меня есть полные разрешения на запись на аналогично настроенном сервере Debian с общими ресурсами, установленными через GVFS, поэтому это наводит меня на мысль, что это как-то связано с сервером Centos 7, а не реализация GVFS на ПК.

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

Вот моя конфигурация Samba:

[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = server1
security = user
map to guest = bad user
dns proxy = no
unix extensions = no
#============================ Share Definitions ============================== 
[shared]
path = /shares/shared
browsable =yes
writable = yes
guest ok = yes
read only = no
follow symlinks = yes

[installers]
path = /shares/installers
browsable =yes
writable = yes
guest ok = yes
read only = no
follow symlinks = yes

[tools]
path = /shares/tools
browsable =yes
writable = yes
guest ok = yes
read only = no
follow symlinks = yes
wide links = yes

[drivers]
path = /shares/drivers
browsable =yes
writable = yes
guest ok = yes
read only = no

[cdimages]
path = /shares/cdimages
browsable =yes
writable = yes
guest ok = yes
read only = no

[windows_sps_updates]
path = /shares/windows_sps_updates
browsable =yes
writable = yes
guest ok = yes
read only = no

Вот моя информация о владении, разрешениях и контексте selinux для этих каталогов на сервере:

drwxrwxrwx. nobody nobody unconfined_u:object_r:samba_share_t:s0 cdimages
drwxrwxrwx. nobody nobody unconfined_u:object_r:samba_share_t:s0 drivers
drwxrwxrwx. nobody nobody unconfined_u:object_r:samba_share_t:s0 installers
drwx--x--x. nobody nobody system_u:object_r:samba_share_t:s0 lost+found
drwxrwxrwx. nobody nobody unconfined_u:object_r:samba_share_t:s0 shared
drwxrwxrwx. nobody nobody unconfined_u:object_r:samba_share_t:s0 tools
drwxrwxrwx. nobody nobody unconfined_u:object_r:samba_share_t:s0 utilities
drwxrwxrwx. nobody nobody unconfined_u:object_r:samba_share_t:s0 windows_sps_updates

И для подкаталога:

-rwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 AfterTheRain.jpg
-rwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 analyze_minidump.bat
drwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 autoit scripts
-rwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 AutoItX3.dll
drwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 backup
-rwxr--r--. nobody nobody system_u:object_r:samba_share_t:s0 cant_hug_every_cat.mp3
-rwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 devcpp-4.9.9.2_setup.exe
-rwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 dilbert_kung_fu_coffee_cup.jpg
-rwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 dilbert_kung_fu_coffee_cup.png
-rwxr-xr-x. nobody nobody unconfined_u:object_r:samba_share_t:s0 dism.txt

И вот как разрешения отображаются в этом подкаталоге при монтировании через GVFS на компьютере с Linux:

-rwx------ 1 lytithwyn lytithwyn   363665 Aug 19  2011 AfterTheRain.jpg
-rwx------ 1 lytithwyn lytithwyn      129 Feb  4  2015 analyze_minidump.bat
drwx------ 1 lytithwyn lytithwyn        0 Mar  8  2018 autoit scripts
-rwx------ 1 lytithwyn lytithwyn   460104 Jun  1  2014 AutoItX3.dll
drwx------ 1 lytithwyn lytithwyn        0 May 28  2014 backup
-rwx------ 1 lytithwyn lytithwyn  2371114 Aug 20 15:54 cant_hug_every_cat.mp3
-rwx------ 1 lytithwyn lytithwyn  9326468 Mar 30  2017 devcpp-4.9.9.2_setup.exe
-rwx------ 1 lytithwyn lytithwyn   489217 Jul  1  2015 dilbert_kung_fu_coffee_cup.jpg
-rwx------ 1 lytithwyn lytithwyn  2663796 Aug 29  2013 dilbert_kung_fu_coffee_cup.png
-rwx------ 1 lytithwyn lytithwyn       95 Feb 12  2018 dism.txt

Я не думаю, что проблема связана с SELinux, поскольку я не получаю никаких сообщений из sealert -a /var/log/audit/audit.log, которые упоминали бы что-либо о Samba после того, как я попытался изменить файл. Я также перезагрузил сервер, на случай, если это было что-то временное и нестабильное.

** Изменить (дополнительная информация): позже я обновил свою рабочую станцию ​​до Linux Mint 19.1 (Tessa), и установка через mount.cifs в качестве гостя перестала работать; Я получил тот же результат, что я не мог писать ни в какой каталог ниже верхнего уровня.

После некоторых экспериментов с различными опциями, такими как «nounix» и различными значениями «vers = x», которые не дали никаких изменений, я обнаружил, что если я предоставил пустой пароль для mount.cifs вместо опции «guest», это сработало. Используя параметр -v для mount.cifs, я получил следующие результаты:

sudo mount.cifs //server1/shared /home/lytithwyn/shares/shared/ -o guest,uid=lytithwyn -v
mount.cifs kernel mount options: ip=fdf2:754b:f75b::cd7,unc=\\server1\shared,uid=1000,user=,pass=********

sudo mount.cifs //server1/shared /home/lytithwyn/shares/shared/ -o uid=lytithwyn,password= -v
mount.cifs kernel mount options: ip=fdf2:754b:f75b::cd7,unc=\\server1\shared,uid=1000,user=root,pass=********

Это показало мне, что с опцией «guest» имя пользователя не было указано, но с «password =» в качестве имени пользователя автоматически указывается root. После этого испытания показали, что указание вручную любой имя пользователя (даже то, которое не существует ни на сервере, ни на рабочей станции) привело к монтированию, на котором я мог писать в каталог на любом уровне.

Итак, я предполагаю, что все сводится к тому, что параметры по умолчанию, передаваемые различными инструментами / помощниками для монтажа, изменились в разных версиях, и, возможно, версия samba на моем CentOS 7 неправильно обрабатывает ситуации, когда имя пользователя не передается, то есть эта ситуация не запускает поведение, указанное в "сопоставлении с гостем = плохим пользователем"?