Командная строка Linux, права на файлы: команды id, chmod, chown
Обновлено 11.11.2024
Приветствую!
Сегодня научимся управлять правами на файлы в системах на базе Linux. В этой заметке будут рассмотрены следующие команды: id, chmod, chown. Поехали)
Присоединяйтесь к нашему каналу: t.me/r4ven_me и чату: t.me/r4ven_me_chat в Telegram .
Предисловие
Тема разграничения доступа к файлам в Linux является очень обширной. В данной статье я не ставил целью охватить ее всю, а лишь вести читателя-новичка в курс дела и продемонстрировать часто используемые инструменты. Более подробную статью по правам в Linux вы можете почитать на Habr. Ну а мы приступаем.
Часть материала (в основном таблицы с описаниями) были позаимствованы из книги “Командная строка Linux” за авторством Уильяма Шоттса.
Все примеры из этой статьи были выполнены в консоли дистрибутива Linux Mint, установку и запуск которого я подробно описывал в статье: Установка Linux рядом с Windows.
Также рекомендую к прочтению другие статьи из цикла по командной строке Linux.
О правах на файлы в Linux
В модели безопасности Unix пользователь может владеть файлами и каталогами. Если пользователь владеет файлом или каталогом, он может управлять доступом к нему. Пользователи могут также принадлежать группе, состоящей из одного или нескольких пользователей, и получить права доступа к файлам и каталогам для членов группы, которые определяются владельцами. Кроме прав доступа для группы, владелец может также определить некоторые права доступа для всех остальных, их в терминологии Unix называют мир (world).
Уильям Шоттс, “Командная строка Linux”
В Linux определяют следующие базовые права доступа к файлам и каталогам:
- права на чтение (
r
– read); - права на запись (
w
– write); - права на выполнение (
x
– execute).
Если взглянуть на вывод команды ls
с ключом -l
в директории с файлами, можно узнать текущие права на эти файлы:
ls -l
Первые 10 символов в выводе команды являются атрибутами файла.
Подробно вывод команды
ls
мы рассматривали в статье: Командная строка Linux, навигация в системе и просмотр директорий: команды pwd, ls, cd.
Эти 10 символов разбиты на блоки. Ниже на картинке представлено их описание:
Первый символ указывает тип файла. На рисунке ниже приведены часто используемые на практике типы файлов:
Оставшиеся девять символов как раз и определяют права на чтение, запись и выполнение для владельца, группы и всех остальных. Их еще называют режимами доступа.
Стоит отметить, что каждый из режимом имеет разное влияние на разные типы файлов. Ниже дано краткое описание каждому режиму в случае обычных файлов и каталогов:
А на изображении ниже представлены распространенные примеры установленных режимов с их описанием:
Список команд
Итак, сегодня наш арсенал инструментов пополнится следующими командами:
Команда | Описание |
---|---|
id | позволяет получить информацию о пользователе системы и его группах |
chmod | change mode, позволяет изменять режимы доступа к файлам |
chown | change owner, поваляет изменять владельца и группу владельцев файлов |
Команда id
– информация о пользователях и группах
Так как система прав на файлы в Linux подразумевает взаимодействие с такими сущностями, как владелец и группа владельцев, давайте изучим команду id
, с помощью которой можно получить информацию о пользователях системы и их группах.
Синтаксис:
id [ключи] [имя_пользователя]
Часто используемые ключи команды id
:
Ключ | Значение |
---|---|
-u | выводит uid указанного пользователя |
-n | выводит имя группы, вместо uid (используется совместно с -u ) |
Пример использования:
id
Когда в Linux создается учетная запись пользователя, ей присваивается идентификатор пользователя – user ID он же
uid
и идентификатор основной группы – group ID илиgid
.
Вывод команды id
без аргументов отображает uid, gid текущего пользователя, а также перечень групп, участником которых он является.
Чтобы узнать информацию о другом пользователе, необходимо передать его имя или uid в качестве аргумента:
id root
id 0
Обратите внимание, что uid пользователя root всегда равен 0
. Такая константа часто используется в скриптах для проверки, запускается ли программа от имени суперпользователя.
id -u ivan
id -nu ivan
Вся информация о пользователях и группах хранится в системных текстовых файлах:
/etc/passwd
– информация об учетных записях пользователей;/etc/group
– информация о группах;/etc/shadow
– информация о паролях пользователей.
Команда chmod
– управление атрибутами чтение/запись/исполнение
С помощью команды chmod
осуществляется управления режимами доступа к файлам в Linux.
Синтаксис команды chmod
:
chmod [ключи] режим файл
Часто используемые ключи команды chmod
:
Ключ | Значение |
---|---|
-v | выводить диагностические сообщения по каждому файлу |
-R | рекурсивно изменять файлы и каталоги |
Для практики создадим несколько файлов и каталогов:
touch text_file.txt script.sh .hidden_file.log
mkdir dir1 dir2
Команды из примера выше мы рассматривали в статье: Командная строка Linux, работа с файлами: команды touch, mkdir, cp, mv, rm.
Теперь давайте с использованием механизма перенаправления вывода наполним эти файлы какой-то информацией:
cat /etc/passwd > text_file.txt
echo "printf 'Hello R4ven'" > script.sh
history > .hidden_file.log
Подробнее про механизм перенаправления стандартных потоков мы говорили в статье: Командная строка Linux, перенаправление ввода и вывода: операторы “>”, “<“, “|”.
И скопируем пару файлов в созданные каталоги:
cp /usr/bin/ls ./dir1/
cp /usr/bin/cat ./dir2/
По умолчанию наши простые файлы имеют доступ на чтение для всех. Давайте уберем этот атрибут у файла text_file.txt
такой командой:
chmod -r text_file.txt
Без дополнительных параметров, синтаксисом -r
(отнять read) мы убираем атрибут чтения для всех: пользователя, группы и остальных.
Теперь при попытке вывести его содержимое, мы будем получать ошибку:
cat text_file.txt
Теперь давайте вернем доступ на чтение, но только для владельца файла, т.е. для нас:
chmod u+r text_file.txt
cat text_file.txt
Как вы догадываетесь символ +
подразумевает “добавить” следующий за ним атрибут r
. Перед добавляемым атрибутом мы задали параметр u
(user), указывая команде chmod
выполнить изменение режима только для владельца файла:
Ниже представлены возможные параметры команды chmod
с описанием, а также примеры возможных комбинаций атрибутов:
Теперь давайте по аналогии добавим режим исполнения для файла script.sh
только для владельца, группы владельцев и попробуем его запустить:
chmod ug+x script.sh
./script.sh
Теперь давайте уберем для всех атрибут записи со скрытого файла .hidden_file.log
и попробуем в него что-то записать. Затем вернем атрибут записи для владельца и вновь выполним запись:
chmod ugo-w .hidden_file.log
echo "TEST" > .hidden_file.log
chmod u+w .hidden_file.log
echo "TEST" > .hidden_file.log
cat .hidden_file.log
Таким образом происходит манипуляция режимами доступа. Идём дальше.
Как было указано в одной из таблиц, чтобы войти в какой-либо каталог, у него должен быть атрибут исполнения – x
. По умолчанию для каталогов данный атрибут устанавливается для всех.
Опробуем на практике ситуацию полного удаления данного атрибута у каталога dir1
:
chmod -x dir1
ls -l ./dir1
cd ./dir1
Мы не смогли прочитать содержимое данного каталога, как и перейти в него.
Чтобы вернуть доступ к каталогу:
chmod +x dir1
ls -l ./dir1
Во всех примерах до этого момента, мы рассматривали символьный вариант установки прав на файлы. Но также существует формат установки режимов доступа с помощью восьмеричной эквивалентности (цифры от 0 до 7). Данный формат также пользуется большой популярностью.
Главное, что нужно помнить:
4
– чтение (r)2
– запись (w)1
– исполнение (x)
А также суммирование этих представлений, т.е. 4+2=6 будет означать атрибут чтения и записи rw-
и так далее. Так как атрибуты имеют три группы, соответственно установка режимов может иметь вид:
775 – эквивалентно rwxrwxr-x
.
Ниже представлена эквивалентность кодов режимов в разных системах счисления:
В качестве примера предоставим полный доступ всем (rwxrwxrwx
) для каталога dir2
с помощью данного способа:
chmod 777 ./dir2
ls -l
Как видно, при открытии полного доступа к каталогу, в выводе команды ls
наш dir2
даже выделяется особым образом.
Ниже картинка из просторов, с распространенными примерами режимов доступа в восьмеричной системе для команды chmod
:
Команда chown
– назначение владельца и группы
Команда chown
используется для изменения владельца и группы файла или каталога. Важно отметить, что для использования этой команды необходимы привилегии суперпользователя.chown
может изменить владельца и/или группу файла в зависимости от первого аргумента.
Синтаксис команды chown
:
chown [ключи] [владелец][:[группа]] файл
Часто используемые ключи команды chown
:
Ключ | Значение |
---|---|
-v | выводить диагностические сообщения по каждому файлу |
-R | рекурсивно изменять файлы и каталоги |
Вот несколько примеров:
sudo touch root_owner.txt
ls -l ./root_owner.txt
Видим, что владелец и группа файла имеют значение root root
. При попытке изменить владельца НЕ от имени суперпользователя:
chown ivan:ivan root_owner.txt
ls -l ./root_owner.txt
Где
ivan
– имя моего пользователя.
Получаем ошибку. Теперь давайте всё таки укажем нового владельца:
sudo chown ivan: ./root_owner.txt
ls -l ./root_owner.txt
Если после параметра, определяющего владельца (ivan:
), после символа двоеточия явно не указать группу, то автоматически подставится группа по умолчанию указанного владельца. В данном примере это ivan:ivan
.
Ниже на изображении представлены некоторые примеры аргументов команды chown
:
Команда chgrp
В старых версиях Unix команда chown
изменяла только владельца файла, но не группу. Чтобы изменить группу, предоставлялась другая команда, chgrp
. Она действует практически так же, как chown
, но имеет больше ограничений. Её мы рассматривать не будем, просто знайте про её существование.
Выводы
Сегодня мы рассмотрели одну из важных частей операционных систем на основе Linux: управление базовым доступом к файлам или другими словами – правами на файлы. Мы с вами узнали:
- команду
id
, с помощью которой можно получить информацию о пользователях и их группах; - команду
chmod
, благодаря которой можно управлять режимами доступа к файлам в системе; - команду
chown
, которая позволяет менять/назначать владельца и группу владельцев файлов.
Старайтесь чаще практиковаться. Ведь теория без практики, все равно что CPU без RAM)
Спасибо, что читаете. Успехов вам!