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

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

Что такое права доступа

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

С помощью разрешений можно создать надежную среду — такую, в которой никто не может поменять содержимое ваших документов или повредить системные файлы. 

Как работают права доступа

Есть 3 вида разрешений. Они определяют права пользователя на 3 действия: чтение, запись и выполнение. В Linux эти действия обозначаются вот так:

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

У каждого файла есть 3 группы пользователей, для которых можно устанавливать права доступа. 

  • owner (владелец) — отдельный человек, который владеет файлом. Обычно это тот, кто создал файл, но владельцем можно сделать и кого-то другого.
  • group (группа) — пользователи с общими заданными правами.
  • others (другие) — все остальные пользователи, не относящиеся к группе и не являющиеся владельцами. 

Как узнать разрешения файла

Чтобы посмотреть права доступа к файлу, нужно вызвать команду ls с опцией -l. Эта опция отвечает за вывода списка в длинном формате.  

l -ls <путь>

1. user@bash: ls -l /home/karpaff/linuxtutorialwork/chick.png
2. -rwxr----x 1 harry users 2.7K Jan 4 07:32 /home/karpaff/linuxtutorialwork/chick.png
3. user@bash:

В приведенном выше примере первые 10 символов вывода показывают разрешения файла. 

  • Первый символ определяет тип файла. Если первый символ — прочерк -, то это обычный файл. Если первый символ d, то это каталог.
  • Следующие 3 символа показывают разрешения для владельца. Буква означает наличие разрешения, а прочерк - — его отсутствие. В нашем примере у владельца есть все разрешения (чтение, запись и выполнение).
  • Следующие 3 символа показывают разрешения для группы. В этом примере у членов группы есть разрешение на чтение, но нет разрешений на запись и выполнение. Обратите внимание, порядок записи разрешений всегда такой: чтение, запись, выполнение. 
  • Последние 3 символа показывают разрешения для всех остальных пользователей. В этом примере у них есть только разрешение на выполнение.

Как изменить права доступа

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

chmod [разрешение] [путь]

Аргументы команды chmod, отвечающие за разрешение, состоят из 3 компонентов:

  • Для кого мы меняем разрешение? Обозначается первыми буквами слов: [ugoa] — user (пользователь, он же владелец), group (группа), others (другие), all (все). 
  • Мы предоставляет или отзываем разрешения? Обозначается плюсом +, если предоставляем, минусом -, если отзываем. 
  • Какое разрешение мы хотим изменить? Чтение (r), запись (w), выполнение (x). 

Разберем на примере. Давайте дадим группе разрешение на выполнение, а затем отзовем разрешение на запись для владельца.

1. user@bash: ls -l chick.png
2. -rwxr ---- x 1 harry users 2.7K 4 янв 07:32 chick.png
3. user@bash:
4. user@bash: chmod g + x chick.png
5. user@bash: ls -l chick.png
6. -rwxr-x - x 1 harry users 2.7K 4 янв 07:32 chick.png
7. user@bash:
8. user@bash: chmod uw chick.png
9. user@bash: ls -l chick.png
10. -r-xr-x - x 1 harry users 2.7K 4 янв 07:32 chick.png
11. user@bash:

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

1. user@bash: ls -l chick.png
2. -rwxr ---- x 1 harry users 2.7K Jan 4 07:32 chick.png
3. user@bash:
4. user@bash: chmod g + wx chick.png
5. user@bash: ls -l chick.png
6. -rwxrwx - x 1 harry users 2.7K Jan 4 07:32 chick.png
7. user@bash:
8. user@bash: chmod go-x chick.png
9. user@bash: ls -l chick.png
10. -rwxrw ---- 1 harry users 2,7K Jan 4 07:32 chick.png
11. user@bash:

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

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

Короткая форма записи прав

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

Вспомним восьмеричную систему

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

Мы используем десятичную систему счисления, в которой 10 цифр: от 0 до 9. Еще есть восьмеричная система счисления, в которой используется 8 цифр: от 0 до 7. 

Разрешений — 3 вида, каждый кодируется 1 (разрешение есть) или 0 (разрешения нет). Поэтому для кодирования всех разрешений требуется 23 = 8 комбинаций. Соответственно, для записи каждого разрешения используется восьмеричная система счислений. Числа восьмеричной системы счисления можно представить в двоичной системе, в которой всего две цифры: 0 и 1. Вот, как восьмеричные числа выглядят в двоичной с. с.

Восьмеричная

Двоичная

0

0 0 0

1

0 0 1

2

0 1 0

3

0 1 1

4

1 0 0

5

1 0 1

6

1 1 0

7

1 1 1

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

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

Запись 755 означает:

  • у владельца — все права;
  • у группы — нет только права на запись;
  • у остальных — нет только права на запись.

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

1. user@bash: ls -l chick.png
2. -rw-r----x 1 harry users 2.7K Jan 4 07:32 chick.png
3. user@bash:
4. user@bash: chmod 751 chick.png
5. user@bash: ls -l chick.png
6. -rwxr-x--x 1 harry users 2.7K Jan 4 07:32 chick.png
7. user@bash:
8. user@bash: chmod 240 chick.png
9. user@bash: ls -l chick.png
10. --w-r----- 1 harry users 2.7K Jan 4 07:32 chick.png
11. user@bash:

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

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

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

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

  • r — право просматривать содержимое каталоги, т. е. можно выполнить команду ls;
  • w — право записывать данные в каталог, т. е. создавать файлы и подкаталоги;
  • x — право зайти в каталог, т. е. выполнить команду cd. 

Разберем разрешения каталогов. 

1. user@bash: ls testdir
2. file1 file2 file3
3. user@bash:
4. user@bash: chmod 400 testdir
5. user@bash: ls -ld testdir
6. dr-------- 1 karpaff users 2.7K Jan 4 07:32 testdir
7. user@bash:
8. user@bash: cd testdir
9. cd: testdir: Permission denied
10. user@bash: ls testdir
11. file1 file2 file3
12. user@bash:
13. user@bash: chmod 100 testdir
14. user@bash: ls -ld testdir
15. ---x------ 1 karpaff users 2.7K Jan 4 07:32 testdir
16. user@bash:
17. user@bash: ls testdir
18. user@bash: cd testdir
19. user@bash: pwd
20. /home/karpaff/testdir
21. ls: cannot open directory testdir/: Permission denied
22. user@bash:

Обратите внимание, что в строках 5 и 14 при вызове команды ls мы указали параметр -d (от англ. directory). Так мы указываем, что работаем именно с каталогом. 

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

1. user@bash: ls -ld testdir
2. --x------- 1 karpaff users 2.7K Jan 4 07:32 testdir
3. user@bash:
4. user@bash: cd testdir
5. user@bash:
6. user@bash: ls
7. ls: cannot open directory .: Permission denie
8. user@bash:
9. user@bash: cat samplefile.txt
10. Andrew 20
11. Dmitry  11
12. Maria 37
13. user@bash:

Кто такой пользователь root

В системе Linux обычно только 2 человека могут изменять права доступа к файлу или каталогу: владелец файла или каталога и пользователь root — суперпользователь.

Пользователь root — это пользователь с административным доступом к вашей системе. Иначе говоря, у него есть права делать все что угодно. 

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

Как разрешения обеспечивают безопасность

Домашний каталог — ваше личное пространство в системе. Чтобы оно так и оставалось личным, нужно обеспечить его безопасность. В этом помогут права доступа. 

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

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

Что нужно запомнить

Команды

chmod 
Изменить права доступа для файла или каталога. 

ls -ld
Посмотреть права доступа для определенного каталога.

Шпаргалка по короткой записи 

двоичная

восьмеричная

символьная

права на файл

права на каталог

000

0

---

нет

нет

001

1

--x

выполнение

чтение файлов и их свойств

010

2

-w-

запись

нет

011

3

-wx

запись и выполнение

всё, кроме чтения списка файлов

100

4

r--

чтение

чтение имён файлов

101

5

r-x

чтение и выполнение

доступ на чтение

110

6

rw-

чтение и запись

чтение имён файлов

111

7

rwx

все права

все права

Практические задания

  • Изучите разрешения вашего домашнего каталога, а затем посмотрите на права доступа к различным файлам в нем.
  • Войдите в каталог linuxtutorialwork и измените права доступа к некоторым файлам в нем. Попробуйте использовать как сокращенную, так и полную форму для установки разрешений. Попробуйте удалить разрешение на чтение файла, а затем попытайтесь открыть его. Или удалите разрешение на запись, а затем откройте его в Vi.
  • Поэкспериментируйте с каталогами. Создайте каталог и поместите в него несколько файлов. Попробуйте удалить различные права доступа для себя в этом каталоге и посмотреть, что вы можете, а что — нет. 
  • Посмотрите, какие разрешения установлены для файлов в других системных каталогах, таких как /etc и /bin.
codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©