Будучи разработчиком приложений, я никогда особо не интересовался командами Linux, но поскольку сейчас я работаю в очень маленькой компании, мне приходится делать всевозможные вещи, которые мне очень нравятся, если вы похожи на меня, то эта статья для вас.
Недавно я выполнил команду chmod 777 -R / на одном из наших администраторов AWS EC2, и это привело к множеству нежелательных и не очень хороших вещей. Я подробно расскажу о том, что произошло, а также о некоторых деталях chmod и разрешений в целом в этой статье, и к концу статьи вы будете хорошо разбираться в них и сможете выполнять эти команды с определенной уверенностью.
Как разработчик приложений, я не обладаю 100% знаниями о системах Linux и о том, как они работают внутри, но после того, как я совершил эту ошибку, я провел исследование и написал эту статью, чтобы не делать того же в будущем, если вы читаете эту статью, я могу спасти и вас.
Оглавление
Файловая система, пользователь и группы пользователей в Linux:
Прежде чем перейти к деталям, давайте вкратце обсудим файловые системы, пользователей и группы пользователей в Linux. В основном, в системе на базе Unix есть разрешения, прикрепленные к каждому из созданных файлов, вы могли слышать, как чтение, запись и выполнение. На основании этих разрешений пользователь получает доступ к этим файлам, и есть так называемый суперпользователь, который может предоставить или отозвать доступ к любым файлам в файловой системе. Этот суперпользователь будет особенно полезен, когда пользователь владеет очень важным каталогом и покидает организацию, тогда в этом случае суперпользователь может прийти и сменить владельца этого каталога (если обычному пользователю разрешено выполнять некоторые команды на уровне root, то это можно сделать с помощью sudo).
О правах доступа к файлам
Теперь давайте обсудим кое-что, связанное с правами доступа, которые могут быть установлены на файлы, они представлены либо алфавитами, либо цифрами
ls -l your_file_name -- Command
-rw-------@ 1 SRA 4238108 Apr 21 2022 IMG_0237.jpg --- output
# here my file name is IMG_0237.jpg
ls -ld your_folder_name -- Command
Так, строка ниже ls - l дала нам разрешения на чтение и запись (rw). Если вы хотите узнать о каталоге, мы можем использовать ls -ld. Вы можете узнать больше, что может делать команда ls, используя команду man ls.
О том, как можно изменить права доступа, пользователя или группы пользователей
Теперь давайте обсудим, как можно изменить права доступа, назначить нового пользователя или группу на определенную папку или файл. Это можно сделать с помощью команд chown и chmod. Прежде всего, давайте обсудим chmod и коды доступа, которые поставляются с chmod
- r: используется для предоставления права на чтение
- w: используется для разрешения записи
- x: используется для разрешения на выполнение
- -r: используется для снятия разрешения на чтение
- -w: используется для удаления разрешения на запись
- -x: и вы правильно догадались, чтобы снять разрешение на выполнение.
Альтернативный код Альтернативно, мы также можем использовать числа для представления этих разрешений.
Допустим, вы использовали ls -l для файла и вас не устроило разрешение на файл, тогда вы используете chmod.
chmod permission_you_want your_filename
chmod rwx your_filename
Теперь давайте обсудим chown, который можно использовать для смены пользователя и группы в файле или каталоге. Допустим, как я уже говорил, файл или папка принадлежит какому-то пользователю, который покинул компанию, и мы хотим изменить его на другого пользователя и группу.
chown user_name:user_group_name file_or_folder_name
Когда вы выполнили эту команду и теперь хотите проверить пользователя и группу, вы можете просто использовать ls -l или ls -ld.
Теперь что за суета вокруг -R
До этого момента мы имели дело либо с папкой, либо с одним файлом, но что делать, если вы хотите изменить права на каждый файл в папке и на все файлы во вложенных папках в папке, вот тут-то и пригодится опция -R(Recursive).
chmod -R your_access_modes folder_name
chmod -R 777 your_folder_name/
Почему вы должны быть осторожны
Теперь давайте разберемся, почему нам следует быть очень осторожными при выполнении команды chmod 777. Вообще, 777 означает, что вы даете пользователю разрешение на чтение, запись и выполнение, что может быть нормально для одного файла, но давать разрешение на всю папку слишком рискованно, но может быть принято в определенной степени, но команда, которую я выполнил
chmod -R 777 /
Это слишком рискованно, и я думаю, что этого следует избегать и никогда не запускать, особенно если вы разработчик приложений. Это меняет разрешения на каждый файл под root, то есть на каждый файл на вашей Linux-машине, это дает разрешение на чтение, запись и выполнение всех файлов всем пользователям, имеющим доступ к этой машине, это очень серьезная проблема безопасности (эти проблемы могут быть отдельной статьей, поэтому я не буду обсуждать их здесь). В моем случае это повлияло на нас следующим образом: машина, на которой я выполнил эту команду, используется для запуска jenkins, и это повлияло на ваш CI/CD конвейер почти на два дня, это испортило sudo разрешения, которые есть у других пользователей на этой машине. Проще говоря, это привлекло внимание множества людей, и множеству людей пришлось работать над исправлением этого, так что это было влияние этого простыми словами.
В заключение
Но да, вам не стоит беспокоиться об этом, если вы уже запустили его, вы ничего не можете с этим поделать, кроме как исправить его. Вот что сказал мне мой менеджер, когда я признался, что именно я являюсь причиной того, что трубопровод не работает, и я цитирую его точные слова.
За свою карьеру я бывал и хуже - если кто-то не испортил что-то в Linux, он, вероятно, недостаточно занимается разработкой.