确保新创建的文件/文件夹归父文件夹的用户和组所有

确保新创建的文件/文件夹归父文件夹的用户和组所有

看了其他问题,我做了以下工作:

chmod g+s MEDIA 
setfacl -R -d -m g::rwx MEDIA 
setfacl -R -d -m o::rwx MEDIA 

注意:MEDIA 是我想要设置的文件夹,以便添加的所有文件/文件夹具有与父文件夹相同的用户/组。

在此示例中,MEDIA 由用户Bob和组拥有SharedFiles。目标是让新创建的文件/文件夹保留此所有权(BobSharedFiles

MEDIA Bob SharedFiles
MEDIA/NewFolder Bob Bob   <BAD
MEDIA/NewFolder Bob SharedFiles   <GOOD

如果我在以用户“Bob”身份登录时创建一个子文件夹,则该文件夹由 Bob:SharedFiles 拥有,具有 [rwxrwxrwx] 权限(按预期)。都好!

如果我以 Sue 身份登录,新文件夹将成为 Sue:Sue 的一部分,带有 [rwxr-xr-x]。

如果我通过 KDE 中安装的驱动器(用户 Sue)从另一台计算机登录,该文件夹将成为 Bob:Bob 的一部分,带有 [rwxr-xr-x]。

现在 Bob 和 Sue 都是 SharedFiles 的一部分,我哪里出错了。我希望 SharedFiles 组中的所有用户都具有 RWX 权限,并且希望 SharedFiles 组中的用户创建的所有文件/文件夹具有与父文件夹相同的用户/组,为什么这种情况只发生在计算机本身的所有者身上。

getfacl MEDIA/

回报

# file: MEDIA/
# owner: Bob
# group: SharedFiles
# flags: -s-
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

samba.conf 包含:

[MEDIA]
 read only = no
 locking = yes
 path = /mnt/local/int001/MEDIA
 guest ok = yes
 create mask = 0775
 directory mask = 0775

答案1

Samba 倾向于在文件上强加自己的权限和所有权概念,以便更接近地模仿(分层的)NTFS 权限样式。

如果扩展 Samba 定义以包含force userforce group指令,您可以确保在共享上(通过 Samba)创建的所有文件都将具有指定的所有者和组。

[MEDIA]
  read only = no
  locking = yes
  path = /mnt/local/int001/MEDIA
  guest ok = yes
  create mask = 0664
  directory mask = 0775
  force user = Bob
  force group = SharedFiles

但是,您无法直接对本地用户实现相同的操作,因为用户不可能创建其他人拥有的文件。这是inotifywait可以提供帮助的地方。在启动时对其进行设置以监视目录层次结构并更改任何新创建的文件的所有权:

cd /mnt/local/int001/MEDIA || exit
inotifywait --monitor --recursive --event create --format '%w%f' . |
    while IFS= read -r file
    do
        if [[ -f "$file" || -d "$file" ]] && [[ ! -h "$file" ]]
        then
            chown Bob:SharedFiles "$file"
            chmod u+rw,go=u,o-w "$file"
        fi
    done

使用此inotifywait解决方案,您不需要文件系统 ACL。

就我个人而言,我不相信您真的需要更改文件所有权。您指定的 ACL(以及force groupSamba 中的相应内容)将确保目录树的所有用户都可以访问 in 中的文件和目录。普通用户被拒绝是有充分理由的chown

相关内容