Работа в командной оболочке bash. Права доступа

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

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


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

Давайте посмотрим на содержимое каталога, выполнив команду ls -l. Опция "l" (от "long") позволяет вывести на экран содержимое текущего каталога с отображением информации о владельце, правах на файлы и другое.

Вот, к примеру, то, что мы увидим у себя на экране:

Права доступа для владельца

Итак, посмотрим на первую колонку данных, полученных после выполнения команды ls -l. Содержимое этой колонки содержит информацию о том, что перед нами - обычный файл (символ "-") или каталог (символ "d"). Последующие буквы говорят системе о том, какие права доступа назначены файлам.

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

Символ r означает право на чтение (от слова read) этого файла. Последующий за ней, символ w, означает, что вы можете изменять или записывать (от слова write) что-либо в этот файл. Кстати, это также означает, что вы можете и удалить этот файл. И последний символ - x, означает, что вы можете запустить на выполнение (от слова execute) этот файл.

Символ "-" в любом месте означает то, что вы не имеете соответствующих прав.

Как вы видите на примере, пользователь vasya (владелец всех этих файлов и каталогов) имеет право на их чтение и запись в них какой-либо информации. А также он может запустить на выполнение скрипт archive.sh и еще что-то выполняемое с названием patch.

Вы спросите - А что же означает символ x в правах доступа на каталог?! Запомните - символ x в правах доступа на каталог, означает право на выполнение поиска в этом каталоге.

Права доступа для группы

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

Как вы видите из нашего примера, пользователи, входящие в группу users, не имеют права изменять содержимое скрипта archive.sh, а также файлов file2.txt, passwords.inf, patch и ticket.jpg. Также у них нет прав на добавление чего-либо в каталоги documents и mywork.

Зато они могут изменять файлы dest.gif и report.html, а также запускать на выполнение скрипт archive.sh и выполнять поиск в каталогах documents и mywork.

Права доступа для остальных пользователей

Последние три символа означают всех остальных пользователей. Это могут быть пользователи других групп или любой человек из любой точки мира (при назначении прав на файлы/каталоги, доступных на web-серверах или других, открытых для всех, ресурсах).

В нашем случае всем остальным пользователям предоставлена возможность выполнять скрипты archive.sh и patch, а также предоставлена возможность доступа в каталоги documents и mywork.

Команда chmod

Мы используем команду chmod (от слов change mode) для назначения и изменения прав на доступ к файлам и каталогам. Команда chmod имеет не очень много ключей, но обладает широкими возможностями в плане назначения и изменения прав доступа.

Итак, посмотрим, каков же синтаксис этой команды:

chmod кому=права файл/каталог

и, разберем, что он значит:

здесь "кому" означает список тех, кому вы назначаете права доступа. А их немного:

Символ Что означает
u Пользователь (user), который является владельцем файла
g Группа (group), которой принадлежит файл
o Остальные (other) пользователи
a Все (all) (заменяет сочетание символов ugo)

 

Думаю, что "права" вам уже знакомы - о них мы говорили чуть выше, но, позволю себе, напомнить их значение еще раз:

r Право на чтение (read) файла
w Право на запись (write) или удаление файла
x Право на выполнение (execute) или, если это относится к каталогу - на поиск в нем

 

 

Давайте рассмотрим несколько примеров, показывающих как меняются права доступа после выполнения команды chmod.

Пример 1:

Исходные права: -rwxr-xr-x patch

Команда: chmod o=r patch

Результат: -rwxr-xr-- patch

В этом примере мы назначаем остальным пользователям право на чтение файла patch. Если до выполнения команды chmod, они имели более расширенные права (в нашем случае - чтение и выполнение), то после ее применения, пользователи будут лишены их и им будут назначены новые права

Пример 2:

Исходные права: -rw-r----- passwords.inf

Команда: chmod g= passwords.inf

Результат: -rw------- passwords.inf

В этом примере мы лишаем права чтения группу, которой принадлежит файл password.inf, так как понимаем важность содержимого этого файла.

Пример 3:

Исходные права: -rw-r--r-- file2.txt

Команда: chmod go=rw file2.txt

Результат: -rw-rw-rw- file2.txt

В этом примере мы делаем доступными, для группы и остальных пользователей, права доступа, разрешающие возможность чтения и изменения файла file2.txt.

 

Я надеюсь, что на этих примерах, вы поняли как работает команда chmod. Настало время немного вас удивить. Посмотрите на следующий пример:

Мы имеем два файла, со следующими правами доступа:

-rwxr-xr-x archive.sh

-rwxr-xr-x patch

и нам необходимо лишить группу и остальных пользователей права запуска на выполнение этих файлов. Как быть?

На основе рассмотренных ранее примеров, вы можете предположить, что можно поступить следующим образом:

chmod go=r archive.sh patch

и, вы, несомненно, будете правы, но есть еще один вариант назначения прав доступа командой chmod, благодаря которому, вы увидите, что команда chmod горазда гибче в использовании. Все дело в том, что команда chmod позволяет "назначать" новые или "лишать" существующих прав при помощи знаков "+" и "-" соответственно. Вот как можно поступить в нашем с вами случае:

chmod go-x archive.sh patch

И вот, что мы имеем:

-rwxr--r-- archive.sh

-rwxr--r-- patch

Назначить остальным пользователям право изменение файлов можно таким способом:

chmod o+w archive.sh patch

В итоге, результатом наших действий будет являться следующее:

-rwxrw-rw- archive.sh

-rwxrw-rw- patch

Копирование прав доступа

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

К примеру, мы имеем файл с правами доступа, разрешающими чтение для всех и изменение только владельцу и группе:

-rw-rw-r-- dest.gif

Нам необходимо разрешить изменение файла остальным пользователям. Для этого мы поступаем следующим образом:

chmod o=u dest.gif

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

Запомните! При назначении прав доступа, вы не можете комбинировать стандартные права доступа (символы "r", "w", "x") с опциями копированием прав (символ "=").

К примеру, при выполнении команды

chmod g=wu passwords.inf

на экран будет выведено сообщение о ошибке.

Подмена идентификатора пользователя (Set UID)

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

Давайте разберем один пример, на котором мы сможем убедиться, что и с этой задачей вы сможете справиться.

В домашнем каталоге пользователя vasya находится скрипт print_users.sh, который при запуске обращается к файлу base.dat. Эти файлы имеют следующие права доступа:

-rwx-r-xr-x vasya users print_users.sh

-rw------- vasya users base.dat

необходимо обеспечить доступ пользователю andrey (входящего в группу managers) к скрипту print_users.sh, разрешив выполнение этого скрипта.

Посмотрим как Linux будет выполнять действия, которые будут совершаться при попытке пользователя andrey запустить на выполнение скрипт print_users.sh с вышеуказанными правами:

Выполняемые действия/задачи Linux определяет, что..
Andrey выполнил /home/vasya/print_users.sh Вы - пользователь andrey из группы managers.Вы попадаете в разряд "остальные пользователи", так как не входите в группу users.Вы хотите выполнить скрипт /home/vasya/print_users.shВам разрешено выполнять этот скрипт, согласно правам доступа на выполнение для "остальных пользователей".
Скрипт print_users.sh выполняется -
Скрипт запрашивает данные из /home/vasya/base.dat Вы - пользователь andrey из группы managers. Вы попадаете в разряд "остальные пользователи", так как не входите в группу users. Вы хотите прочитать данные из файла /home/vasya/base.datВам запрещено читать информацию из этого файла.

Как же быть? Скрипт запускается на выполнение, но при попытке прочитать данные из файла base.dat, останавливается с уведомлением о том, что вам запрещена такая операция.

Для решения этой проблемы пользователю vasya необходимо выполнить следующую команду:

chmod u+s print_users.sh

она означает - "Добавить возможность "подмены" идентификатора пользователя при обращении к файлу print_users.sh". Вот как будут выглядеть права доступа после выполнения chmod u+s :

-rwxsr-xr-x vasya users print_users.sh

-rw------- vasya users base.dat

 

Теперь посмотрим, как Linux будет выполнять действия, которые будут совершаться при попытке пользователя andrey снова запустить на выполнение скрипт print_users.sh:

Выполняемые действия/задачи Linux определяет, что..
Andrey выполнил /home/vasya/print_users.sh Вы - пользователь andrey из группы managers. Вы попадаете в разряд "остальные пользователи", так как не входите в группу users.Вы хотите выполнить скрипт /home/vasya/print_users.shВам разрешено выполнять этот скрипт, согласно правам доступа на выполнение для "остальных пользователей".
Скрипт print_users.sh выполняется "Подмена" идентификатора пользователя.Согласно наличию s в правах доступа, подмена идентификатора успешно произведена.Теперь вы - пользователь vasya на все время выполнения этого скрипта.
Скрипт запрашивает данные из /home/vasya/base.dat Вы - пользователь vasya.Вы хотите прочитать данные из файла /home/vasya/base.dat.Вам разрешено читать информацию из этого файла.

Как вы поняли, пользователь vasya разрешил группе и остальным пользователям выполнение скрипта print_users.sh, с последующим чтением данных из файла base.dat. Заметьте, только для этого скрипта! Выполнение других (также работающих с данными файла base.dat и не имеющих прав с возможностью "подмены" идентификатора) скриптов, не позволит прочитать/извлечь данные их файла base.dat.

При работе с командой chmod и назначении прав доступа на файлы и каталоги будьте предельно осторожны в своих действиях. Помните, что неправильно назначенные права доступа (особенно права с возможностью "подмены" идентификатора пользователя/группы) могут привести к провоцированию взлома вашей системы злоумышленниками.

 

Права доступа в цифрах

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

К примеру, вы имеете в своем распоряжении файл test.py со следующими правами доступа:

- rwx r-x r-x test.py

для того, чтобы представить эти права в "цифровом виде", поставим под каждым назначенным правом цифру "1", а там, где права отсутствуют - цифру "0".

- r w x r - x r - x test.py

111 101 101

и смотрим получившееся по следующей таблице:

Бинарное значение Значение прав доступа
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Исходя из этой таблицы, мы можем видеть, что "цифровое" представление прав доступа файла test.py: 755.

Теперь, к примеру, если мы захотим лишить права остальных пользователей на выполнение файла test.py, нам необходимо будет выполнить команду:

chmod 754 test.py

где 754 это:

7 - это права владельца файла - "rwx"

5 - права группы - "r-x"

4 - права для остальных пользователей - "r--"

Итак, мы довольно обширно рассмотрели команду chmod и возможные варианты назначения прав доступа к файлам и каталогам в системе Linux. Я надеюсь, что у вас не возникнет вопросов по этому материалу, но если вдруг они все же возникнут, то я буду рад вам помочь и подсказать.

Удачи, и доброй дороги вам, в вашем Linux-пути!