Права за достъп
0. Права за достъп - въведение
Промяна собственика на файл/директория. Команда chown.
Промяна на групата на принадлежност на файл/директория. Команда chgrp
Промяна на собствеността на директория и нейното съдържание. Команди chown/chgrp –R
Едновременна смяна на собственика и групата. Команда chown
2. Управление на достъпа до файловете
Права за достъп до файловете – въведение
Права за достъп до директориите – въведение
Права за достъп за различни потребители и групи
Запазване на правата при копиране на файл
Промяна на правата на файлове и директории: chmode
Ø Рекурсивно променяне на правата на директория и нейното съдържание
Специални права за директория - ‘Sticky’
Специални права за директория - setgid
Подразбиращи се права – команда umask
Unix/Linux системата е многопотребителска (multi-user) - много потребители работята със системата в един и същи момент. Това налага на само защита на системните файлове (осигуряване на работоспособността на системата) но и защита на потребителите един от друг.
Всеки файл/директория има собственик и принадлежи на група от потребители, съответно притежава три вида права за достъп:
За всеки от тези три вида потребители съществуват три различни права за достъп:
За да се видят правата за достъп( permissions) може да се използва команда ls -l . Първата част от изхода на командата ги показва във вида:
Например за правата за достъп към командата bash, която се намира в директорията /bin
$ls -l /bin/bash
-rwxr-xr-x 1 root root 1183448 juin 18 2020 /bin/bash
Промяната на принадлежността може да се извършва от superuser.
Пример:
$sudo chown test1 exemple.txt exemple2.txt
Файловете exemple.txt и exemple2.txt стават собственост на потребителя test1.
$ls –l exemple.txt exemple2.txt
Може с една команда да се сменя собственика на произволно количество файлове и директории. Разделител- празен интервал.
Промяната на принадлежността може да се извършва само от superuser.
Пример:
$sudo chgrp test1 exemple.txt exemple2.txt
Файловете exemple.txt и exemple2.txt стават собственост на гупата test1.
Може с една команда да се сменя групата на произволно количество файлове и директории. Разделител- празен интервал.
Промяната на групата може да се извършва от superuser.
Промяната на групата може да се извършва и от собственика на файла, но само към група, на която той принадлежи.
Опцията -R се приема от двете команди и означава да се извърши рекурсивно за всички файлове и поддиректории на директорията.
Например за смяна на груповата принадлежност на директорията shared-directory, на нейното съдържание и рекурсивно на всички нейни поддиректории към група staff:
$sudo chgrp -R staff shared-directory
Промяната може да се извърши от superuser (винаги) или от собственика на директорията и нейното съдържание ( ако принадлежи към групата staff).
За смяна на собственика на директорията /usr/local/share/misc/ на нейното съдържание и рекурсивно на всички нейни поддиректории (само от superuser):
$sudo chown -R root /usr/local/share/misc/
Командата chown позволява едновременната смяна на собственика и групата.
$sudo chown aaronc:www-docs public_html/interesting.html
Сменя собственика на aaronc а групата – на www-docs.
Двете точки в командата могат да бъдат заместени с точка:
$sudo chown aaronc.www-docs public_html/interesting.html
Опцията -R при директория осигурява по същия начин рекурсивна промяна(на собственика и групата) на съдържанието на директорията и на поддиректориите.
Ако бъде зададено само името на собственика ( с точка или двоеточие и интервал) то името на групата се сменя с първоначалната група на потребителя (обикновено със същото име)
$sudo chown ivan. test.txt
Ако бъде зададено само името на групата(името на собственика се замести с интервал) се сменя само името на групата, собственика се запазва:
$sudo chown :ivan test.txt
Три вида права за достъп задаващи действията, които могат да се извършва с файла, като всеки вид се отбелязва с буква.
Право |
буква |
Описание |
Read |
r |
Право за четене на данните във файла |
Write |
w |
Право за писане изтриване и промяна на данните във файла |
Execute |
x |
Право за изпълнение (файлът е програма и може да бъде изпълнен) |
Правата за достъп често се наричат 'permission bits'.
Ако някой файл е скрипт, за да може да бъде изпълнен са необходими wx права за скриптовия интерпретатор, който се изпълнява с правата на извикалия го потребител.
Правата r w и x се използват и при директории с малко по различно значение:
Право |
буква |
Описание |
Read |
r |
Право за прочитане на съдържанието на директория |
Write |
w |
Право за създаване на нови файлове или поддиректории |
Execute |
x |
Право преминаване към директорията (или за нейното използване като междинна част от path към файл) |
Правата r и x за директории на практика вървят винаги заедно.
Всеки файл или директория има собственик и групов собственик. Правата r, w, x се специфицират поотделно за собственика, за груповия собственик и за всички останали. Собственикът, груповият собственик и съответните права за тях и за всички останали се извеждат с команда ls -l. При пълни права се виждат буквите rwx, за всяка от трите групи. Ако за някоя от тях някое право отсъства то се заменя с тире (-).
По подразбиране командата cp не запазва правата на оригиналния в копирания файл (както и други параметри като времеви маркери).
За да бъдат запазени правата и времето за последна промяна се използва опция –p:
$cp -p important.txt important.txt.orig
Опцията -a задава опит за запазване на всички възможни параметри (без собственика и групата) включително правата и датата на промяна:
$cp -a important.txt important.txt.orig
Правата могат да бъдат променяни от притежателя на файла/директорията или от superuser.
Опциите на командата chmode задават новите права, а аргументите – файловете за които се отнасят. Следният прост пример:
$ chmod a+x new-program
добавя (+) право за изпълнение (x) за всички потребители (a) на файла new-program.
Правата могат да бъдат задавани с букви в следния формат:
[ugoa][+=-][rwxX]
Опции |
Значение |
u |
собственик |
g |
група |
o |
останалите |
a |
всички (също като ugo) |
x |
право за изпълнение |
w |
право за писане |
r |
право за четене |
X |
Опция x но само за директории и |
+ |
добавяне на право |
- |
премахване на право |
= |
задаване на права |
Създаване на няколко празни файла:
$ touch file1 file2 file3 file4
$ ls -l
total 0
-rw-r--r-- 1 test test 0 May 1 17:16file1
-rw-r--r-- 1 test test 0 May 1 17:16file2
-rw-r--r-- 1 test test 0 May 1 17:16file3
-rw-r--r-- 1 test test 0 May 1 17:16file4
Добавяне на право на изпълнение на собственика:
$ chmod u+x file1
$ ls -l file1
-rwxr--r-- 1 test test 0 May 1 17:16file1
Добавяне на права за писане и изпълнение за всички останали (без собственика и групата):
$ chmod o+wx file2
$ ls -l file2
-rw-r--rwx 1 test test 0 May 1 17:16file2
Премахване на правото на групата за четене ( read) :
$ chmod g-r file3
$ ls -l file3
-rw----r-- 1 test test 0 May 1 17:16file3
Добавяне на права за писане и изпълнение на всички :
$ chmod ugo+rwx file4
$ ls -l file4
-rwxrwxrwx 1 test test 0 May 1 17:16file4
Задаване на права за четене и изпълнение на всички останали (без собственика и групата)
$ chmod o=rx file2
$ ls -l file2
-rw-r—r-x 1 test test 0 May 1 17:16file2
Добавяне на право на изпълнение на собственика и групата и премахване правото за четене на групата:
$chmod ug+x,g-r file4
Правата се задават с 3 цифри – първата се отнася за собственика, втората – за групата, а третата – за всички останали.
Цифрите задават правата по следния начин:
1 |
execute |
2 |
write |
4 |
read |
Когато трябва да бъде зададено повече от едно право – съответната цифра е сума от цифрите задаващи отделните права.
Например, ако трябва да бъдат зададени права -rw-r--rwx то съответните цифри са:
Owner |
Group |
Other |
read & write |
read |
read, write & execute |
4+2=6 |
4 |
4+2+1=7 |
или командата придобива вида:
$ chmod 647 filename
Повторете горните примери с цифри.
Командатa chmod с рекурсивната опция –R променя правата на директорията и рекурсивно на всички файлове и поддиректории
Така например
$ chmod -R g+rwx,o+rx public-directory
· дава rwx права за директорията public-directory на групата и rx права на всички останали
· и рекурсивно на всички поддиректории
· и на всички изпълними файлове в тях
· включените в директорията и поддиректориите неизпълними файлове получават rw права за групата и r права за всички останали.
Внимание- синтаксиса на командата крие опасност, ако се въведе излишен интервал в пътя на променяната директория. Обърнете внимание на погрешно въведения интервал след /
$ chmod -R a+rw / home/test
Използва се за директория /tmp - всеки може да създава файл в нея, но само собственикът на файла и root могат да го променят или премахват.
Задава се с опция +t:
$ sudo mkdir /temp_ex
$ sudo chmod 777 /temp_ex
$sudo chmod +t /temp_ex/
$ls -ld /temp_ex
drwxrwxrwt 2 root root 4096 мар 15 10:07
/temp_ex/
Обозначава се с t в изхода на командата ls -l
Ако една директория е setgid (‘set group-id’), създадените файлове в нея получават груповите права на директорията (а не груповите права на създателя на файла), а директориите – груповите права и setgid. Полезна опция, когато група потребители работят в споделена директория.
Задава се с
$sudo chmod g+s /data/projects
Показва се с s в груповата позиция на листинга:
$ ls -l -d /data/projects
drwxrwsr-x 16 root staff 4096 Oct 19 13:14 /data/projects
Опцията -d означава "don't list files in the directory, just list the directory itself"
Командата umask позволява да се зададе с какви права да се създават новите файлове.
Правата се задават с цифри и указват правата, които няма да се дават на новите файлове и директории.
Например:
$ umask 002
създава файлове и директории, с всички права без право за писане от други потребители.
$ umask 022
получават всички права без право за писане на групата и други потребители
$ umask 027
не разрешава писане от групата и забранява всичко за всички останали.
Тези права са в сила до нов login. Ако трябва да се запазят за постоянно командата трябва да се вкара във файл, който се изпълнява при login или при стартиране на CLI - например в ~/.bashrc
Правата които се разрешават за новите фалове могат да се задават и със символи
r : read
w : write
x : execute
u : User ownership (user who owns the file)
g : group ownership (the permissions granted to other users who are
members of the file’s group)
o : other ownership (the permissions granted to users that are in
neither of the two preceding categories)
Следващата команда
$ umask u=rwx,g=,o=
ще направи umask 077 :
$ umask u=rwx,g=,o=
$ mkdir dir2
$ touch file2
$ ls -ld dir2 file2
Примери:
If umask value set to | User permission | Group permission | Others permission |
000 | all | all | all |
007 | all | all | none |
027 | all | read / execute | none |
Внимание: командата umask може да ограничи, но не може да разшири пподразбиращите се права на файл създаван от програма. Това може да стане с команда chmod