php umask(0)的目的是什么

在PHP中使用umask(0);的目的是什么?

我已经看过几次了,无法从文档中弄清楚它到底是做什么的。

有人可以解释一下,什么时候使用会有用吗?

Marty Wallace asked 2019-11-18T03:04:45Z
2个解决方案
51 votes

umask设置为0022(或仅设置chmod()),意味着新创建的文件或目录最初不会撤销特权。 换句话说,零的umask将导致将所有文件创建为0666或可全局写入。 当umask0时创建的目录将是0777

通常,当您看到0022时,应直接调用chmod(),以将新创建的文件或目录上所需的权限显式设置为世界可写以外的其他权限。

将umask设置为零时请小心! 这可能很危险,并且仅在创建以后必须由Web服务器写入的文件时才有用,当Web服务器以另一个用户身份运行时,“真正的”用户也需要能够修改创建的文件 通过网络服务器。 否则,系统的默认umask可能类似于0022,可由文件所有者而非其他人写入。 在这种情况下,如果您以普通用户帐户登录到计算机,则您将无法编写由Web服务器在PHP下创建的文件。

与其创建可写世界的文件,不如通常更明智地管理Web服务器正在写入的目录。 如果在目录内创建的文件应具有某些组权限,则建议在目录上设置sgid位,以便其中的新文件继承组的所有权。 需要访问该文件的用户应该是有权访问该文件的组的成员。 这比创建世界可读,可写世界的文件安全得多。

php > umask(0);
// Should get created as 666
php > touch('file1.txt');

// "2" perms revoked from group, others, gets created as 644
php > umask(022);
php > touch('file2.txt');

// All revoked (2,4) from group, others, gets created as 600
php > umask(066);
php > touch('file3.txt');

-rw-rw-rw-   1 me  group     0 Aug 24 15:34 file1.txt
-rw-r--r--   1 me  group     0 Aug 24 15:35 file2.txt
-rw-------   1 me  group     0 Aug 24 15:37 file3.txt
Michael Berkowski answered 2019-11-18T03:05:30Z
4 votes

umask基本上是用于创建文件的默认设置。 从本质上讲,打开默认的chmod并写入文件比写入然后chmod进行安全(有人说)更安全。 归根结底,完成文件和运行chmod之间的时间最多可能只有几毫秒,因此我对此表示怀疑。

umask() sets PHP's umask to mask & 0777 and returns the old umask

它基本上将默认的写权限设置为您在操作系统(如Linux)上插入的任何内容,然后返回旧的写权限,以便您可以将其重置。 这适用于PHP流程本身。

doc页面上的评论:[http://php.net/manual/en/function.umask.php]将通过示例进行澄清。

Sammaye answered 2019-11-18T03:06:09Z
translate from https://stackoverflow.com:/questions/12116121/php-umask0-what-is-the-purpose