Команда Chmod в Linux (права доступа к файлам)

Ограничение прав пользователей в операционной системе – тема сложная, но необходимая. В зависимости от семейства операционной системы существуют разные правила и стандарты. Рассмотрим подробнее, как это происходит в ОС Ubuntu.

Основы

С самого своего появления, UNIX позиционировался как мультипользовательская операционная система. Что соответственно повлекло за собой создание механизмов для защиты и обеспечения авторизорованного доступа к данным. Таким образом появился стандарт DAC (Discretionary Access Control). В соответствии с DAC, пользователь сам решает какие права доступа соответствуют файлам. Но с точки зрения разработки операционных систем эта модель оказалась неудовлетворительной. Из-за чего появились новые модели для организации доступа к файлам, такие как MAC (Mandatory Access Control), ACL (Access Control List), и их реализации, например SELinux, TrustedBSD, Trusted Solaris.

ls Linux — основые ключи и примеры: права доступа сортировка ls Linux — основые ключи и примеры: права доступа сортировка Заметки о решаемых задачах АйТишников — Навигация в терминале Linux (pwd, cd, ls)

Введение

В Unix каждому файлу соответствует набор прав доступа, представленный в виде 9-ти битов. Он определяет, какие пользователи имеют право читать файл, записывать в него данные или выполнять его. Права могут изменяться владельцем файла или суперпользователем с помощью команды chmod.

Для каждого файла определяется доступ:

  • владельца (owner);
  • группового владельца (group owner);
  • остальных пользователей (everyone).

Реализация управления доступом осуществляется тремя флагам:

  • чтение — read (r);
  • запись — write (w);
  • выполнение — eXecute (x).

Также у файла присутствует дополнительный флаг, определяющий тип файла, так как в Unix системах всё является файлом, включая папки и устройства.

flag user group other
# rwx rwx rwx

Таблица типа флага.

Флаг Описание
Отсутствие флага
l Символическая ссылка (symbolic link)
d Директория (directory)
b Блочное устройство (block device)
c Символьное устройство (character device)
p Канал, устройство fifo (fifo device)
s Unix сокет (unix domain socket)

Права доступа

Сочетание трех флагов определяет право доступа, например r-x, rw- или rwx. Для удобства записи флаги представляются числами с отличающимся разрядом, что позволяет по их сумме определить право доступа.

  • read = 4
  • write = 2
  • eXecute = 1

Для файлов и каталогов, флаги r, w, x имеют отличный смысл.

Сумма Флаги Маска Права на файл Права на каталог
0 000 — — — отсутствие прав отсутствие прав
1 001 — — x права на выполнение доступ к файлам и их атрибутам
2 010 — w — права на запись отсутствие прав
3 011 — w x права на запись и выполнение все, кроме доступа к именам файлов
4 100 r — — права на чтение только чтение имен файлов
5 101 r — x права на чтение и выполнение чтение имен файлов и доступ файлам и их атрибутам
6 110 r w — права на чтение и запись только чтение имен файлов
7 111 r w x полные права все права

Для полноценного просмотра каталога, необходимы права на чтение каталога и доступ к файлам, а главное к их атрибутам, т.е. минимальные разумные права на каталог = 5 (r-x). Прав 4 (r–) хватит только на просмотр имен файлов, без атрибутов, т.е. не будут известны размер файла, права доступа, владелец. На практике для каталогов используется только три режима: 7 (rwx), 5 (r-x) и 0 (—).

drwxr-xr-x 13 allexserv nogroup 4096 2009-05-31 14:58 phpBB3Права доступа по-умолчанию (umask)

У каждого пользователя есть umask — инвертированная битовая маска накладываемая на набор прав по умолчанию. Значение umask хранится в профиле пользователя. Узнать значение можно командой umask.

$ umask 0002

Итак, инвертированная маска = 7775, режим полного доступа для директорий — 777, для файлов — 666. Таким образом при создании файла результирующий набор бит прав доступа:

  • Для файлов 666 & !umask (7775) = 664
  • Для директорий 777 & !umask (7775) = 775

Почитать:

  • Ubuntu wiki: Права доступа Unix
  • Права
  • umask

Калькуляторы

Создание пары ключей RSA

Для того, чтобы заходить на сервер по ключу, необходимо сгенерировать пару ключей: открытую и закрытую. Открытый (или публичный) ключ мы помещаем на сервер, а закрытый хранится у нас. По этой паре мы можем осуществлять логин на сервер. На данный сервер сможет заходить тот, у кого есть вторая часть ключа.

Сгенерируем пару ключей.

ssh-keygen

Эта команда по умолчанию создать пару ключей RSA, длинной 2048 бит. Этой длинны вполне хватает по безопасности для большинства операций. Можно добавить флаг -b 4096, чтобы получить ключ длинной 4096 бит.

После выполнения этой команды, вы получите следующий вывод:

Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):

После чего можно нажать клавишу “Enter”, чтобы сохранить эту пару ключей в директорию .ssh/ внутри домашней директории, либо вы можете задать другую директорию.

Если ранее вы генерировали пару ssh-ключей, то вероятнее всего вы получите следующий вывод:

/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?

Обратите внимание, что если у вас уже есть ключ, и вы его используете, то при его перезаписи вы не сможете уже залогиниться на тот сервер, где храниться его публичная часть.

После успешной операции, вы увидите следующий вывод:

Enter passphrase (empty for no passphrase):

Таким образом вы можете задать ключевую фразу, это рекомендуется сделать. Эта фраза добавить ещё дин уровень безопасности, для предотвращения входа на сервер неавторизированных пользователей.

После этого, вы увидите следующий вывод:

Output Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_ The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 [email protected]_host The key’s randomart image is: +—[ RSA 2048]—-+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +——————+

Это говорит о том, что у вас появилась пара из открытого и закрытого ключа, которые могут быть использованы для логина на удалённый сервер. Далее необходимо скопировать открытый ключ на удалённый сервер.

Права администратора

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

usermod -a -G sudo username1

Теперь пользователь с именем username1 добавлен в группу sudo и является администратором для операционной системы. Ему доступны настройки ОС, а также доступ к каталогу /dev с вложениями. Большинство привилегий администраторов схоже с возможностями суперпользователя, но они неполные.

Как выставить запрет

В корпоративных информационных системах большинство ОС являются многопользовательскими. Соответственно, необходимо для каждого владельца разграничить права доступа. Для этого используется внутренняя команда chmod, например:

sudo chmod o-x $(which ls)>

Вышеуказанная строка означает, что только root имеет право запускать команду ls. Всем остальным в доступе будет отказано.

Разберем другую ситуацию. Есть пользователь с именем username1. Ему необходимо ограничить доступ к команде ls. Для этого создаем группу пользователей usergroup1, в которую перенесём всех кроме username1.

sudo groupadd usergroup1 sudo useradd -G usergroup1 <username2, username3>

Вторая строка добавляет в группу usergroup1 пользователей username2, username3 и т. д. Ограничим права на запуск команды ls. Её смогут активировать только участники usergroup1.

sudo chown :group2 $(which ls) sudo chmod 754 $(which ls)

Теперь неучастник usergroup1 не сможет активировать ls.

Немного о файле /etc/sudoers

Sudoers содержит информацию о пользователях, которые могут использовать утилиту sudo. Чтобы открыть файл, используем специальную утилиту visudo.

visudo /etc/sudoers

Внутри содержится следующая информация:

Скриншот №1. Содержимое sudoers

Расскажем подробнее о строке:

Скриншот №2. Задать правила

%sudo означает, что к группе sudo применяется следующее правило. Если устанавливаем правила для конкретного пользователя, то % не нужен.

Первая переменная ALL расшифровывает, как применить правило ко всем IP-адресам. Второй и третий ALL – указанный пользователь или группа имеют право исполнять команды в сессии любого пользователя или группы. Четвертая переменная означает, что данный шаблон применяется ко всем командам.

Например, необходимо установить права на запуск утилиты apt get для группы admin.

%admin ALL=(ALL)NOPASSWD:/usr/bin/apt-get

Alias (псевдонимы)

Для удобства разграничения прав доступа используются алиасы. Они объединяют один или несколько значений в один параметр. Например, присвоим IP-адресу облачного хранилища более удобное имя.

Host_Alias CLOUD =

CLOUD – псевдоним, который указывается в параметрах вместо IP-адреса.

При необходимости алиасы используются для объединения пользователей в одну группу.

User_Alias Name = user1,user2,… , где Name – псевдоним, а user1, user2 – имена пользователей. Также утилита Alias доступна и для команд, т. е. объединяем список инструкций в единую группу.

Cmnd_Alias Name = cmd1,cmd2

  • name – произвольное наименование для перечня команд;
  • cmd1, cmd2 – перечисление команд через запятую.

Например, объединим обновление пакетов в алиас:

cmnd_Alias APT = /usr/bin/apt-get update,/usr/bin/apt-get upgrade

Поделиться Оценить

Средняя оценка: 5.0 Оценили: 1220140 Минск ул. Домбровская, д. 9 +375 (173) 88-72-49

  • 700 300 ООО «ИТГЛОБАЛКОМ БЕЛ»220140 Минск ул. Домбровская, д. 9 +375 (173) 88-72-49
  • 700 300 ООО «ИТГЛОБАЛКОМ БЕЛ»
  • 700 300
  • Послесловие.

    Как-то так. Как и всегда ждем от Вас комментариев, дополнений и всего такого прочего.

    На этом мы закончим нашу очередную лекцию :). Будут и следующие, надеюсь, что интересные и захватывающие. Если есть, что дополнить (добавить), милости прошу, добавляйте в своих комментариях.

    P.S. За существование данной статьи спасибо члену команды Pantera

    Любая операционная система поддерживает несколько файловых систем, например, Windows поддерживает такие известные всем файловые системы, как FAT, FAT32, NTFS и др. Linux не исключение.

    Создание папки и просмотр сведений о её владельце, группе и правах доступа

    Создадим папку folder командой mkdir так, как описано в → этой статье. Если действовать по такой же схеме, как и описано выше, то окажется, что этого недостаточно. Будет выдана информация только о размере папки:

    [email protected]:~# ls -l folder total 0

    Поэтому с папками при просмотре сведении о ней работаем по такой схеме: смотрим информацию не об этой папке, а общую информацию о всей папке. Тогда информация о вложенных в неё файлах и папках выдаётся в полной мере:

    [email protected]:~# ls -l total 4 -rw-r—r— 1 root root 0 Apr 10 21:06 file drwxr-xr-x 2 root root 4096 Apr 10 21:18 folder

    Как отличить папку от файла в linux

    Сразу на этом примере остановлюсь на вопросе о том, как отличить папку от файла в linux. В самом начале строки в символах о правах доступа у файла первым символом идет — тогда, как у папки первый символ это буква d. Именно это отличает папку от файла.

    Биты Setuid и Setgid

    chmod очищает бит set-group-ID обычного файла, если идентификатор группы файла не совпадает с эффективным идентификатором группы пользователя или одним из идентификаторов дополнительной группы пользователя, если только у пользователя нет соответствующих привилегий. Дополнительные ограничения могут привести к игнорированию битов set-user-ID и set-group-ID в MODE или RFILE. Это поведение зависит от политики и функциональности основного системного вызова chmod. В случае сомнений проверьте поведение системы.

    chmod сохраняет биты set-user-ID и set-group-ID каталога, если вы не укажете иное. Вы можете установить или очистить биты с помощью символических режимов, таких как u + s и g-s, и вы можете установить (но не очистить) биты с помощью числового режима.

    Права пользователя на папку Linux

    Как я уже сказал, права делятся на три категории для владельца, для группы и для всех остальных. Таким образом, мы можем дать пользователю доступ к папке несколькими способами:

    • Изменить права для всех — тогда все пользователи получат доступ к нашей папке, в том числе и нужный пользователь. Но, обычно, так никто не делает, потому что это небезопасно и в производственных системах важные данные могут попасть в чужие руки;
    • Изменить владельца папки на нашего пользователя — по умолчанию владелец имеет полные права на папку, то есть запись и чтение. Если мы сделаем владельцем нашего пользователя, то он автоматически получит все права, а другие пользователи по-прежнему не смогут получить доступ к папке. Но такой вариант тоже не совсем правильный, потому что, обычно, у папки уже есть владелец и изменив владельца мы уберем у него доступ;
    • Добавить к папке группу и добавить в нее пользователя — самый верный путь. Файл или папка может принадлежать определенной группе пользователей, но только одной, и мы можем установить для этой группы отличающиеся от владельца права. Но в группу можно добавить несколько пользователей, поэтому мы никого не оставляем без доступа. По умолчанию, для всех файлов устанавливается группа владельца, но это можно очень просто изменить.

    Теперь давайте разберем как это реализуется на практике. Допустим, у нас есть папка /storage, владельцем которой является пользователь /root:

    ls -l / | grep storage

    У папки такие права, что записывать в нее данные может только root, а другие пользователи могут их только смотреть. Нам надо предоставить к ней доступ на запись и чтение пользователю sergiy. Сейчас у него такого доступа нет:

    Давайте создадим группу storage и добавим в нее пользователя sergiy:

    sudo groupadd storage sudo usermod -aG storage sergiy

    Смотрим список групп нашего пользователя:

    После добавления пользователя в группу нужно перелогиниться, чтобы система увидела это изменение. Затем меняем группу нашей папки на storage:

    sudo chgrp storage /storage

    Если нужно дать права на папку в Linux еще какому-нибудь пользователю, то достаточно добавить его в эту группу. Посмотрим список пользователей группы:

    Теперь наша папка выглядит вот так:

    ls -l / | grep storage

    Права пользователя на папку Linux

    Осталось подправить права для группы, нужно дать разрешение на чтение и запись:

    chmod g+rw /storage

    Права пользователя на папку Linux

    Затем пользователь sergiy сможет записывать и читать файлы из этой папки, а все остальные пользователи только читать.

    Читайте также:  Kali Linux — Инструменты отчетности