Очень много ошибок в тестах. Другие люди их тоже нашли. Но прошло очень много времени и похоже что ошибки не собираются исправлять. Очень обидно что на такой большой платформе такая медленная реакция. |
Linux
Права доступа в Linux
Каждый файл или папка имеют три набора по три бита в каждом. Каждый из наборов отвечает за отдельный набор пользовательских сущностей: владелец - группа владельца - все остальные
Каждый их трёх бит может иметь значение 0 или 1 и означать наличие или отсутствие прав на чтение - запись - исполнение.
Однако, с развитием системы оказалось, что этих параметров недостаточно, и ввели еще три дополнительных параметра:
- SUID - если этот бит установлен, то при выполнении программы, id пользователя, от которого она запущена заменяется на id владельца файла. Фактически, это позволяет обычным пользователям запускать программы от имени суперпользователя;
- SGID - этот флаг работает аналогичным образом, только разница в том, что пользователь считается членом группы, с которой связан файл, а не групп, к которым он действительно принадлежит. Если SGID флаг установлен на каталог, то все файлы, созданные в нем, будут связаны с группой каталога, а не пользователя. Такое поведение используется для организации общих папок;
- 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