我有一个在 Ubuntu Server 20.04 上运行的带有一个共享的 Samba 服务器。我可以从我的笔记本电脑访问此共享,并以我的身份登录到 Samba 服务器。但是,如果我使用 sudo 运行需要访问 Samba 服务器的进程,它会返回“权限被拒绝”错误。我需要在服务器上或在我的进程中更改什么才能使其正常工作?
以下是smb.conf中共享的设置:
[ourshare]
path = /srv/ourshare
valid users = me otheruser
force group = ourshare
browseable = no
guest ok = no
read only = no
create mask = 0660
force create mode = 0660
directory mask = 0770
force directory mode = 0770
服务器目录权限如下:
/srv: drwxr-xr-x 5 root root 4096 Mar 19 2023 srv
/srv/ourshare: drwxrws--- 9 nobody ourshare 4096 Apr 16 07:47 ourshare
就像我一样,我可以使用以下命令从命令行访问该目录:
me@mylaptop:~$ cd /run/user/1000/gvfs/'smb-share:server=192.168.1.100'
但是,当我使用 sudo 运行的脚本尝试使用 tar 访问相同路径时,出现“权限被拒绝”的错误:
tar -cvf /home/me/backup.tar -T /home/me/file-list.txt
其中 file-list.txt 包含以下行:
/run/user/1000/gvfs/'smb-share:server=192.168.1.100'
如果我执行 sudo -s 然后尝试 cd 进入共享,它也会失败并显示“权限被拒绝”。
/run/user/1000/gvfs 是所有基于 gvfs fuse 的挂载的父文件夹,因此只有调用它的用户(在本例中为 uid=1000)才能遍历该文件夹。甚至 root 也无法遍历该文件夹。
我的建议是不要使用 gvfs 来挂载共享,而是使用 cifs - 就像 mount.cifs 一样
确保已安装 cifs“帮助程序”包:
为此远程共享创建一个挂载点 - 您无法挂载服务器,只能挂载其共享:
然后使用 cifs 将共享安装到该安装点 - 如下所示:
用正确的值替换“me”和“xxx”。
Samba 与 NFS 一起通过将远程用户重新映射到服务器上的
root
某些“无害”用户(例如) ,避免了大量安全漏洞。nobody