У меня действительно странная проблема с 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 неправильно обрабатывает ситуации, когда имя пользователя не передается, то есть эта ситуация не запускает поведение, указанное в "сопоставлении с гостем = плохим пользователем"?