Опубликован: 18.04.2021 | Доступ: свободный | Студентов: 1022 / 535 | Длительность: 04:36:00
Лекция 2:

Linux

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Права доступа в Linux

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

Каждый их трёх бит может иметь значение 0 или 1 и означать наличие или отсутствие прав на чтение - запись - исполнение.

Однако, с развитием системы оказалось, что этих параметров недостаточно, и ввели еще три дополнительных параметра:

  1. SUID - если этот бит установлен, то при выполнении программы, id пользователя, от которого она запущена заменяется на id владельца файла. Фактически, это позволяет обычным пользователям запускать программы от имени суперпользователя;
  2. SGID - этот флаг работает аналогичным образом, только разница в том, что пользователь считается членом группы, с которой связан файл, а не групп, к которым он действительно принадлежит. Если SGID флаг установлен на каталог, то все файлы, созданные в нем, будут связаны с группой каталога, а не пользователя. Такое поведение используется для организации общих папок;
  3. Sticky-bit - этот бит тоже используется для создания общих папок. Если он установлен, то пользователи могут только создавать, читать и выполнять файлы, но не могут удалять файлы, принадлежащие другим пользователям. К примеру его можно видеть на стандартной папке /tmp в системе.

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

[root@li2155-195 ~]# ls -lha /
total 68K
dr-xr-xr-x. 18 root root 4.0K Aug 10 20:34 .
dr-xr-xr-x. 18 root root 4.0K Aug 10 20:34 ..
lrwxrwxrwx.  1 root root    7 May 11  2019 bin -> usr/bin
dr-xr-xr-x.  5 root root 4.0K Aug 27 11:32 boot
drwxr-xr-x. 18 root root 2.9K Aug 27 11:31 dev
drwxr-xr-x. 80 root root 4.0K Aug 27 11:31 etc
drwxr-xr-x.  2 root root 4.0K May 11  2019 home
lrwxrwxrwx.  1 root root    7 May 11  2019 lib -> usr/lib
lrwxrwxrwx.  1 root root    9 May 11  2019 lib64 -> usr/lib64
drwx------.  2 root root  16K Aug 10 20:27 lost+found
drwxr-xr-x.  2 root root 4.0K May 11  2019 media
drwxr-xr-x.  2 root root 4.0K May 11  2019 mnt
drwxr-xr-x.  2 root root 4.0K May 11  2019 opt
dr-xr-xr-x. 95 root root    0 Aug 27 11:31 proc
dr-xr-x---.  4 root root 4.0K Aug 28 23:34 root
drwxr-xr-x. 23 root root  660 Aug 27 11:31 run
lrwxrwxrwx.  1 root root    8 May 11  2019 sbin -> usr/sbin
drwxr-xr-x.  2 root root 4.0K May 11  2019 srv
dr-xr-xr-x. 13 root root    0 Aug 27 11:31 sys
drwxrwxrwt.  7 root root 4.0K Aug 28 21:09 tmp
drwxr-xr-x. 12 root root 4.0K Aug 10 20:28 usr
drwxr-xr-x. 20 root root 4.0K Aug 27 11:31 var

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

  • -- (0) - нет прав на файл

    [root@li2155-195 .temp]# chmod 000 00_no_permissions
    [root@li2155-195 .temp]# ls -lha 00_no_permissions
    ----------. 1 root root 0 Aug 28 23:54 00_no_permissions
  • r-- (4) - права только на чтение

    [root@li2155-195 .temp]# chmod 400 01_read_only
    [root@li2155-195 .temp]# ls -lha 01_read_only
    -r--------. 1 root root 0 Aug 28 23:55 01_read_only
  • w-(2) - права только на запись

    '[root@li2155-195 .temp]# chmod 200 02_write_only
    [root@li2155-195 .temp]# ls -lha 02_write_only
    --w-------. 1 root root 0 Aug 28 23:55 02_write_only'
  • -x (1) - права только на исполнение

    [root@li2155-195 .temp]# chmod 100 03_execute_only[root@li2155-195 .temp]# ls -lha 03_execute_only
    ---x------. 1 root root 0 Aug 28 23:55 03_execute_only
  • rw- (6) - права на чтение и на запись

    [root@li2155-195 .temp]# chmod 600 04_read_write
    [root@li2155-195 .temp]# ls -lha 04_read_write
    -rw-------. 1 root root 0 Aug 28 23:55 04_read_write
  • r-w (5) - права на чтение и на исполнение

    [root@li2155-195 .temp]# chmod 500 05_read_execute
    [root@li2155-195 .temp]# ls -lha 05_read_execute
    -r-x------. 1 root root    0 Aug 28 23:55 05_read_execute
  • wx (3) - права на запись и на исполнение

    [root@li2155-195 .temp]# chmod 300 06_write_execute
    [root@li2155-195 .temp]# ls -lha 06_write_execute
    --wx------. 1 root root    0 Aug 28 23:56 06_write_execute
  • rwx (7) - права на чтение, запись и исполнение

    '[root@li2155-195 .temp]# chmod 300 07_read_write_execute
    [root@li2155-195 .temp]# ls -lha 07_read_write_execute
    -rwx------. 1 root root    0 Aug 28 23:57 07_read_write_execute'
  • -S - установлен SUID или SGID биты.

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

[root@li2155-195 .temp]# chmod 4700 08_suid_bit
[root@li2155-195 .temp]# ls -lha 08_suid_bit
-rws------. 1 root root    0 Aug 28 23:59 08_suid_bit

Для установки SGID бита, требуется поставить значение 2.

[root@li2155-195 .temp]# chmod 2700 09_sgid_bit
[root@li2155-195 .temp]# ls -lha 09_sgid_bit
-rwx--S---. 1 root root    0 Aug 29 00:00 09_sgid_bit
А для установки SUID и SGID бит одновременно - 4+2=6
[root@li2155-195 .temp]# chmod 6700 10_sgid_suid_bits
[root@li2155-195 .temp]# ls -lha 10_sgid_suid_bits
-rws--S---. 1 root root    0 Aug 29 00:00 10_sgid_suid_bits
  • -t - установлен sticky бит

Sticky-bit устанавливается аналогично SUID и SGID битам, и его значение равно 1

'[root@li2155-195 .temp]# chmod 1700 11_sticky_bit
[root@li2155-195 .temp]# ls -lha 11_sticky_bit
-rwx-----T. 1 root root    0 Aug 29 00:00 11_sticky_bit'

В целом картина будет выглядеть следующим образом

'[root@li2155-195 .temp]# ls -lh
total 0
----------. 1 root root 0 Aug 28 23:54 00_no_permissions
-r--------. 1 root root 0 Aug 28 23:55 01_read_only
--w-------. 1 root root 0 Aug 28 23:55 02_write_only
---x------. 1 root root 0 Aug 28 23:55 03_execute_only
-rw-------. 1 root root 0 Aug 28 23:55 04_read_write
-r-x------. 1 root root 0 Aug 28 23:55 05_read_execute
--wx------. 1 root root 0 Aug 28 23:56 06_write_execute
-rwx------. 1 root root 0 Aug 28 23:57 07_read_write_execute
-rws------. 1 root root 0 Aug 28 23:59 08_suid_bit
-rwx--S---. 1 root root 0 Aug 29 00:00 09_sgid_bit
-rws--S---. 1 root root 0 Aug 29 00:00 10_sgid_suid_bits
-rwx-----T. 1 root root 0 Aug 29 00:00 11_sticky_bit'

Так же установка прав доступна в буквенном исполнении, давайте быстро рассмотрим как это выглядит.

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

Категорий соответственно бывает три (в литералах):

  • u - владелец файла
  • g - группа файла
  • o - все остальные
  • a - all, применить ко всем сразу

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

Разрешения в литералах:

  • r - чтение
  • w - запись
  • x - исполнение
  • s - suid/sgid в зависимости от применения
  • t - sticky bit

Примеры эквивалентных команд (предполагаем что по умолчанию файл создан с нулевыми правами):

chmod 000 00_no_permissions     #или chmod ugo-rwx 00_no_permissions
chmod 400 01_read_only          #или chmod u+r 01_read_only
chmod 200 02_write_only         #или chmod u+w 02_write_only
chmod 100 03_execute_only       #или chmod u+x 03_execute_only
chmod 600 04_read_write         #или chmod u+rw 04_read_write
chmod 500 05_read_execute       #или chmod u+rw 05_read_execute
chmod 300 06_write_execute      #или chmod u+wx 06_write_execute
chmod 700 07_read_write_execute #или chmod u+rwx 07_read_write_execute
chmod 4700 08_suid_bit          #или chmod u+rws 08_suid_bit
chmod 2700 09_sgid_bit          #или chmod u+rwx,g+s 09_sgid_bit
chmod 6700 10_sgid_suid_bits    #или chmod u+rws,g+s 10_sgid_suid_bits
chmod 1700 11_sticky_bit        #или chmod u+rwxt 11_sticky_bit
Владельцы файлов в Linux

У файла есть владелец и группа файла. Узнать можно всё так же с помощью команды ls -l.

Изменяется всё достаточно просто с помощью команды chown [options] [user][:group] file_path

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Рустам Тагаев
Рустам Тагаев

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