Что более широко используется: chmod 777 или chmod a + rwx [закрыто]

20

Из двух вариантов изменения разрешений:

  • chmod 777 file.txt
  • chmod a+rwx file.txt

Я пишу документ, в котором подробно описано, что пользователям необходимо изменить права доступа к определенному файлу. Я хочу описать это как наиболее распространенный способ изменения прав доступа к файлам.

В настоящее время говорит:

- Set permissions on file.txt as per the example below:
    - chmod 777 /tmp/file.txt

Это всего лишь пример, и файлы не будут изменены, чтобы иметь полные права доступа для всех.

Kevdog777
источник
6
Первое решение короче и более широко используется, я никогда не видел второго.
Архемар
2
установка разрешений на чтение, запись и выполнение для всех на самом деле не очень хорошая идея с точки зрения безопасности. Вместо этого вы должны использовать chmod 773.
Мартин Эрхардт
1
@MartinErhardt Я бы обычно использовал 775или только 755для исполняемых файлов.
Kevdog777
3
chmod 777это как chmod a=rwx, нет chmod a+rwx.
Стефан Шазелас
1
777или 666просто и намного более запоминаемо, чем ugo+rwx, a+rwxили ugo+rwэто очень запутанно, так как oнеоднозначно и может означать для вас, как владельца, так и других, вы выбираете. Таким образом, вместо того, чтобы делать большую ошибку, вы продолжаете проверять, manчтобы проверить, какой из них какой, или просто используете числа.
Кенорб

Ответы:

29

Google дает:

  • 1 030 000 результатов для ' chmod 777 '
  • 371 000 результатов для ' chmod a + rwx '

chmod 777 примерно в 3 раза популярнее.

Тем не менее, я предпочитаю использовать длинные опции в документации и скриптах, потому что они самодокументируются. Если вы выполняете инструкции с помощью «Запустить ls -l | grep file.txtи проверить разрешения», вы можете использовать их, chmod a+rwxпотому что именно так ls будет отображать разрешения.

jwhitlock
источник
Спасибо за это. Я предполагаю, что если вы напишете это полностью (алфавитно-цифровая), люди не будут спрашивать, что это 7значит и т. Д.
Kevdog777
1
Я думаю, что причина chmod 777более популярна (так как это происходит до того, как вы увидите ваши цифры) просто в том, что вы печатаете на 2 символа меньше :)
Ángel
Если вы хотите добавить подсказки в свою документацию, вы можете добавить подсказку, которая chmod 777является удобным сочетанием клавиш для достижения того же эффекта. Ваши читатели будут благодарны за образовательный элемент в вашей документации. 777 более популярен, потому что намного проще и быстрее набрать 7 три раза, но когда новый пользователь впервые видит 777, он может не знать, что именно это означает. Вот почему это плохой выбор в качестве первичной документации. Но это определенно стоит упомянуть в качестве совета.
ADTC
В качестве касательной, мой брат и его друзья использовали бы эту технику для разрешения слов Эрудит. У них был некоторый порог для количества просмотров Google, прежде чем слово считалось «реальным»
Уэйн Вернер
Я думаю, что он популярен, потому что он более старый (символическая запись была добавлена ​​позже), поэтому, когда кто-либо выбирает, он ищет в Google или что-то подобное, что было в тот момент, и идет с толпой. Я думаю, что проще использовать символику, потому что к тому времени, когда я разработал числа, я мог бы набрать символы, я также склонен сделать это правильно с первого раза.
Ctrl-Alt-Delor
26

[Я изменяю, чтобы добавить лучшую практику, следуя предложению Дотанкогена в своем ответе. Я надеюсь, что это не делает это менее ясным, и что хорошая привычка взята]

Важная дополнительная информация: они не эквивалентны.

chmod a+rwx: установите последние 3 восьмеричных числа в 777, чтобы убедиться, что для владельца, группы и пользователей установлено значение «rwx». Если в первом восьмеричном виде есть дополнительные биты (setuid, setgid и / или Sticky-бит), он остается без изменений. Думайте об этом как двоичный файл "или 00777".

chmod 777 : установите права на 00777, чтобы убедиться, что для владельца, группы и пользователей установлен «rwx», и НИЧЕГО больше. Также убедитесь, что дополнительные биты (setuid, setgid и / или Sticky bit) установлены в 0.

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

Используйте форму 777, если вы также хотите обязательно сбросить любой бит setuid / setgid / sticky, т.е. если файлы должны иметь значение «00777», что, вероятно, более вероятно в вашем случае (право файла известно и должно быть : 00777). Вот также, сделайте тройную уверенность, что это действительно необходимо ...

Обычно лучше сохранить доступ к владельцу (а иногда и группе): затем используйте группы, чтобы предоставить доступ некоторым конкретным пользователям к файлу / каталогу. + rwx - это простой и, как правило, неправильный способ предоставления доступа (конечно, есть очень редкие случаи, когда это единственный способ ...)

http://en.wikipedia.org/wiki/Chmod хорошо читается, поскольку объясняет, что представляет каждая цифра или буква (включая setuid / setgid / sticky)

Оливье Дюлак
источник
1
Кроме того, chmod a + w (который включает в себя + rwx) в файле suid очень опасен. Нужно ли уточнить на chmod a + w *?
Джошуа
Какой смысл в настройке othersразрешения? Если вы вошли в систему как пользователь, то наверняка вы можете просто использовать usersразрешение?
Kevdog777
@ Kevdog777: Другие предназначены для людей, не являющихся владельцами или членами группы, или всех остальных в системе
Оливье Дюлак
1
@ Kevdog777: если только root и пользователю нужен доступ: chmod 00600 (если нет необходимости выполнять файл) или chmod 00700 (если необходимо выполнить файл - или - это каталог). или chmod 00400 для добавления (крошечной, легко перезаписываемой) защиты от изменения / записи в файл (00500 для каталога). Тогда другие (и люди в группе, но не пользователь) не могут получить доступ к файлу / директории. (следуя примечанию dotandcohen, я добавляю 4-й восьмеричный символ + перед ним «0»: это не имеет значения для оболочки, но помогает, если вы устанавливаете через perl / C / etc, а 4-й восьмеричный символ напоминает, что он существует и то, что он установлен тоже)
Оливье Дюлак
4
chmod 777это как chmod a=rwx.
Стефан Шазелас
1

Я обычно думаю о разнице в том, что установка разрешений на 0777 явно устанавливает их на 0777. Как упоминалось ранее, начальный 0 будет выведен, если вы просто наберете 777. В то время как + rwx добавляет чтение / запись / выполнение, оставляя setuid / sticky немного нетронутым.

Предположим, что вы просто хотите быть уверенным в том, что файл является исполняемым, вы можете использовать + x, чтобы изменить привилегию выполнения, не беспокоясь о других разрешениях и не изменяя их. Если вы использовали восьмеричное представление, вам нужно знать, какие разрешения в настоящее время установлены, чтобы быть уверенным, что вы не измените разрешения каким-либо другим способом, помимо того, что вы намеревались.

Джош Фаместад
источник
0

Я бы сказал, что предоставление числовых значений гораздо чаще встречается в «простых руководствах для людей», таких как руководства для пользователей бюджетного веб-хостинга. Однако позаботьтесь о том, чтобы указывать их как восьмеричные , а не десятичные значения:

$ chmod 0777 some_dir

Обратите внимание , ведущий 0в 0777. Хотя Bash и другие среды CLI правильно делают с использованием unpadded 777, многие языки программирования, такие как PHP и Perl, имеют схожие функции, которые требуют ведущих 0. Поэтому я рекомендую использовать его и в Bash, чтобы помнить, что он должен быть там.

Примечание для downvoters: Как поясняется в комментариях, chmodкоманда на самом деле знает, как передать директиву как восьмеричную, даже если задана десятичная запись. Однако не все среды поддерживают это, поэтому лучше всего привыкнуть к его явному указанию.

dotancohen
источник
10
chmodникогда не обрабатывает число как десятичное. chmod 777 fileи chmod 0777 fileполностью эквивалентны.
celtschk
3
@ Kevdog777: "восьмеричный" просто означает base-8. Но вам не нужно заботиться об этом, если речь chmodидет об использовании команды shell; Вы можете просто думать о трех цифрах как о независимых друг от друга, каждая из которых говорит вам об одном наборе разрешений.
celtschk
3
Для chmod значение 0 в 0777 фактически означает «очистить бит setuid, setgid и sticky». Это эквивалентно 777, поскольку аргумент всегда дополняется начальными нулями до четырех цифр. По той же причине chmod 77эквивалентно chmod 077.
Эмиль Йержабек поддерживает Монику
1
Команда chmodинтерпретирует свой аргумент mode в восьмеричном виде. Вам нужно обратить внимание, если вы используете большинство языков программирования (C, Perl,…), но в сценарии оболочки это восьмеричное значение chmod.
Жиль "ТАК ... перестать быть злым"
1
+1 для вашей заметки, так как действительно полезно всегда добавлять перед 0 (даже если установить все 4 восьмеричных числа: например, 01777), поскольку это не имеет значения для оболочки, но убедитесь, что C, perl и другие интерпретируют его как восьмеричное
Olivier Дюлак