我怎样才能创建目录:
/data
/data/user1
/data/user2
并确保每当root
在其中写入时,根据写入的目录,设置不同的所有者。
例子:
- root 写入 /data -> 正常文件创建
- Root 写入 /data/user1 -> 在其中创建的任何文件都自动归 user1 所有并可由其他人读取(如果 user1 自己写入该目录,则同样适用)
答案1
您可以使用目录上的 SGID 位获得接近您想要的内容。如果你跑
chmod g+s /data/user1
然后,在该目录中创建的任何文件或目录的组所有权都将设置为与目录本身相同的组。它并不能准确地实现您想要的目标,但它可以帮助您实现目标。
另一种方法是使用 POSIX acls 并在目录上设置默认 acls。默认 acls 将由目录中创建的文件继承。它们不会更改所有权,但确实提供了一种方法,可以为标准文件 acl 的三个基本组之外的任意组提供读、写或执行访问权限。
答案2
下面的脚本可能非常危险,并且只监视在 中创建的新文件${DIR}
,创建的任何文件的所有者将更改为${OWNER}
,并添加全局读取权限。
需要您自担风险使用它 ...
#!/bin/bash
DIR="$PWD/user1"
OWNER="user1"
inotifywait -m --format "%e %f" "$DIR" | awk '$1 ~ "CREATE" { print $2; fflush() }' |
while read file
do
FILE="${DIR}"/"${file}"
echo "Changin permission for ${FILE}"
chown user1 "${FILE}"
chmod o+r "${FILE}"
done
如果你写一个fs驱动并挂载它会更安全。
答案3
bindfs
也许可以帮到你
cd /data
chown user1:user1 user1
bindfs --create-for-user=user1 --create-for-group=user1 --create-with-perms=go+rD user1 user1
bindfs
有关 chown/chmod 策略等更多内容,请参阅手册页的其余部分。
答案4
你不能。
这是一份适合以下人员的工作:
- 克朗和克朗
- inotify 和您这边的一些脚本。
就我个人而言,我会选择 inotify。上面的脚本是一个很好的起点。