Командная строка Linux, права на файлы: команды id, chmod, chown

Командная строка Linux, права на файлы: команды id, chmod, chown

Приветствую!

Сегодня научимся управлять правами на файлы в системах на базе 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позволяет получить информацию о пользователе системы и его группах
chmodchange mode, позволяет изменять режимы доступа к файлам
chownchange 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 с описанием, а также примеры возможных комбинаций атрибутов:

Описание параметров 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:

Популярные примеры восьмеричных кодов 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:

Примеры аргументов chown

Команда chgrp

В старых версиях Unix команда chown изменяла только владельца файла, но не группу. Чтобы изменить группу, предоставлялась другая команда, chgrp. Она действует практически так же, как chown, но имеет больше ограничений. Её мы рассматривать не будем, просто знайте про её существование.

Выводы

Сегодня мы рассмотрели одну из важных частей операционных систем на основе Linux: управление базовым доступом к файлам или другими словами – правами на файлы. Мы с вами узнали:

  • команду id, с помощью которой можно получить информацию о пользователях и их группах;
  • команду chmod, благодаря которой можно управлять режимами доступа к файлам в системе;
  • команду chown, которая позволяет менять/назначать владельца и группу владельцев файлов.

Старайтесь чаще практиковаться. Ведь теория без практики, все равно что CPU без RAM)

Спасибо, что читаете. Успехов вам!

Полезные источники

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии