В продолжение к посту [Linux.wiki] Права доступа в Ubuntu.
В том посту было больше теории, сейчас будет больше практике.
Давайте рассмотрим смену прав доступа для моего скрипта из поста [Linux.wiki] Простой мониторинг моего сервера.
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-r-xr--r-- 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
Рассмотрим блок rwxrwxrwx ещё раз. (Первый – я отброcил, он не относится к правам доступа):
rwx—— – первые три rwx это права владельца документа. Данном случае www-data.
—rwx— – второй блок rwx это права группы владеющей документом. Тоже www-data.
——rwx – третий блок rwx это права любых других пользователей.
Операционная система (ОС) понимает внутри себя не буквы rwx, а биты (0 или 1). ОС работает в бинарном виде. По этому каждый блок можно представить набором нулей/единиц (бинарном виде):
000,001,010,011,100,101,110,111 – это возможные варианты.
Такием образом мои права доступа для файла systat_myserver.sh, которые выглядят как r-xr–r– можно представить как 101100100
Кажый блок в бинарном виде можно представить в десятичном виде – одна десятичная цифра для каждого блока из трех бинарных цифр.
Например, для моего r-xr–r– = 101100100 = 544.
Например, я не могу запускать этот скрипт с такими правами.
alexander@srv-ubuntu-02:~$ ./systat_myserver.sh
-bash: ./systat_myserver.sh: Permission denied
Если я хочу сменить права доступа к данному файлу и получить возможность запускать данный скрипт, то я должен добавить (x) в третьем блоке rwx.
Таким образом последний блок превращается из 100 в 101. 101 = 5
Это можно сделать несколькими вариантами. Так как я не владелец файла, мне придётся пользоваться sudo. Например:
sudo chmod 545 systat_myserver.sh
alexander@srv-ubuntu-02:~$ sudo chmod 545 systat_myserver.sh
[sudo] password for alexander:
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-r-xr--r-x 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
alexander@srv-ubuntu-02:~$ ./systat_myserver.sh
<далее отрабатывает скрипт>
Также это можно сделать более легко с использованием ключей u,g,o:
u – user – владелец
g – group – группа
o – other – все остальные
Для того чтобы выполнить аналогичную процедуру, нужно вместо 545 ввести o+x (для того чтобы отобрать право o-x). Т.е. для o-other всех остальных добавить x-execute:
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-r-xr--r-- 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
alexander@srv-ubuntu-02:~$
alexander@srv-ubuntu-02:~$ sudo chmod o+x systat_myserver.sh
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-r-xr--r-x 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
Для смены прав в одном блоке (как в данном пример смена прав доступа для o-other) данный метод выглядит проще и логичнее – меньше вероятность совершить ошибку.
Но в случае смены смены прав доступа для двух или трёх групп и наделением их несколькими правами, символьное написание уступает цифровому.
Например, в моём случае (r-xr–r–), если я хочу добавить возможность писать и исполнять для group и для other, а для user писать:
В символьном методе придётся указать:
sudo chmod u+w,o+wx,g+wx systat_myserver.sh
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-r-xr--r-- 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
alexander@srv-ubuntu-02:~$ sudo chmod u+w,o+wx,g+wx systat_myserver.sh
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-rwxrwxrwx 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
В цифровом только:
sudo chmod 777 systat_myserver.sh
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-r-xr--r-- 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
alexander@srv-ubuntu-02:~$ sudo chmod 777 systat_myserver.sh
alexander@srv-ubuntu-02:~$ ls -l systat_myserver.sh
-rwxrwxrwx 1 www-data www-data 502 Jun 12 10:32 systat_myserver.sh
Надеюсь пост был полезен – кто-то что-то узнал, кто-то повторил.
Всем спасибо!