看来升级到 16.04 后我一直遇到共享文件夹所有权和权限的问题。
我创建了一个名为 的文件夹test
,将其权限更改为777
,并在本地网络中共享该文件夹。
从另一台机器(Windows),我可以查看和编辑该test
文件夹中的文件,但每当我编辑该文件夹中的文件时,所有权和权限就会更改为 nobody:nogroup - 因此我无法在我的 16.04 机器上再次编辑它。
test$ ll
total 328
drwxrwxrwx 2 pac pac 4096 Jan 20 09:59 ./
drwxrwxrwx 4 pac pac 4096 Jan 20 09:32 ../
**-rwxr--r-- 1 nobody nogroup** 326442 Jan 20 09:59 t1.log*
为什么它会自动更改为-rwxr--r-- 1 nobody nogroup
?如何防止这种变化,以便权限始终为rwxrwxrwx
并且所有权始终为pac:pac
(消除这种nobody:nogroup
烦恼)?
我想避免在文件夹上重复执行此操作test
:
$ sudo chown pac:pac . -R
$ chmod 777 . -R
答案1
如果 Samba 共享存在权限问题,最好意识到 Samba 有自己的用户结构以及文件和目录权限。如果创建 Samba 共享,并且希望通过仅允许某些用户访问该 Samba 共享来限制访问权限,通常会创建 Samba 用户。在命令行上,可以使用命令“smbpasswd”来完成此操作。有关更多信息,请参阅:
man smbpasswd
要将用户和文件/目录权限添加到 Samba 配置,可以编辑位于 /etc/samba/ 中的 smb.conf 文件
另请参阅此处:
https://help.ubuntu.com/community/Samba/SambaServerGuide#Samba_Server_Configuration_in_terminal
有关设置权限,请参见此处:
https://help.ubuntu.com/community/Samba/SambaServerGuide#File_Sharing_.28Advanced.29
编辑 smb.conf 后,需要重新启动 Samba 服务器守护进程或读取(重新加载)配置文件。
在一些较旧的 Ubuntu 版本中,可以同时重新启动 smbd 和 nmbd,但在较新的 Ubuntu 版本中,可以重新启动“init”脚本 samba。
sudo service samba restart
在某些办公环境中,仅进行配置重新加载而不是重新启动 Samba 是有意义的,以避免对用户造成可能的中断。
/etc/init.d/nmbd force-reload && /etc/init.d/smbd force-reload
这是一些较旧的 Ubuntu 版本的问题。我假设较新的 Ubuntu 版本也是如此:
sudo service samba force-reload
可能会有效。(尚未测试过)。
答案2
这是使用 samba 而非 16.04 时与文件和目录权限有关的问题。我假设您正在设置公共共享,并且不使用登录名,并将 samba 来宾用户映射到用户没有人。
由于所有 samba 用户都将以没有人,任何保存的文件都会继承用户没有人和组无组。
t1.log
samba 访客用户创建的文件具有以下权限-rwxr--r--
,该文件的所有者是没有人. 您的用户帕克无法修改它,因为它只有读取权限其他的。
解决此问题的一种方法是将 Samba 访客用户重新映射到您的用户帕克。
确保在你的中设置了此项/etc/samba/smb.conf
:
guest account = pac
...然后将共享文件夹中所有文件的所有权更改为用户帕克
sudo chown -R pac:pac /path/to/share
_
显然,这在多用户环境中是行不通的,因为除了帕克也需要 rw 访问权限。
有些人可能建议在 smb.conf 中使用-rwxrwxrwx 创建文件和目录,但是根据我的经验,我发现它非常不可靠,因为随着时间的推移,某些文件仍然会具有其他权限create mask = 0777
。directory mask = 0777
我发现的唯一可靠的解决方案是使用 bindfs 重新挂载共享目录以始终强制 0777 权限。
首先,安装bindfs:
sudo apt install bindfs
然后,创建一个 systemd 服务文件:
sudo nano /lib/systemd/system/mount-bindfs.service
将其粘贴到文件中:
# mount-bindfs systemd service file
[Unit]
Description=Remount directories with different permission
After=mountall.service
[Service]
Type=forking
ExecStart=/bin/sh -c "/usr/bin/bindfs -o perms=0777 /path/to/share /path/to/share"
[Install]
WantedBy=multi-user.target
重新加载 systemd,在启动时启用服务并启动它:
sudo systemctl daemon-reload
sudo systemctl enable mount-bindfs.service
sudo systemctl start mount-bindfs.service
ll
在您的共享文件夹上执行操作,所有内容应该像rwxrwxrwx
现在一样出现。