Назад | Перейти на главную страницу

Почему «chmod -R 777 /» деструктивен?

Это Канонический вопрос о разрешении файлов и Зачем 777 - «разрушительный».

Я не спрашиваю, как решить эту проблему, так как есть масса упоминаний об этом уже в Server Fault (переустановите ОС). Почему он вообще делает что-то разрушительное?

Если вы когда-либо запускали эту команду, вы почти сразу же уничтожаете свою операционную систему. Я не понимаю, почему снятие ограничений влияет на существующие процессы. Например, если у меня нет доступа для чтения к чему-либо, и после быстрой ошибки в терминале у меня теперь есть доступ ... почему это приводит к поломке Linux?

Прежде всего, небольшая придирка к терминологии: chmod не удалять разрешения. Это ИЗМЕНЕНИЯ их.


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

Итак, почему это плохо?

  1. Вы просто разрешили всем читать / изменять каждый файл в вашей системе.
    • Попрощайтесь с безопасностью паролей (любой может прочитать теневой файл и взломать ваши пароли, но зачем беспокоиться? Просто ИЗМЕНИТЕ пароль! Это намного проще!).
    • Поцелуйте безопасность ваших двоичных файлов на прощание (кто-нибудь может просто написать новый login программа, которая пускает их каждый раз).
    • Поцелуй файлы на прощание: один пользователь неверно направляет rm -r / и все кончено. ОС сказали позволить им делать все, что они хотят!
  2. Вы разозлили каждую программу, которая проверяет права доступа к файлам перед запуском.
    sudo, sendmail, а множество других просто больше не запускается. Они проверят права доступа к ключевым файлам, увидят, что они не такие, какими должны быть, и вернут сообщение об ошибке.
    так же ssh ужасно сломается (ключевые файлы должны иметь определенные разрешения, иначе они «небезопасны» и по умолчанию SSH откажется их использовать).
  3. Вы стерли биты setuid / setgid в программах, в которых они были.
    Режим 777 на самом деле 0777. Среди вещей в этой первой цифре есть setuid и setgid биты.
    У большинства программ с setuid / setgid этот бит установлен, потому что они должны работать с определенными привилегиями. Теперь они сломаны.
  4. Ты сломал /tmp и /var/tmp Другая вещь в этой первой восьмеричной цифре, которая получила ноль, - это sticky bit - То, что защищает файлы в /tmp/var/tmp) от удаления людьми, которым они не принадлежат.
    Есть (к сожалению) множество скриптов с плохим поведением, которые "очищают", выполняя rm -r /tmp/*, и без установленного липкого бита /tmp Вы можете попрощаться со всеми файлами в этом каталоге.
    Исчезновение рабочих файлов может действительно расстроить некоторые плохо написанные программы ...
  5. Вы вызвали хаос в /dev /proc и подобные файловые системы
    Это больше проблема старых систем Unix, где /dev это настоящая файловая система, и все, что в ней содержится, представляет собой специальные файлы, созданные с помощью mknod, поскольку изменение разрешений будет сохраняться при перезагрузках, но в любой системе, в которой изменение разрешений вашего устройства может вызвать серьезные проблемы, от очевидных рисков безопасности (каждый может читать каждый TTY) до менее очевидных потенциальных причин паники ядра.
    Credit to @Tonny for pointing out this possibility
  6. Розетки и трубы могут сломаться или иметь другие проблемы Сокеты и каналы могут полностью сломаться или подвергнуться злонамеренной инъекции в результате того, что они доступны для записи во всем мире.
    Credit to @Tonny for pointing out this possibility
  7. Вы сделали каждый файл в своей системе исполняемым
    У многих людей . в их PATH переменная окружения (не следует!) - Это может вызвать неприятный сюрприз, поскольку теперь любой может удалить файл с удобным названием как команда (скажем, make или ls, и попытаться заставить вас запустить их вредоносный код.
    Credit to @RichHomolka for pointing out this possibility
  8. В некоторых системах chmod сбросит списки контроля доступа (ACL)
    Это означает, что вам может потребоваться заново создать все ваши ACL в дополнение к исправлению разрешений повсюду (и это фактический пример деструктивной команды).
    Credit to @JamesYoungman for pointing out this possibility

Будут ли работать уже работающие части системы? Наверное, хотя бы на время.
Но в следующий раз, когда вам нужно будет запустить программу, или перезапустить службу, или не дай бог ПЕРЕЗАГРУЗИТЬ коробку, в которой вы попадете в мир боли, поскольку №2 и №3 выше поднимут свои уродливые головы.

Важным моментом является то, что существует множество инструментов, таких как ssh / sudo, которые проверяют разрешения файловой системы для ключевых файлов конфигурации. Если разрешения неверны, эти инструменты не работают, поскольку это указывает на серьезную проблему безопасности. В моей тестовой системе Debian и, возможно, в других, возможность входа в систему не выполняется, вероятно, потому, что двоичный файл входа в систему или что-то в PAM имеет проверки разрешений.

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

Если вы перезагрузите систему после выполнения chmod 777 -R / он загрузится, и вы сможете запускать процессы, для которых нет явных проверок разрешений. Так что система на самом деле не мертва, а просто непригодна для использования по дизайну.