我是 RHEL 新手,在揭露目录集合时遇到问题。
我有一个文件夹,其中的内容将从 python 脚本生成内容。子文件夹将存在一段时间,然后被删除。这些文件夹最初被屏蔽为一个用户能够读取/写入它们,但最近我们需要允许任何人访问这些文件夹。我使用 -R(递归选项)在文件夹上运行 unmask 命令来取消屏蔽所有子文件夹和文件。它似乎一直有效,直到生成新内容并且 BAM 出现同样的问题,文件夹和文件被屏蔽。
如何永久取消对文件夹的所有子文件夹和文件的屏蔽?我需要具有创建/读/写访问权限的每个人都可以访问这些文件。
答案1
创建文件的过程是问题所在。该进程/程序使用给定的运行umask
,以便当它创建文件时,新创建的文件将使用特定的umask
.你基本上有 3 个选择:
修改进程的umask
根据进程(网络服务器)的不同,这可能不是您想要做的。
添加群组
更友好的方法是创建一个 Unix 组(Web 数据),如果它是每个人都需要访问的与 Web 服务器相关的内容。然后更改相关目录的顶级组,以便网络数据组的成员拥有/访问它们。
然后运行与这些类似的命令来创建目录的组 web-data,并强制该组保持粘性,以便创建的任何新文件/文件夹都将使用该组作为默认组。
$ chgrp web-data /path/to/dir $ find /path/to/dir -type d -exec chmod g+xs {} +
最后将 Web 服务器用户 (apache) 以及需要访问该目录的其他用户添加到该组中。
使用访问控制列表 (ACL)
您可以使用这些工具
setfacl
来getfacl
操作给定目录或文件的 ACL。例子
作为根用户:
$ mkdir somedir $ getfacl somedir # file: somedir # owner: root # group: root user::rwx group::r-x other::r-x
现在添加用户
sam
对目录的访问权限。$ setfacl -Rm u:sam:r-x,d:sam:r-x somedir getfacl somedir/ # file: somedir # owner: root # group: root user::rwx user:sam:r-x group::r-x mask::r-x other::r-x default:user::rwx default:user:sam:r-x default:group::r-x default:mask::r-x default:other::r-x
现在创建的任何后续目录和/或文件都将设置其目录,以便用户
sam
可以访问它们:$ mkdir anotherdir $ echo "hello world" > anotherfile
确认权限:
$ getfacl another* # file: anotherdir # owner: root # group: root user::rwx user:sam:r-x group::r-x mask::r-x other::r-x default:user::rwx default:user:sam:r-x default:group::r-x default:mask::r-x default:other::r-x # file: anotherfile # owner: root # group: root user::rw- user:sam:r-x #effective:r-- group::r-x #effective:r-- mask::r-- other::r--
现在作为用户
sam
:$ more anotherfile hello world
如果其他用户需要类似的访问权限,只需
setfacl
使用该用户的用户名代替 重新运行命令即可sam
。可以修改上述方法,以便可以向一组用户授予访问权限,而不是向单个用户授予访问权限。