art*_*rtm 5 permissions samba file-sharing 16.04
升级到 16.04 后,我似乎经常遇到共享文件夹所有权和权限的问题。
我创建了一个文件夹 name 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*
Run Code Online (Sandbox Code Playgroud)
为什么它会自动更改为-rwxr--r-- 1 nobody nogroup?我怎样才能防止这种变化,以便始终获得许可并且始终rwxrwxrwx拥有所有权pac:pac(消除这种nobody:nogroup烦恼)?
我想避免在文件夹上重复执行此操作test:
$ sudo chown pac:pac . -R
$ chmod 777 . -R
Run Code Online (Sandbox Code Playgroud)
如果 Samba 共享出现权限问题,最好认识到 Samba 有自己的用户结构以及文件和目录权限。如果创建一个 Samba 共享,并且希望通过仅授予某些用户访问该 Samba 共享的权限来限制访问,那么通常会创建 Samba 用户。在命令行上,可以使用命令“smbpasswd”来完成此操作。查看更多信息:
man smbpasswd
Run Code Online (Sandbox Code Playgroud)
要将用户和文件/目录权限添加到 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
Run Code Online (Sandbox Code Playgroud)
在某些办公环境中,仅重新加载配置而不是重新启动 Samba 是有意义的,以避免用户可能出现的中断。
/etc/init.d/nmbd force-reload && /etc/init.d/smbd force-reload
Run Code Online (Sandbox Code Playgroud)
这是在一些较旧的 Ubuntu 版本上。我假设在较新的 Ubuntu 版本上:
sudo service samba force-reload
Run Code Online (Sandbox Code Playgroud)
可能有效。(尚未测试过)。
这是与使用 samba 而不是 16.04 时的文件和目录权限相关的问题。我假设您正在设置公共共享并且不使用登录名,并将 samba 来宾用户映射到用户nobody。
由于所有 samba 用户都将以无人身份登录,因此保存的任何文件都将继承用户无人和组nogroup。
t1.log由 samba guest 用户创建的文件具有该权限-rwxr--r--,并且该文件的所有者是无人。您的用户pac无法修改它,因为它仅具有其他人的读取权限。
解决此问题的一种方法是将 samba guest 用户重新映射到您的用户pac。
确保在您的/etc/samba/smb.conf:
guest account = pac
Run Code Online (Sandbox Code Playgroud)
...然后将共享文件夹中所有文件的所有权更改为用户pac
sudo chown -R pac:pac /path/to/share
Run Code Online (Sandbox Code Playgroud)
_
显然,这在多用户环境中不起作用,因为除pac之外的其他用户也需要 rw 访问权限。
有些人可能建议在 smb.conf 中使用create mask = 0777和directory mask = 0777来使用 -rwxrwxrwx 创建文件和目录,但是根据我的经验,我发现它非常不可靠,因为随着时间的推移,一些文件仍然最终具有一些其他权限。
我发现的唯一可靠的解决方案是使用bindfs重新挂载共享目录以始终强制0777权限。
首先,安装bindfs:
sudo apt install bindfs
Run Code Online (Sandbox Code Playgroud)
然后,创建一个systemd服务文件:
sudo nano /lib/systemd/system/mount-bindfs.service
Run Code Online (Sandbox Code Playgroud)
将其粘贴到文件中:
# 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
Run Code Online (Sandbox Code Playgroud)
重新加载 systemd,在启动时启用该服务并启动它:
sudo systemctl daemon-reload
sudo systemctl enable mount-bindfs.service
sudo systemctl start mount-bindfs.service
Run Code Online (Sandbox Code Playgroud)
对您的共享文件夹进行操作ll,一切都应该像现在一样显示rwxrwxrwx。