1、问题详情
环境:centos7
Linux服务端使用samba共享的目录下有其他目录的软链接,即便软链接指向的目录有权限读写,但客户端挂载后还是无法正常写入。
2、准备环境
2.1 安装服务
服务端安装 samba ,修改配置,两个共享路径:/root/dir_true 和 /root/dir_link,都授予 wayne 账号写权限。
然后启动服务。防火墙可关闭或者配置445端口访问权限。
systemctl start smb nmb
systemctl enable smb nmb
[root@test ~]# cat /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
...... # 中间默认配置省略
[true]
comment = dir_true
path = /root/dir_true
write list = wayne
[link]
comment = dir_link
path = /root/dir_link
write list = wayne
2.2 创建目录和授予权限
在 /root 目录下创建两个目录:/root/dir_true 、 /root/dir_test ,一个软链接 /root/dir_link 指向 /root/dir_true,在 /root/dir_true 目录下再创建一个软链接 /root/dir_link_test 指向 /root/dir_test
同时授权 wayne 用户对 /root/dir_true 和 /root/dir_link 的读写执行权限。
验证 wayne 账号有权限。
2.3 创建samba用户账号
smbpasswd -a wayne
pdbedit -L # 查看现有samba账号
账号创建完成之后可再重启下 smb 和 nmb 服务。
3、客户端挂载
在客户端分别根据服务端所配置的两个共享目录名称 true 和 link (对应 /root/dir_true 和 /root/dir_link)挂载至不同的目录。
对于配置中所指定的目录,即便该目录是软链接至其他目录,只要服务端有写入权限,则客户端挂载后也有写入权限。
尝试进入挂载目录下 /true/dir_link_test 目录创建文件,则提示没有权限。在上面验证过,在服务端,用户 wayne 对于 /root/dir_true/dir_link_test (即 /root/dir_test )有写入权限。
4、解决方案
根据查询资料,该问题是源于新版本的 samba 修复了相关的漏洞,允许用户通过软链接访问至系统,所以默认没有允许访问软链接,可在 smb.conf 配置中新增几个选项。
follow symlinks = yes
unix extensions = no
wide links = yes
Accessing symbolic links through Samba results in access denied error. - Red Hat Customer Portal
客户端重新挂载,测试可以正常写入。