Права доступа Linux
Каждый пользователь должен работать в системе под своей учетной записью. Это позволит ему обезопасить свои файлы от чужого вмешательства, по системным журналам определить, когда и кем были произведены некорректные действия, и т. д.
Давайте вспомним команду ls -al. Она возвращает список файлов в следующем виде:
drwx—— 3 User UserG 4096 Nov 26 16:10 .
Как мы уже знаем, первая колонка (занимает 10 символов)— это права доступа. Давайте рассмотрим, из чего она состоит. Первый символ указывает на тип записи. Здесь может находиться одно из следующих значений:
- дефис (-) — обычный файл;
- буква d — каталог;
- буква 1 — символьная ссылка;
- буква s — сокет;
- буква р — файл FIFO (First In, First Out — первый вошел, первый вышел).
Далее в колонке прав доступа в каждой строке следуют три группы по три символа, определяющие права доступа для различных категорий пользователей:
- первая тройка — владельцу файла;
- вторая — пользователям, входящим в группу владельца;
- последняя — всем остальным.
Каждая такая группа состоит из трех символов: г (чтение), w (запись) и х (выполнение). Наличие буквы говорит о разрешении соответствующего действия.
Вернемся к нашему примеру. Первая строка содержит права доступа: drwx——– . Первый символ d — значит, это каталог. Потом идут три символа rwx — т. е. хозяин файла может читать, записывать и исполнять каталог. Вместо остальных шести символов стоят знаки дефиса— значит, ни у пользователей группы UserG, ни у всех остальных никаких прав нет.
Права можно задавать и последовательностью нулей и единиц. Если в определен ном месте стоит 1 (указан один из символов г, w или х), то операция разрешена, а если 0 (указан дефис) — действие запрещено. Давайте попробуем записать права rwxr-xr— в виде нулей и единиц. Запишите вместо букв единицы, а вместо дефисов — нули. Должно получиться 111101100. Разобьем эту комбинацию на три части: 111, 101 и 100. Теперь каждую тройку переведем в восьмеричную систему по следующей формуле:
Цифра1 ★ 4 + Цифра2 ★ 2 + ЦифраЗ
У нас получатся три цифры: 7, 5 и 4, которые можно рассматривать как десятичное число 754. Запомните его, оно нам пригодится при назначении прав на файлы и каталоги. Чтобы вам в дальнейшем было проще регламентировать доступ, предлагаю все возможные варианты значений для отдельного разряда числа:
- О — запрещено все;
- 1 — разрешено выполнение;
- 2 — разрешена запись;
- 3 — разрешены запись и выполнение;
- 4 — разрешено чтение;
- 5 — разрешены чтение и выполнение;
- 6 — разрешены чтение и запись;
- 7 — разрешено все.
Попробуйте теперь с помощью этого списка определить возможности, которые предоставляет число 754. Каждый разряд нужно рассматривать в отдельности. Сравните полученный результат с символьным представлением rwxr-xr—, из которого мы получили с помощью перевода число 754.
Важно! Для того чтобы иметь право создавать или удалять файлы, необходимо иметь разрешение на запись в каталог. Это немного сбивает начинающих пользователей с толку, поскольку им бывает непонятно, почему при наличии всех прав на файл его нельзя удалить.
Если необходимо, чтобы при копировании файла сохранились и права доступа, и время доступа, можно использовать команду ср с указанием ключа -р.
Назначение прав
Для изменения режима доступа к объектам файловой системы служит команда chmod. С ее помощью можно устанавливать новые права на объект как в символьном (применяется для изменения относительно текущего состояния), так и в числовом виде (абсолютное задание). Для начала рассмотрим символьный режим:chmod параметры права файл
Компонент параметры может включать комбинацию следующих значений:
- u — изменить права владельца;
- g — изменить права группы;
- о — изменить права остальных пользователей;
- а — изменить все права (то же самое, что передать значение: ugo).
Перед указанием прав можно задать режим их изменения относительно существующих:
- — добавить;
- — удались;
- = — заменить новыми (старые значения будут уничтожены).
После этого устанавливается режим доступа:
- г — чтение;
- w — запись;
- х — выполнение;
- X — выполнение, если файл является каталогом или уже имеет аналогичные права для какого-либо пользователя;
- S — SUID- или SGID-бит
- t — sticky-бит. В этом случае только владелец файла и каталога сможет удалить его
- и — всем пользователям, как и у владельца;
- g — всем пользователям, как и у группы;
- о — всем пользователям, как и у остальных пользователей.
В числовом представлении команда выглядит следующим образом:chmod права файл
Права передаются в виде восьмеричного числа из четырех разрядов:
- первый разряд определяет дополнительный бит и может принимать одно из значений:
- 1 — бит принадлежности;
- 2 — бит SGID;
- 4 — бит SUID. Если дополнительные биты устанавливать не надо, этот разряд можно опустить;
- второй разряд определяет права пользователя — это может быть число от 0 до 7 включительно;
- третий разряд определяет права группы — это снова может быть число от 0 до 7;
- четвертый разряд определяет права остальных пользователей. Как вы думаете, какие значения может принимать параметр? Ну конечно же, от 0 до 7.
Например, мы хотим, чтобы владелец и группа имели все права (число 7) на файл text, а остальные пользователи могли его только выполнять (число 1).
Команда будет выглядеть следующим образом:chmod 771 text
Число 771 в символьном виде соответствует правам: rwxrwx—х.
Следующая команда отменит возможность чтения файла у группы:chmod g-r text
После этой команды права доступа на файл станут: rwx-wx—х.
Теперь давайте запретим для всех запуск файла. Для этого можно выполнить команду:chmod ugo-x text
ИЛИchmod а-х text
После наших манипуляций права доступа на файл станут: rw—w—
Владелец файла
Для изменения владельца файла существует команда chown:chown имя файл
Через параметр имя определяется пользователь, которому нужно передать права на указанный файл. Например, давайте сделаем владельцем файла test администратора root. Для этого нужно выполнить следующую команду:chown root test
Изменить можно и группу, к которой принадлежит файл. Для этого выполните команду chgrp:chgrp имя файл
Здесь задается имя группы, которой предоставляются права на указанный файл. Например, для файла test укажите группу администратора root, отдав команду:chgrp root test
С помощью команды chown можно убить сразу двух зайцев и изменить и пользователя, и группу одной командой — для этого группу нужно указать через двоеточие после имени пользователя:chown username:web test
Довольно часто приходится менять владельца сразу всех объектов в каталоге, и для этого можно использовать ключ - R :
chown _www:staff /etc/www/website
Подобную команду можно использовать в следующей, например, ситуации. Пусть у меня есть процесс, который иногда должен загружать файлы на сервер по FTP и после этого для определенного каталога нужно изменить права доступа так, чтобы скрипты сайта могли обращаться к этим файлам. Одной такой командой я меняю разрешение доступа ко всем новым файлам.
Права по умолчанию
Когда пользователь создает новый файл или каталог, то им назначаются права по умолчанию. Давайте рассмотрим это на примере. Для создания файла выполним команду is и перенаправим вывод в файл:ls -al >> testfile
Теперь проверим права на этот файл с помощью команды is -al. Должно получиться: -rw-r—г—, т. е. владелец может читать и изменять файл, а пользователи его группы и все остальные — только просматривать. В старых системах и в некоторых дистрибутивах права могут оказаться и такими: -rw-rw-r—, т. е. пользователи группы тоже смогут корректировать файл. Но в любом случае все получают возможность читать файл — это разрешено. Такие права нарушают главное правило безопасности.
В этом отношении политика назначения прав по умолчанию может быть не совсем эффективна— если вы создадите файл, который хранит конфиденциальные данные, информация из него будет доступна для всеобщего обозрения. И если вы забудете понизить права, то любой сможет увидеть и прочитать этот файл.
Ситуацию можно изменить, если понимать, как создаются права для нового файла. Они рассчитываются на основе маски, текущее значение которой определяется командой umask. Если выполнить ее после установки системы, будет получено значение 0022 или 002.
Посмотрим, как маска влияет на регламентацию доступа. По умолчанию права для файлов устанавливаются в значение 666 минус маска, а для каталогов — 777 минус маска.
Все это не есть хорошо. Только владелец должен иметь доступ, достаточный для полноценной работы с файлами и каталогами, а остальные вообще не должны иметь никаких прав. Эту ситуацию можно исправить изменением маски. Я рекомендую установить ее в 077. В этом случае для каталогов права будут определены так: 777 - 077 = 700 (или: drwx—— ), а для файлов: 666 - 077 = 600 (или: -rw——- ). Тогда доступ к файлу имеет только владелец. Все остальные — отдыхают.
Вот такое положение дел нас уже устраивает. Чтобы установить новую маску, выполните команду:umask маска
В нашем случае это будет:umask 077
Изменение маски по умолчанию затронет только текущий сеанс. Если перезапустить терминал, то маска сбросится на значение по умолчанию. Чтобы значение маски было постоянным, его нужно прописать в файлы /etc/bashrc и /etc/profile. Тогда значение маски будет устанавливаться автоматически при старте консоли.
Права доступа к ссылкам
Мы говорили о жестких и символьных ссылках на файлы. Для начала проверим права на жесткие ссылки:
Права абсолютно идентичны. Я надеюсь, что вы другого и не ожидали, ведь у жестких ссылок одинаковые дескрипторы.
С символьными ссылками дело обстоит куда хуже.
Если вы решили использовать символьные ссылки, то всегда помните особенность формирования прав доступа на файлы. Можете даже выбить на мониторе надпись: «Ссылки на файлы создаются с полными правами!!!
Дополнительные возможности защиты
Помимо прав доступа, у любого файла есть еще и атрибуты, которые позволяют построить дополнительную стену безопасности.lsattr filename.txt
————— filename.txt
Первая строка демонстрирует использование команды, а во второй — отображается результат ее работы. Как видите, мы получили набор дефисов вместо атрибутов, а значит, ни один из них не определен.
Для установки атрибута применяется команда chattr:chattr атрибуты файл
Если требуется рекурсивное изменение доступа к каталогу и ко всем содержащимся в нем файлам и подкаталогам, можно использовать ключ -R. В этом случае вместо имени файла укажите в команде chattr каталог.
Вот перечень основных атрибутов, применяемых в команде chattr:
- A — не создавать метку atime записи времени последнего обращения к файлу. С точки зрения безопасности этот атрибут несет отрицательный эффект, потому что по дате обращения можно контролировать, когда файл был модифицирован. Поэтому не рекомендую устанавливать этот флаг.
- a — позволяет открывать файл только в режиме добавления. Это значит, что уже существующие данные изменить или удалить будет нельзя;
- d — заставляет игнорировать файл при копировании. Этот флаг позволяет уменьшить размер резервной копии, но устанавливать его нужно только на файлы, не имеющие ценности и важности, — например, временные.
- i — запрещает выполнение с файлом каких-либо действий по корректировке (изменение, удаление, переименование, создание ссылок);
- s — делает невозможным восстановление файла после удаления. При удалении файла все пространство на диске, где он был записан, будет заполнено нулями;
- S — во время изменения файла все действия будут фиксироваться на жестком диске.
Для установки атрибута перед ним нужно поставить знак «плюс», для снятия — знак «минус». Рассмотрим несколько примеров:chattr +i test
chattr +s test
lsattr test
s—i---------- test
В первой строке мы добавляем атрибут i, а значит, запрещаем какие-либо изменения файла. Во второй строке устанавливаем флаг s, и теперь при удалении файла можно быть уверенным, что он уничтожен полностью. Команда в третьей строке запрашивает текущие атрибуты, а в последней строке вы можете увидеть, что в перечне атрибутов первый символ равен s, а четвертый — i.
Итак, в четвертой строке у нашего файла стоят два взаимоисключающих атрибута: один запрещает изменения, другой требует полного стирания с диска. Что произойдет, если мы попытаемся удалить файл? Посмотрим?rm test
rm: remove write-protected file “test”?
В первой строке мы выполняем команду удаления файла. На это ОС просит подтвердить операцию над защищенным от записи файлом (сообщение показано во второй строке). Как видите, ОС определила наш атрибут i. Попробуйте ввести букву Y, чтобы подтвердить действие. Вы увидите сообщение об ошибке, и файл останется на месте.
Давайте снимем атрибут i:chattr -i test
lsattr test
s————– test
После отмены атрибута я выполнил команду lsattr, чтобы убедиться в правильно сти выполнения команды. Вот теперь файл легко удалить с помощью команды rm.👽