Centos7 Samba 无法通过 GVFS 写入子目录

Centos7 Samba 无法通过 GVFS 写入子目录

我在 Centos 7 上运行 Samba 时遇到了一个非常奇怪的问题。我有一些每个人都可以写入的匿名共享。通常我从 a) 正在维修的 Windows PC 和 b) 通过 GVFS 安装它们的 Linux PC 访问这些共享。

就在最近(我不确定是什么时候开始的,可能是在上周对服务器进行系统范围的更新之后),我注意到当共享通过 GVFS 安装时,我无法写入共享的子目录。我在 Linux Mint Qiana 和 Sylvia 上都试过了。我可以编辑、创建和删除共享根目录中的文件,但我无法在该服务器上任何共享的任何子目录中执行任何这些操作。我收到的错误是“权限被拒绝”。

奇怪的是,这些操作均可通过以下方式在各个级别按预期工作:windows、smbclient 或 mount.cifs。

此外,在该服务器上无法正常工作的同一台 Linux PC 上,我对通过 GVFS 安装共享的类似配置的 Debian 服务器拥有完全的写权限,因此这让我相信它与 Centos 7 服务器有关,而不是 PC 上的 GVFS 实现。

请注意,无论使用何种连接方式,我们都只能匿名访问这些共享。

这是我的 Samba 配置:

[全球的]
工作组 = 工作组
服务器字符串 = Samba 服务器 %v
netbios 名称 = server1
安全 = 用户
映射到访客 = 坏用户
dns 代理 = 无
unix 扩展 = 无
#============================ 共享定义 ================================
[共享]
路径 = /shares/shared
可浏览 = 是
可写 = 是
客人同意 = 可以
只读 = 否
跟随符号链接 = 是

[安装程序]
路径 = /shares/installers
可浏览 = 是
可写 = 是
客人同意 = 可以
只读 = 否
跟随符号链接 = 是

[工具]
路径 = /shares/tools
可浏览 = 是
可写 = 是
客人同意 = 可以
只读 = 否
跟随符号链接 = 是
宽链接 = 是

[驱动程序]
路径 = /shares/drivers
可浏览 = 是
可写 = 是
客人同意 = 可以
只读 = 否

[光盘镜像]
路径 = /shares/cdimages
可浏览 = 是
可写 = 是
客人同意 = 可以
只读 = 否

[windows_sps_更新]
路径 = /shares/windows_sps_updates
可浏览 = 是
可写 = 是
客人同意 = 可以
只读 = 否

以下是我对服务器上这些目录的所有权、权限和 selinux 上下文信息:

drwxrwxrwx。无人无人unconfined_u:object_r:samba_share_t:s0 cdimages
drwxrwxrwx。无人无人unconfined_u:object_r:samba_share_t:s0 驱动程序
drwxrwxrwx。nobody nobody unconfined_u:object_r:samba_share_t:s0 安装程序
drwx--x--x。无人无人system_u:object_r:samba_share_t:s0丢失+找到
drwxrwxrwx。无人无人unconfined_u:object_r:samba_share_t:s0共享
drwxrwxrwx。无人无人unconfined_u:object_r:samba_share_t:s0 工具
drwxrwxrwx。无人无人unconfined_u:object_r:samba_share_t:s0 实用程序
drwxrwxrwx。无人无人unconfined_u:object_r:samba_share_t:s0 windows_sps_updates

对于子目录:

-rwxr-xr-x. 没人没人 unconfined_u:object_r:samba_share_t:s0 AfterTheRain.jpg
-rwxr-xr-x. 没人 没人 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 脚本
-rwxr-xr-x. 没人没人 unconfined_u:object_r:samba_share_t:s0 AutoItX3.dll
drwxr-xr-x. 没人 没人 unconfined_u:object_r:samba_share_t:s0 备份
-rwxr--r--. 没人没人 system_u:object_r:samba_share_t:s0 cant_hug_every_cat.mp3
-rwxr-xr-x. 无人 无人 unconfined_u:object_r:samba_share_t:s0 devcpp-4.9.9.2_setup.exe
-rwxr-xr-x. 没人没人 unconfined_u:object_r:samba_share_t:s0 dilbert_kung_fu_coffee_cup.jpg
-rwxr-xr-x. 没人没人 unconfined_u:object_r:samba_share_t:s0 dilbert_kung_fu_coffee_cup.png
-rwxr-xr-x. 没人没人 unconfined_u:object_r:samba_share_t:s0 dism.txt

当在 Linux PC 上通过 GVFS 安装时,该子目录中的权限显示如下:

-rwx------ 1 lytithwyn lytithwyn 363665 2011 年 8 月 19 日 AfterTheRain.jpg
-rwx------ 1 lytithwyn lytithwyn 129 2015 年 2 月 4 日 analyze_minidump.bat
drwx------ 1 lytithwyn lytithwyn 0 2018 年 3 月 8 日 autoit 脚本
-rwx------ 1 lytithwyn lytithwyn 460104 2014 年 6 月 1 日 AutoItX3.dll
drwx------ 1 lytithwyn lytithwyn 0 2014年5月28日 备份
-rwx------ 1 lytithwyn lytithwyn 2371114 8月 20 15:54 cant_hug_every_cat.mp3
-rwx------ 1 lytithwyn lytithwyn 9326468 2017 年 3 月 30 日 devcpp-4.9.9.2_setup.exe
-rwx------ 1 lytithwyn lytithwyn 489217 2015年7月1日 dilbert_kung_fu_coffee_cup.jpg
-rwx------ 1 lytithwyn lytithwyn 2663796 2013年8月29日 dilbert_kung_fu_coffee_cup.png
-rwx------ 1 lytithwyn lytithwyn 95 2018年2月12日 dism.txt

我不认为问题出在 SELinux 上,因为在我尝试更改文件后,我没有从 sealert -a /var/log/audit/audit.log 得到任何有关 Samba 的输出。我还重新启动了服务器,以防万一出现短暂而不稳定的情况。

** 编辑(附加信息):后来我将自己的工作站升级到 Linux Mint 19.1(Tessa),并且通过 mount.cifs 作为客户机挂载停止工作;我得到了相同的结果,即我无法写入顶层以下的任何目录。

在尝试了各种选项(如“nounix”)和各种“vers=x”值后,我发现如果我为 mount.cifs 提供一个空密码而不是“guest”选项,它就会起作用。使用 mount.cifs 的 -v 选项,我得到了以下结果:

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 作为用户名。之后,试验表明,手动指定任何用户名(即使是服务器或工作站上都​​不存在的用户名)产生了一个挂载,我可以在任意级别的目录中进行写入。

所以我猜这一切都归结为各种安装工具/助手传入的默认选项在各个版本之间发生了变化,也许我的 CentOS 7 上的 samba 版本错误地处理了没有传入用户名的情况,即这种情况没有触发“映射到客人=坏用户”指定的行为?

相关内容