我有一个上传目录,其中包含用户输入的信息,每次用户注册时,他们都会提交一张图片,该图片会在上传目录中为他们创建一个文件夹并将他们的照片存储在那里。问题是,默认情况下,这个上传目录和其中的照片分别是 0755 和 0644,我无法完全找出一种方法来可靠地更改新文件和文件夹的默认值(umask 似乎搜索似乎很有成效,但我想我会问根据我的具体情况提出建议。)
我希望在上传中创建新文件夹时,该文件夹只能由所有者和管理员访问,并且对于在这些文件夹中创建的任何文件也是如此。这样做的最终目的是使他们的私人“个人资料”区域只有他们和管理员才能访问。任何帮助将不胜感激。
答案1
新文件的权限确实受到创建进程的影响,但也受到创建文件时umask
进程在系统调用上使用的权限的限制。 open()
(即以有限权限显式创建的文件(想想像这样的真正私人的东西~/.ssh/id_rsa
)永远不会拥有更广泛的权限。)
修改新文件将获得的权限的另一种方法是使用 POSIX ACL,特别是默认 ACL。如果目录具有默认 ACL,它将用于新文件而不是umask
.
这将使当前目录中的所有新文件对其所有者、所有者的组、调用的用户admin
以及其他任何人都无法访问:
$ setfacl -d -m user::rwx -m user:admin:rwx -m other::- .
添加-m group::-
以同时删除所属组的访问权限。
创建文件时使用的权限仍然适用,但这对于用于上传文件的实用程序来说不太可能是问题。
答案2
使用以下任意名称创建一个文件
.cshrc
.profile
.bash_profile
(这些文件将被隐藏)
并添加文件内容umask
并保存,这将保留新文件/文件夹的现有权限