Командная строка Linux, права на файлы: команды id, chmod, chown
Приветствую!

Сегодня научимся управлять правами на файлы в системах на базе Linux. В этой заметке будут рассмотрены следующие команды: id, chmod, chown. Поехали)

Предисловие

Тема разграничения доступа к файлам в Linux является очень обширной. В данной статье я не ставил целью охватить ее всю, а лишь вести читателя-новичка в курс дела и продемонстрировать часто используемые инструменты. Более подробную статью по правам в Linux вы можете почитать на Habr. Ну а мы приступаем.

О правах на файлы в Linux

В модели безопасности Unix пользователь может владеть файлами и каталогами. Если пользователь владеет файлом или каталогом, он может управлять доступом к нему. Пользователи могут также принадлежать группе, состоящей из одного или нескольких пользователей, и получить права доступа к файлам и каталогам для членов группы, которые определяются владельцами. Кроме прав доступа для группы, владелец может также определить некоторые права доступа для всех остальных, их в терминологии Unix называют мир (world).

Уильям Шоттс, «Командная строка Linux»

В Linux определяют следующие базовые права доступа к файлам и каталогам:

Если взглянуть на вывод команды ls с ключом -l в директории с файлами, можно узнать текущие права на эти файлы:

BASH
ls -l
Нажмите, чтобы развернуть и увидеть больше

Первые 10 символов в выводе команды являются атрибутами файла.

Эти 10 символов разбиты на блоки. Ниже на картинке представлено их описание:

Первый символ указывает тип файла. На рисунке ниже приведены часто используемые на практике типы файлов:

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

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

Описание режимов доступа к файлам и каталогам

А на изображении ниже представлены распространенные примеры установленных режимов с их описанием:

Список команд

Итак, сегодня наш арсенал инструментов пополнится следующими командами:

КомандаОписание
idпозволяет получить информацию о пользователе системы и его группах
chmodchange mode, позволяет изменять режимы доступа к файлам
chownchange owner, поваляет изменять владельца и группу владельцев файлов

Команда id — информация о пользователях и группах

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

Синтаксис:

BASH
id [ключи] [имя_пользователя]
Нажмите, чтобы развернуть и увидеть больше

Часто используемые ключи команды id:

КлючЗначение
-uвыводит uid указанного пользователя
-nвыводит имя группы, вместо uid (используется совместно с -u)

Пример использования:

BASH
id
Нажмите, чтобы развернуть и увидеть больше

Вывод команды id без аргументов отображает uid, gid текущего пользователя, а также перечень групп, участником которых он является.

Чтобы узнать информацию о другом пользователе, необходимо передать его имя или uid в качестве аргумента:

BASH
id root

id 0
Нажмите, чтобы развернуть и увидеть больше

Обратите внимание, что uid пользователя root всегда равен 0. Такая константа часто используется в скриптах для проверки, запускается ли программа от имени суперпользователя.

BASH
id -u ivan

id -nu ivan
Нажмите, чтобы развернуть и увидеть больше

Вся информация о пользователях и группах хранится в системных текстовых файлах:

Команда chmod — управление атрибутами чтение/запись/исполнение

С помощью команды chmod осуществляется управления режимами доступа к файлам в Linux.

Синтаксис команды chmod:

BASH
chmod [ключи] режим файл
Нажмите, чтобы развернуть и увидеть больше

Часто используемые ключи команды chmod:

КлючЗначение
-vвыводить диагностические сообщения по каждому файлу
-Rрекурсивно изменять файлы и каталоги

Для практики создадим несколько файлов и каталогов:

BASH
touch text_file.txt script.sh .hidden_file.log

mkdir dir1 dir2
Нажмите, чтобы развернуть и увидеть больше

Теперь давайте с использованием механизма перенаправления вывода наполним эти файлы какой-то информацией:

BASH
cat /etc/passwd > text_file.txt

echo "printf 'Hello R4ven'" > script.sh

history > .hidden_file.log
Нажмите, чтобы развернуть и увидеть больше

И скопируем пару файлов в созданные каталоги:

BASH
cp /usr/bin/ls ./dir1/

cp /usr/bin/cat ./dir2/
Нажмите, чтобы развернуть и увидеть больше

По умолчанию наши простые файлы имеют доступ на чтение для всех. Давайте уберем этот атрибут у файла text_file.txt такой командой:

BASH
chmod -r text_file.txt
Нажмите, чтобы развернуть и увидеть больше

Без дополнительных параметров, синтаксисом -r (отнять read) мы убираем атрибут чтения для всех: пользователя, группы и остальных.

Теперь при попытке вывести его содержимое, мы будем получать ошибку:

BASH
cat text_file.txt
Нажмите, чтобы развернуть и увидеть больше

Теперь давайте вернем доступ на чтение, но только для владельца файла, т.е. для нас:

BASH
chmod u+r text_file.txt

cat text_file.txt
Нажмите, чтобы развернуть и увидеть больше

Как вы догадываетесь символ + подразумевает «добавить» следующий за ним атрибут r. Перед добавляемым атрибутом мы задали параметр u (user), указывая команде chmod выполнить изменение режима только для владельца файла:

Ниже представлены возможные параметры команды chmod с описанием, а также примеры возможных комбинаций атрибутов:

Теперь давайте по аналогии добавим режим исполнения для файла script.sh только для владельца, группы владельцев и попробуем его запустить:

BASH
chmod ug+x script.sh

./script.sh
Нажмите, чтобы развернуть и увидеть больше

Теперь давайте уберем для всех атрибут записи со скрытого файла .hidden_file.log и попробуем в него что-то записать. Затем вернем атрибут записи для владельца и вновь выполним запись:

BASH
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:

BASH
chmod -x dir1

ls -l ./dir1

cd ./dir1
Нажмите, чтобы развернуть и увидеть больше

Мы не смогли прочитать содержимое данного каталога, как и перейти в него.

Чтобы вернуть доступ к каталогу:

BASH
chmod +x dir1

ls -l ./dir1
Нажмите, чтобы развернуть и увидеть больше

Во всех примерах до этого момента, мы рассматривали символьный вариант установки прав на файлы. Но также существует формат установки режимов доступа с помощью восьмеричной эквивалентности (цифры от 0 до 7). Данный формат также пользуется большой популярностью.

Главное, что нужно помнить:

А также суммирование этих представлений, т.е. 4+2=6 будет означать атрибут чтения и записи rw- и так далее. Так как атрибуты имеют три группы, соответственно установка режимов может иметь вид:

775 — эквивалентно rwxrwxr-x.

Ниже представлена эквивалентность кодов режимов в разных системах счисления:

В качестве примера предоставим полный доступ всем (rwxrwxrwx) для каталога dir2 с помощью данного способа:

BASH
chmod 777 ./dir2

ls -l
Нажмите, чтобы развернуть и увидеть больше

Как видно, при открытии полного доступа к каталогу, в выводе команды ls наш dir2 даже выделяется особым образом.

Ниже картинка из просторов, с распространенными примерами режимов доступа в восьмеричной системе для команды chmod:

Команда chown — назначение владельца и группы

Команда chown используется для изменения владельца и группы файла или каталога. Важно отметить, что для использования этой команды необходимы привилегии суперпользователя.
chown может изменить владельца и/или группу файла в зависимости от первого аргумента.

Синтаксис команды chown:

BASH
chown [ключи] [владелец][:[группа]] файл
Нажмите, чтобы развернуть и увидеть больше

Часто используемые ключи команды chown:

КлючЗначение
-vвыводить диагностические сообщения по каждому файлу
-Rрекурсивно изменять файлы и каталоги

Вот несколько примеров:

BASH
sudo touch root_owner.txt

ls -l ./root_owner.txt
Нажмите, чтобы развернуть и увидеть больше

Видим, что владелец и группа файла имеют значение root root. При попытке изменить владельца НЕ от имени суперпользователя:

BASH
chown ivan:ivan root_owner.txt

ls -l ./root_owner.txt
Нажмите, чтобы развернуть и увидеть больше

Где ivan — имя моего пользователя.

Получаем ошибку. Теперь давайте всё таки укажем нового владельца:

BASH
sudo chown ivan: ./root_owner.txt

ls -l ./root_owner.txt
Нажмите, чтобы развернуть и увидеть больше

Если после параметра, определяющего владельца (ivan:), после символа двоеточия явно не указать группу, то автоматически подставится группа по умолчанию указанного владельца. В данном примере это ivan:ivan.

Ниже на изображении представлены некоторые примеры аргументов команды chown:

Команда chgrp

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

Выводы

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

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

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

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

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/linux/komandnaya-stroka-linux-prava-na-fajly-komandy-id-chmod-chown/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша