[Video] v20.8. Изменение Права Доступа в CLI Ubuntu. Changing File Permissions.


Это восьмое видео о написании скриптов в коммандной оболочке – bash scripting.

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

Сначала я создам текстовый файл.
:~/MyTest$ touch test.txt

:~/MyTest$ ls -l
total 0
-rw-rw-r-- 1 alexander alexander 0 Nov 12 15:20 test.txt

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

Небольшое отступление. Узнать какие Права Доступа будут выданы создаваемым файлам или директориям можно с помощью команды umask.
:~/MyTest$ umask
0002

На текущий момент, на все вновь создаваемые файлы и директории будет накладываться данная маска – вычитаться (для моего пользователя она именно 0002).
Файлы создаются с Правами 666, а директории с 777, после чего на них накладывается пользовательская маска – umask.
Получается, что при создании файла test.txt из 666 вычитается 002 и получается 664, что соответствует:
6 - для пользователя (Права на Чтение из Запись);
6 - для группы (Права на Чтение из Запись);
4 - для всех остальных (Права только на Чтение).

Если сменить Umask, например, на 0026, то вновь созданный файл будет иметь другой набор Прав Доступа:
:~/MyTest$ umask 0026
:~/MyTest$ umask
0026
:~/MyTest$ touch test2.txt
:~/MyTest$ ls -l
total 0
-rw-r----- 1 alexander alexander 0 Nov 12 16:19 test2.txt

Но Права Доступа можно конечно менять и после создания файла:
Делается это с помощью команды chmod.
“chmod – change file mode bits”
Для того чтобы дать все права для всех возможных пользователей к какому-либо файлу, то есть дать права на Чтение, Запись и Исполение, нужно выполнить следующую команду:
:~/MyTest$ chmod 777 test.txt
:~/MyTest$ ls -lh test.txt
-rwxrwxrwx 1 alexander alexander 0 Nov 12 15:20 test.txt

Почему 777? Как я рассказывал в предущем видео:
Числовые значение Прав Доступа можно представить в виде чисел:
* Право на Чтение имеет числовое значение = 4
* Право на Запись = 2
* Право на Исполнение =1

Если сложить значения всех трёх возможных Прав, то получится 4+2+1= 7, есть три категории пользователей в терминалогии Прав Доступа – Владелец, Группа и Все остальные – итого 777.
Как мы видем, после исполения данной команды у файла изменились Права Доступа- теперь читать и записывать в него могут все. Доступ на исполнение тоже есть, но этот файл не содержит никакого скрипта или программы выполнить его не получится.
Также для большей наглядности – все файлы у которых я имею Право на Исполнение подсвечиваются зелёным.

Если я хочу изменить Права Доступа и разрешить всем только Читать, то я могу ввести chmod 444:
:~/MyTest$ chmod 444 test.txt
:~/MyTest$ ls -lh test.txt
-r–r–r– 1 alexander alexander 0 Nov 12 15:20 test.txt

Менять Права Доступа можно также персонально для каждого пользователя и в более наглядном виде.
Например, я хочу добавить себе право на запись для данного файла:
:~/MyTest$ chmod u+w test.txt
:~/MyTest$ ls -lh test.txt
-rw-r–r– 1 alexander alexander 0 Nov 12 15:20 test.txt

Можно пользоваться указателями:
* u user;
* g group;
* o other;
* a all (все категории);
* + дать кому-то какую-то привелегию;
* - забрать/запретить кому-то какую-то привелегию;
* r read - привелегия чтения;
* w write - привеления записи;
* x execute - привелегия исполнения.

Следовательно здеть "chmod u+w test.txt" я добавил только себе право на чтение, остальные группы я не указывал и следовательно не менял.
Иногда данный метод удобнее при добавлении индивидуального доступа, но если нужно поменять доступ нескольким группа, то проще числовой метод:
Например, я хочу дать доступ на чтение всем, гарантированно забрать доступ на запись и дать доступ на исполнение только себе:
Числовой метод:
:~/MyTest$ ls -lh test.txt
-rwxrwxrwx 1 alexander alexander 0 Nov 12 15:20 test.txt
:~/MyTest$ chmod 544 test.txt
:~/MyTest$ ls -lh test.txt
-r-xr--r-- 1 alexander alexander 0 Nov 12 15:20 test.txt

Символьный метод:
:~/MyTest$ ls -lh test.txt
-rwxrwxrwx 1 alexander alexander 0 Nov 12 15:20 test.txt
:~/MyTest$ chmod u-w,g-w,g-x,o-w,o-x test.txt
:~/MyTest$ ls -lh test.txt
-r-xr--r-- 1 alexander alexander 0 Nov 12 15:20 test.txt

chmod u-w,g-w,g-x,o-w,o-x test.txt – в данном случае набор команд такой, если изначально права не известны, то команда будет длиннее.

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

Если есть права только на Исполнение, то можно перейти в директорию, но просмотреть содержимое нельзя:
:~/MyTest$ ls -lh | grep testdir
d--x------ 2 alexander alexander 4.0K Nov 12 17:04 testdir

:~/MyTest$ ls -lh testdir
ls: cannot open directory testdir: Permission denied

:~/MyTest$ cd testdir
:~/MyTest/testdir$ ls -lh
ls: cannot open directory .: Permission denied

Если есть права только на Чтение, то можно просмотерть список имён файлов, но не более того, перейти в директорию нельзя:
:~/MyTest$ ls -lh
dr-------- 2 alexander alexander 4.0K Nov 12 17:04 testdir

:~/MyTest$ ls -lh testdir/
ls: cannot access testdir/test2.txt: Permission denied
ls: cannot access testdir/test3.txt: Permission denied
ls: cannot access testdir/test1.txt: Permission denied
total 0
-????????? ? ? ? ? ? test1.txt
-????????? ? ? ? ? ? test2.txt
-????????? ? ? ? ? ? test3.txt

:~/MyTest$ cd testdir
-bash: cd: testdir: Permission denied

На сегодня всё.
Удачи!

Sources:
youtube
http://www.opennet.ru/docs/RUS/bash_scripting_guide/bash_scripting_guide-prog.html.gz