Почему chmod + w не дает права на запись другим (o)

18

Когда я запускаю, chmod +w filenameон не дает разрешения на запись other, он просто дает разрешение на запись userи group.

После выполнения этой команды

chmod +w testfile.txt

бегущие ls -l testfile.txtотпечатки

-rw-rw-r-- 1 ravi ravi 20 Mar 10 18:09 testfile.txt

но в случае +rи +xон работает правильно.

Я не хочу использовать chmod ugo+w filename.

Рави Севта
источник
1
Если вы не хотите использовать ugo, используйте a.
Муру
да, но я просто хочу знать, почему +wне работает.
Рави Севта
Вот почему я оставил два комментария.
Муру
@muru. В своем askubuntuответе вы утверждаете, что ссылаетесь выше на то, что «это поведение предписано POSIX и, следовательно, не является ошибкой». Обращаем ваше внимание, что текст использования приложений POSIX не является нормативным и поэтому не является обязательным для POSIX.
fpmurphy

Ответы:

26

Ваша конкретная ситуация

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

В той конкретной ситуации, где umaskзначение 002 (все числа восьмеричные).

  • +rозначает, ugo+rпотому что 002 & 444есть 000, что позволяет установить все биты
  • +xозначает, ugo+xпотому что 002 & 111есть 000, что позволяет установить все биты
  • но +wозначает ug+wпотому , что 002 & 222есть 002, что предотвращает установку бита "o".

Другие примеры

  • С umask 022 +wбудет означать u+w.
  • С umask 007 +rwxбудет означать ug+rwx.
  • С umask 077 +rwxбудет означать u+rwx.

Что бы соответствовало вашим ожиданиям

Когда вы измените umaskна 000, выполнив

umask 000

в вашем терминале, то

chmod +w file

установит права на ugo + w.

Примечание

Как предлагает ilkkachu, обратите внимание, что umask 000это не означает, что каждый может читать и писать все ваши файлы.

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

Prvt_Yadav
источник
4
umask 000 означает, что каждый, кто имеет какой-либо доступ к учетной записи пользователя на вашем компьютере (который может включать в себя программы, работающие с серверными службами ofc), может читать и записывать все файлы, которые вы создаете с этой маской, активной и не менять, чтобы быть понятным
StarWeaver
4
«+ r означает ugo = r» - нет, это не так, это означает, что нужно установить rбит для тех сторон, где это позволяет umask. Это четко указано в руководствах, например, GNU chmod и FreeBSD chmod, а также в стандарте. То же самое для +x. Потому +wчто вы правы, в случае этого конкретного umask.
ilkkachu
4
Кроме того, установка значения umask 0 не означает, что все могут читать и записывать все ваши файлы, поскольку многие приложения создают файлы, которые являются особенно частными с режимом 0600, а это означает, что группа и другие не получают никакого доступа, независимо от значения umask.
ilkkachu
@ilkkachu + r означает ugo = r, это было связано с ситуацией, описанной в вопросе. Это не было общим.
Prvt_Yadav
2
@Debian_yadav, в том-то и дело: umaskважная часть того, как +rведет себя, а не sidenote. Кроме того, даже если принять umask 002, chmod +rэто не значит chmod ugo=r, что это означаетchmod ugo+r
ilkkachu
24

С:

chmod +<perms>

Пермь добавляется к пользователю , группе и другим, но при этом применяется umask. Он гарантирует, что файлу не предоставлено больше разрешений, чем у вновь созданного файла.

Если вы хотите добавить права доступа к пользователю , группам и прочим независимо от umask, используйте

chmod a+<perms>

что коротко для

chmod ugo+<perms>
Стефан Шазелас
источник
Это означает, что + x и a + x не равны.
Prvt_Yadav
1
Мне нравится иметь ссылки: man7.org/linux/man-pages/man1/chmod.1.html «Если ничего из этого не дано, эффект такой, как если бы (а) были даны, но биты, которые установлены в umask не затронуты. »
tehnicaorg
0

Вам необходимо указать, кому вы даете разрешения, например other, используяchmod o+w testfile.txt

Jaken551
источник
1
да, но я думаю, что +wдает разрешение на все (пользователь, группа и другие).
Рави Севта
Чтобы дать разрешения всем пользователям, используйте chmod a+w testfile.txt. Используйте uдля пользователя, gдля группы, oдля других и aдля всех.
Jaken551
если chmod a+w filename,chmod +w filename и chmod ugo+w filenameальтернативны друг к другу , то почему бы просто не использовать+w
Ravi Sevta