Php umask (0), какова цель

Какова цель использования umask(0); в php?

Я видел это несколько раз и не могу понять из документации, что он точно делает.

Может кто-нибудь объяснить это и когда было бы полезно использовать?

Ответ 1

Установка umask в 0000 (или просто 0) означает, что созданные ранее созданные файлы или созданные каталоги не будут иметь никаких прав, первоначально отозванных. Другими словами, a umask нуля приведет к тому, что все файлы будут созданы как 0666 или доступны для записи в мире. Каталоги, созданные в umask 0, будут 0777.

Обычно, когда вы видите umask(0), он должен следовать непосредственно вызовом chmod(), чтобы явно установить разрешения, необходимые для вновь созданного файла или каталога, для чего-то другого, кроме записываемого в мире.

Соблюдайте осторожность при установке umask на ноль! Это может быть опасно и в основном полезно только для создания файлов, которые позднее должны быть написаны веб-сервером, когда веб-сервер работает как другой пользователь, который "реальный" пользователь, которому также нужно будет иметь возможность изменять файлы, созданные веб-сервером. В противном случае системный по умолчанию umask скорее всего будет 0022, доступный для записи владельцем файла, но не другими. В этом случае, если вы вошли в систему под обычной учетной записью пользователя, файл, созданный веб-сервером под PHP, не будет доступен для вас.

Вместо создания файлов, записываемых в мире, обычно лучше управлять каталогами, которые веб-сервер пишет более явно. Если файлы, созданные внутри каталога, должны иметь определенные групповые разрешения, может быть целесообразно установить бит 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

Ответ 2

umask в основном является настройкой по умолчанию для создания файлов. В сущности, безопаснее включить ваш chmod по умолчанию, а затем записать файл, чем записать его, а затем chmod (некоторые говорят). В конце дня время между окончанием написания файла и запуском chmod было бы в лучшем случае в миллисекундах, поэтому я скептически отношусь к этому.

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

В основном он устанавливает разрешения на запись по умолчанию для всех, что вы вставляете в ОС, таких как Linux, а затем возвращает старый, чтобы вы могли reset вернуть его обратно. Это относится к самому процессу PHP.

Комментарии на странице документа: http://php.net/manual/en/function.umask.php будут разъясняться на примере.