16.04 所有权 nobody:nogroup

16.04 所有权 nobody:nogroup

看来升级到 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.logsamba 访客用户创建的文件具有以下权限-rwxr--r--,该文件的所有者是没有人. 您的用户帕克无法修改它,因为它只有读取权限其他的

解决此问题的一种方法是将 Samba 访客用户重新映射到您的用户帕克

确保在你的中设置了此项/etc/samba/smb.conf

guest account = pac

...然后将共享文件夹中所有文件的所有权更改为用户帕克

sudo chown -R pac:pac /path/to/share

_

显然,这在多用户环境中是行不通的,因为除了帕克也需要 rw 访问权限。

有些人可能建议在 smb.conf 中使用-rwxrwxrwx 创建文件和目录,但是根据我的经验,我发现它非常不可靠,因为随着时间的推移,某些文件仍然会具有其他权限create mask = 0777directory 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现在一样出现。

相关内容