Это канонический вопрос о правах доступа к файлам и почему 777 является «разрушительным».
Я не спрашиваю, как решить эту проблему, поскольку существует множество ссылок на это уже при сбое сервера (переустановите ОС). Почему это делает что-нибудь разрушительное вообще?
Если вы когда-либо запускали эту команду, вы сразу же уничтожаете свою операционную систему. Мне непонятно, почему снятие ограничений влияет на существующие процессы. Например, если у меня нет доступа для чтения к чему-либо, и после быстрого опечатки в терминале внезапно у меня теперь есть доступ ... почему это приводит к поломке Linux?
linux
permissions
chmod
Samwise
источник
источник
Ответы:
Прежде всего, мелкая терминология:
chmod
не удаляет разрешения. Это меняет их.Теперь суть проблемы - режим
777
означает «Любой может читать, писать или выполнять этот файл». - Вы дали разрешение любому делать (эффективно) все, что ему нужно.Теперь, почему это плохо?
login
программу, которая позволяет им каждый раз).rm -r /
и все кончено. ОС было сказано, чтобы позволить им делать все, что они хотят!sudo
,sendmail
И множество других просто не пустят больше. Они изучат права доступа к ключевому файлу, увидят, что они не те, кем они должны быть, и отправят сообщение об ошибке.Точно так
ssh
же сломается ужасно (ключевые файлы должны иметь определенные разрешения, в противном случае они «небезопасны» и по умолчанию SSH откажется их использовать.)Режим
777
на самом деле . Среди вещей в этой ведущей цифре есть и биты. У большинства программ, которые имеют setuid / setgid, этот бит установлен, потому что они должны работать с определенными привилегиями Они сломаны сейчас.0
777
setuid
setgid
/tmp
и/var/tmp
другая вещь в этой восьмеричной цифре, которая получила ноль, - этоsticky bit
то, что защищает файлы в/tmp
(и/var/tmp
) от удаления людьми, которые не владеют ими.Существует (к сожалению) множество скриптов с плохим поведением, которые «очищают», выполняя
rm -r /tmp/*
, и без установленного фиксатора/tmp
вы можете поцеловать все файлы в этом каталоге до свидания.Исчезновение скретч-файлов может сильно расстроить некоторые плохо написанные программы ...
/dev
/proc
и других подобных файловых систем, это больше проблема на старых системах Unix , где
/dev
является реальной файловой системы, и материал содержит специальные файлы , созданные с помощьюmknod
, так как изменения разрешений будут сохранены после перезагрузки, но в любой системе изменение разрешений вашего устройства может вызвать существенные проблемы, от очевидных угроз безопасности (каждый может прочитать каждый TTY) до менее очевидных потенциальных причин паники ядра.Credit to @Tonny for pointing out this possibility
Credit to @Tonny for pointing out this possibility
много людей имеют
.
в своемPATH
переменном окружении (вы не должны!) - Это может вызвать неприятный сюрприз , как теперь любой человек может уронить файл с именем удобно как команда (скажем ,make
илиls
, и попытаться заставить их запустить их вредоносный код.Credit to @RichHomolka for pointing out this possibility
chmod
сбрасываются списки контроля доступа (ACL).Это означает, что вам может понадобиться пересоздать все ваши ACL в дополнение к повсеместному фиксированию разрешений (и это фактический пример разрушительной команды).
Credit to @JamesYoungman for pointing out this possibility
Будут ли работать уже запущенные части системы? Возможно, хотя бы на время.
Но в следующий раз, когда вам нужно будет запустить программу, или перезапустить службу, или, боже, запретите перезагружать коробку, в которой вы живете, мир, в котором вы страдаете, так как № 2 и № 3 выше поднимут свои уродливые головы.
источник
/tmp
это будет исправлено после перезагрузки. Хотя все остальное кажется сломанным. По крайней мере, в VM, которую я только что протестировал, появляется перезагрузка с фиксированными/tmp
разрешениями. Там должно быть что-то в скрипте запуска где-то.tmpfs
обычно исправляют себя, те, которые имеют / tmp на диске, могут (зависит от их сценариев запуска)find / -perms -4000 -type f
иfind / -perms -2000 -type f
увидеть различные двоичные файлы, которые зависят от этих флагов.everyone
определяется как объединение множества , включая пользователя , которому принадлежит файл, пользователи в группе , которой принадлежит файл, и пользователи , которые не соответствуют ни одному из указанных критериев (буквально трех восьмеричных цифр разрешения:User
,Group
, иOther
). Другими словами, любой пользователь, имеющий доступ к системе . («Доступ» в этом контексте может быть учетной записью оболочки, как я обычно это делаю, но он также включает доступ через веб-форму / CGI, которая записывает данные на диск:www
теперь пользователь может записывать в любой файл в системе). , что означает, что случайные посетители тоже могут.)Одна важная вещь состоит в том, что есть много инструментов, таких как ssh / sudo, которые проверяют разрешения файловой системы для ключевых файлов конфигурации. Если разрешения неправильные, эти инструменты предназначены для сбоя, поскольку это указывает на серьезную проблему безопасности. В моей тестовой системе Debian и, возможно, в других, возможность входа в систему не выполняется, возможно, из-за того, что двоичный файл входа в систему или что-то в PAM имеет проверку прав доступа.
Так что на самом деле система не разрушена, а в том, что многие инструменты предназначены для немедленного сбоя при неправильных разрешениях.
Если вы перезагрузите систему после этого,
chmod 777 -R /
она загрузится, и вы сможете запускать процессы, у которых нет явной проверки разрешений. Таким образом, система на самом деле не мертва, просто несколько непригодна для разработки .источник