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

Давайте вспомним команду 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
si---------- 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.👽

⤧  Previous post Основные команды Linux ⤧  Next post Настройка Ubuntu