我需要在Linux主机(Samba服务器)与Linux(客户端)和Windows(客户端)之间部署Samba共享。现在服务器上的这个文件夹将在 Linux 和 Windows 客户端计算机之间共享文档。在 Samba 服务器上,我创建了两个测试用户,我们称他们为 venice 和 john。现在在 Samba 服务器上,我设置 samba 的文件上下文并启用 RO 和 RW 布尔值,并设置 john 和 venice 的权限
> getfacl: Removing leading '/' from absolute path names
> # file: samba/docs/
> # owner: venice
> # group: venice user::rwx user:venice:rwx user:john:rwx group::r-x mask::rwx other::r-x default:user::rwx default:user:venice:rwx
> default:user:john:rwx default:group::r-x default:mask::rwx
> default:other::r-x
在 samba 配置文件中我做了以下配置
[smbdocs]
comment = Documents share
path = /samba/docs
browseable = yes
read only = yes
write list = venice john
guest ok = no
printable = no
hosts allow = 10.8.8.51
在使用 samba 安装时
mount.cifs //10.8.8.50/smbdocs -o username=venice,password=pass /samba/docs/
即使系统级别权限和 Samba 级别允许,我也无法使用 venice 和 john 用户创建文件。
现在如果我使用威尼斯的 uid 和 gid 进行挂载
mount.cifs //10.8.8.50/smbdocs -o username=venice,password=pass,uid=1001,gid=1001 /samba/docs/
我能够使用 venice 用户创建文件,但 john 仍然无法创建文件或编辑文件
任何建议
主机操作系统版本 RHEL 7.4
答案1
RHEL 7 默认启用 SELinux,并且它将要限制 Samba 对文件系统的访问。当您在自定义路径(例如 )中创建自己的 Samba 共享时/samba/docs
,您必须向该路径应用合适的 SELinux 标签。
如果您需要 Samba 和其他服务可以访问的目录,则应使用 SELinux 上下文类型标签public_content_rw_t
并设置SELinux 布尔值以允许 Samba 在完全控制文件所有权的上下文smbd_anon_write
中对文件和目录进行写访问:public_content_rw_t
setsebool -P smbd_anon_write=1
semanage fcontext -a -t public_content_rw_t "/samba/docs(/.*)?"
restorecon -Rv /samba/docs
如果您不打算/samba/docs
通过任何其他服务(例如httpd
或ftpd
)进行访问,则可以使用samba_share_t
context 来代替,然后就不需要布尔设置:
semanage fcontext -a -t samba_share_t "/samba/docs(/.*)?"
restorecon -Rv /samba/docs
该semanage fcontext -a...
命令会将定义新标签的正则表达式永久添加到 SELinux 配置中,并将restorecon
新标签应用到实际文件系统。您还可以用来更改 SELinux 上下文标签,但是无论何时执行(例如恢复备份后),chcon
您的更改都会丢失。restorecon
首先将标签信息存储到 SELinux 配置中,确保即使您的备份方法不是专门支持 SELinux 的,也可以恢复它 - 只要下面的 SELinux 配置/etc
也已备份。