Вступление
Разрешения на доступ к файлам и безопасность лежат в основе операционных систем на базе * nix. Файловые объекты могут принадлежать пользователям и / или группам, и иногда они должны использоваться совместно с различными комбинациями этих двух. В системах * nix есть несколько способов повысить безопасность совместного использования этих объектов.
Мы используем
chmod
для изменения или модификации прав доступа к файлам.
В этом руководстве обсуждаются права доступа к файлам и способы их
изменения с помощью chmod
. Хотя пояснения и код должны работать почти
для всех систем на базе * nix, это руководство было специально
написано для Linux.
Право собственности и разрешения
Прежде чем мы перейдем к chmod
, давайте рассмотрим основы владения
файлами и каталогами в Linux. Файлы и каталоги, которые вы найдете или
создаете, имеют права доступа, предоставленные трем категориям
владельцев :
Владельцы Символическое представление Описание
Пользователи ты Основной владелец объекта файла / каталога Группы грамм Пользователь может входить в одну или несколько групп. Другие о Другие пользователи, которые также не входят в группу
Этим владельцам может быть назначено одно или несколько из следующих разрешений доступа:
Разрешение Символическое представление Восьмеричное представление Описание
Читать р 4 Разрешение на чтение, копирование из каталога Писать ш 2 Разрешение на запись / редактирование, удаление, добавление новых файлов в каталог Выполнять Икс 1 Разрешение на выполнение двоичного файла
Давайте получим практический опыт работы с chmod
, сначала создав
пустой файл:
$ touch temp.txt
Мы также будем ls -l
для проверки прав доступа. Команда ls
используется для вывода списка файлов, но -l
возвращает их в
длинном формате, который также включает информацию о правах доступа:
$ ls -l temp.txt
-rw-r--r-- 1 ubuntu ubuntu 0 Apr 20 22:17 temp.txt
Левая часть результата содержит информацию о разрешениях доступа. Хотя они не так интуитивно понятны, как две таблицы, которые были только что. Результат состоит из нескольких составляющих:
{.ezlazyload}
Разрешения можно разделить на три части, каждая из которых соответствует владельцам в следующем порядке - Пользователи, Группы и Другие . Вы также могли заметить имена владельцев, то есть пользователя и группу, к которой принадлежит объект.
Порядок разрешения для каждого кодона из 3 имеет структуру rwx
.
Если одно из этих разрешений недоступно, отсутствующее разрешение
заменяется дефисом (-), например rw-
. Остальные детали связаны с
самим файлом: его размер, дата создания и имя.
Утилита chmod
chmod
помогает нам назначать разрешения для объектов файлов /
каталогов. У него есть специальный набор аргументов, соответствующий
владению и разрешениям:
Разрешение Символическое представление Восьмеричное представление
читать р 4 написать ш 2 выполнять Икс 1 отсутствует разрешение на - 0
Для каждого владельца эти разрешения могут быть суммированы (для
восьмеричного представления - например, 4 + 2 = 6 обозначают
разрешения на чтение и запись) или объединены (для символического
представления - например, rw
обозначает разрешения на чтение и
запись).
Это ключ к пониманию того, как работает команда chmod
Давайте изменим
права доступа к temp.txt
файла и позволяют читать, писать и
выполнять разрешения для пользователя, но запретить любой доступ к
группе и другим.
Для этого вы можете использовать восьмеричное или символьное представление :
$ chmod 700 temp.txt
{.ezlazyload}
Восьмеричная запись - 700
может быть разбита как:
- Первая восьмеричная целочисленная позиция соответствует
пользователю, а само число 7 является восьмеричным представлением
всех разрешений (
rwx
), то есть 4 + 2 + 1 = 7. - Вторая и третья позиции восьмеричного целого числа соответствуют Группе и Другим , где число 0 показывает, что нет никаких разрешений на доступ к объекту.
Давайте теперь посмотрим на права доступа к файлу temp.txt
$ ls -l temp.txt
-rwx------ 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt
Мы можем выполнить ту же команду и назначить разрешения практически
таким же образом, если мы перепишем 700
используя символическую
нотацию:
$ chmod u+rwx,g-rwx,o-rwx temp.txt
Снимает разрешение , используя -
знак, и добавил +
. При
использовании символического представления, владельцы отделены друг от
друга запятыми ,
. Здесь мы добавили разрешение rwx
u
, но
удалили его из g
и o
.
Это приводит к тем же правам доступа:
$ ls -l temp.txt
-rwx------ 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt
Теперь рассмотрим другую команду:
$ chmod u+rwx,g-rw+x,o-rw+x temp.txt
Здесь мы переплели плюсы и минусы:
'u+rwx'
означает, что пользователю предоставляются права на чтение, запись и выполнение.'g-rw+x'
и'o-rw+x'
показывают, что Группе и Другим запрещено выполнять какие-либо операции чтения / записи, но им разрешено выполнять выполнение.
Это эквивалент chmod 711 temp.txt
с использованием восьмеричного
представления.
Давайте еще раз проверим файл:
$ ls -l temp.txt
-rwx--x--x 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt
Мы также можем использовать знак '='
для установки / перезаписи
разрешений соответствующему владельцу. Вышеупомянутую команду можно
также записать как:
$ chmod u=rwx,g=x,w=x temp.txt
Это опять же приводит к:
$ ls -l temp.txt
-rwx--x--x 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt
Расширенное использование chmod - SUID, GUID и липкие биты
Теперь, когда основы chmod
ясны, давайте сделаем еще один шаг,
рассмотрев дополнительный набор специальных разрешений только на
выполнение / удаление, которые действуют как четвертый уровень
безопасности для существующих разрешений на чтение, запись и выполнение.
Это включает:
Специальное разрешение Символическое представление Восьмеричное представление Описание
SUID (установить идентификатор пользователя) рв ** дерьмо ------ 4 Разрешение только на выполнение, определенное на уровне пользователя . Он используется для предоставления пользовательских привилегий любому, кто запускает файл (ы) внутри объектов каталога. SGID (Установить GroupID) --- рв ** дерьмо --- 2 Разрешение только на выполнение, определенное на уровне группы . Он используется для предоставления групповых привилегий любому, кто запускает файл (ы) внутри объектов каталога. Липкий бит ------ гв ** т ** 1 Определяется на уровне других . Это предотвращает удаление файла или объекта. Только владелец или корень могут удалить файл или объект.
При вызове chmod
и установке аргумента специальное разрешение
предшествует обычным разрешениям. Если мы хотим добавить специальное
разрешение к нашему обычному 700
, мы просто заранее добавляем цифру:
$ chmod 5700 temp.txt
$ ls -l temp.txt
-rws-----T 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt
Здесь 5
определяет сумму 4+1
, которая представляет собой комбинацию
SUID и разрешения Sticky Bit. 700
представляет собой 'rwx'
для
Владельца . SUID отменяет разрешение владельца, и тот, кто запускает
файл, всегда будет выполнять его как владелец файла . Кроме того,
только владелец файла сможет удалить его. Обратите внимание на наличие
символа 'T'
в выводе, который означает, что установлен Sticky Bit .
Перепишем команду, используя символическое представление:
$ chmod u+srwx,g-rwx,o+t-rwx temp.txt
$ ls -l temp.txt
-rws-----T 1 ubuntu ubuntu 0 Apr 20 22:19 temp.txt
Разберем аргумент по запятым, так как он становится длинноватым:
u+srwx
: у пользователя естьSUID
вместе сrwx
.g-rwx
: группа лишена разрешенийrwx
o+t-rwx
:+t
обозначает добавлениеSticky Bit
а остальные лишены разрешенийrwx
Если у вас есть другой пользователь, попробуйте переключиться на этого пользователя и проверьте, можете ли вы удалить файл. Вы должны получить вот такое приглашение:
$ sudo su unknown
$ rm temp.txt
rm: remove write-protected regular empty file 'temp.txt'?
Заключение
В этом руководстве мы узнали о владении файлами и каталогами и
разрешениях в Linux. Затем мы использовали chmod
для их изменения. Эти
команды могут быть весьма полезны для облегчения защиты файлов или
каталогов в операционных системах на базе * nix.