Почему я не могу предоставить пользователям разрешение на запись с помощью chmod в Linux?

Почему я не могу предоставить пользователям разрешение на запись с помощью chmod в Linux?

Текущие права доступа к файлам выглядят следующим образом:

$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file

Теперь я пытаюсь дать права на запись с помощью chmod:

$ chmod +x+r+w file

После этого права доступа к файлам по-прежнему будут выглядеть так:

$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file

Разрешение на запись не дано остальным. Почему это происходит?

решение1

Когда ты бежишь chmod +x+r+w file,все биты установлены, за исключением тех, которые замаскированы вашимumask. Вы, umaskпо-видимому, маскируете (по крайней мере) бит записи других пользователей, поэтому эта +wчасть в конечном итоге игнорируется для них.

Таким образом, для типичного umaskслучая 022 любая chmodкоманда, в которой не указано, для кого должны быть установлены разрешения, в конечном итоге игнорирует любые указанные изменения битов записи группы и других пользователей.

Чтобы установить все биты, игнорируя umask, нужно указатьВОЗВы хотите установить их для:

chmod a+rwx file

или более конкретно,

chmod ugo+rwx file

(или любое подмножество ugo, в зависимости от ситуации, для пользователя, группы и/или других).

Также можно указать числовые разрешения вместо символьных; см.Понимание разрешений и типов файлов UNIXдля получения подробной информации.

Обратите внимание, что umaskмаскирующее поведение также применяется, когдаочисткабиты, что может привести к неожиданным результатам: chmod -w fileочистит только биты записи, которые были бы установлены chmod +w file! Продолжая с типичным значением umask022, это означает, что chmod -wне будет трогать биты записи группы или других, оставляя их установленными, если они уже установлены. (GNU coreutils' chmodлюбезно предупреждает об этом.)

Связанный контент