假设允许用户 uid=1000 和 guids=1000,33,277 在文件夹中创建文件/files/。有什么办法可以防止该用户允许其他人读取文件(至少不在 1000、33 或 277 组中)?
让创建的文件成为/files/user1000.file然后问题可以是具体的:
有没有办法防止这种结果 ls /files/user1000.file -al
-rw-rw-r-- 1 1000 1000 6 May 15 17:21 user1000.file
Run Code Online (Sandbox Code Playgroud)
取而代之的是:
-rw-rw---- 1 1000 1000 6 May 15 17:21 user1000.file
Run Code Online (Sandbox Code Playgroud)
也许使用umask?我知道有像 setgiddrw-rws---这样的东西,所以我很乐观可能有办法。
但我想是由用户决定做一个chmod o+rw user1000.file?
您的问题有两种可能的解决方案,它们分别针对略有不同的场景。
第一个将使用umask. 该umask的是,它告诉内核,接入位,其值清除上新创建的文件(这主要影响open(2)和creat(2)系统调用-你仍然可以设置访问位»通过显式调用禁止«通过umask值chmod(2)上新创建的文件)。因此,如果您将 umask 设置为0,则会设置创建文件的程序请求的所有访问位。如果将其设置为04777,则所有位都将被清除。
大多数情况下,默认 umask 值为022,这意味着清除组和其他人的写入权限。
因此,为了解决您的问题,您可以将 umask 值设置为027,这将导致每个创建的文件对组删除写访问权限,并为其他人清除所有位:
$ umask
022
$ touch testfile.022
$ ls -l testfile.022
-rw-r--r-- 1 user user 0 May 15 18:56 testfile.022
$ umask 027
$ touch testfile.027
$ ls -l testfile.027
-rw-r----- 1 user user 0 May 15 18:57 testfile.027
Run Code Online (Sandbox Code Playgroud)
要在您启动的每个 shell 中设置它,请将适当的umask调用放入您的 shell 的启动文件之一(~/.profile或~/.bashrc作为一个好的起点)。
另一种方法是在要清除这些位的目录上使用默认访问控制列表 (ACL)。与使用umask. 首先,它增加了更多的粒度,即在目录级别,其次,它适用于所有人(您不必更改全局umask值):
$ umask
022
$ mkdir acldir
$ cd acldir
$ getfacl .
# file .
# owner: user
# group: user
user::rwx
group::r-x
other::r-x
$ ls -la
total 12
drwxr-xr-x 2 user user 6 May 15 19:11 .
drwxr-xr-x 83 user user 8192 May 15:19:08 ..
$ touch testfile.noacl
$ ls -l testfile.noacl
-rw-r--r-- 1 user user 0 May 15 19:14 testfile.noacl
$ setfacl -m 'user::rwx,group::r-x,other::---' .
$ setfacl -d -m 'user::rwx,group::r-x,other::---' .
# file: .
# owner: user
# group: user
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:other::---
$ touch testfile.acl
$ ls -l testfile.acl
-rw-r----- 1 user user 0 May 15 19:16 testfile.acl
Run Code Online (Sandbox Code Playgroud)
如您所见,在默认 ACL 到位的情况下testfile.acl,其他人的访问位已清除,即使 umask 值设置为022.
要更深入地了解 ACL,请查看acl(5)手册页。
编辑:如果你想阻止文件的所有者对文件进行明确chown(2)的操作,你就必须带出重炮;我认为以符合标准的方式(就 POSIX 而言)是不可能的。有几个安全框架可能允许您拦截和过滤系统调用,但需要额外的配置。他们之中有一些是:
是的,您可以非常轻松地做到这一点。您只需要umask在您的 ~/.profile(或者/etc/profile如果您想为所有用户更改它)中设置默认值:
umask 0007
Run Code Online (Sandbox Code Playgroud)
这样,新文件将根据您的需要创建:
$ touch user1000.file
$ ls -l user1000.file
-rw-rw---- 1 terdon terdon 0 May 15 18:56 user1000.file
Run Code Online (Sandbox Code Playgroud)
有关 的更多信息umask,您可以阅读有关该主题的Arch wiki 页面,该页面通常非常出色。
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |