Како користити команду цхмод на Линуку

Управљање приступом фајловима, претраживањем директоријума и извршавањем скрипти на Линук системима постиже се помоћу команде `chmod`. Ова команда служи за модификацију дозвола над фајловима и директоријумима. Иако се на први поглед може чинити сложеном, у стварности је прилично једноставна за коришћење када разумете њен начин рада.

`chmod` – Измена дозвола над фајловима

У Линук оперативном систему, контрола над тим ко може да обавља одређене радње над фајлом или директоријумом заснива се на скуповима дозвола. Постоје три основна скупа дозвола: један за власника фајла, други за чланове групе којој фајл припада и трећи за све остале кориснике.

Дозволе контролишу које акције могу бити изведене над одређеним фајлом или директоријумом. Оне омогућавају или спречавају читање, модификацију или извршавање фајла (ако је у питању скрипта или програм). За директоријуме, дозволе дефинишу ко може приступити директоријуму и ко може креирати или мењати фајлове унутар њега.

Команда `chmod` се користи за подешавање сваке од ових дозвола. За приказ тренутних дозвола над фајлом или директоријумом, користи се команда `ls`.

Анализа и разумевање дозвола над фајловима

За приказ дозвола над фајловима и директоријумима, `ls` команда се користи са опцијом `-l` (дуги формат).

ls -l

У сваком реду излаза, први знак означава тип уноса. Цртица (-) означава да се ради о обичном фајлу, док слово ‘d’ означава директоријум.

Следећих девет знакова представљају подешавања за три скупа дозвола.

Прва три знака дефинишу дозволе за власника фајла (корисничке дозволе). Средња три знака представљају дозволе за чланове групе којој фајл припада (групне дозволе). Последња три знака дефинишу дозволе за све остале кориснике (друге дозволе).

У сваком скупу дозвола, постоје три позиције знакова. Ти знакови представљају присуство или одсуство одређене дозволе. Могу бити представљени цртицом (-) или словом. Цртица означава да дозвола није одобрена, док слова ‘r’, ‘w’ или ‘x’ означавају да је дозвола дата.

Слова имају следеће значење:

‘r’: дозвола за читање – омогућава отварање и преглед садржаја фајла.
‘w’: дозвола за писање – омогућава уређивање, промену и брисање фајла.
‘x’: дозвола за извршавање – омогућава покретање (извршавање) фајла, ако се ради о скрипти или програму.

На пример:

`—` означава да ни једна дозвола није одобрена.
`rwx` означава да су све дозволе (читање, писање и извршавање) одобрене.

На снимку екрана, први ред почиње са словом ‘d’, што указује на директоријум под именом „архива“. Власник овог директоријума је корисник „dave“, а група којој директоријум припада се такође зове „dave“.

Следећа три знака, `rwx`, представљају корисничке дозволе за овај директоријум, што значи да власник има пуне дозволе – може читати, писати и извршавати.

Други сет од три карактера, `r-x`, представља групне дозволе, што значи да чланови „dave“ групе имају дозволе за читање и извршавање. То им омогућава да виде садржај директоријума и уђу у њега, али не и да креирају, мењају или бришу фајлове.

Последњи сет од три знака, `r-x`, представља дозволе за све остале кориснике који нису обухваћени прва два скупа, који имају дозволе за читање и извршавање овог директоријума.

Укратко, чланови групе и остали корисници имају дозволе за читање и извршавање, док власник, корисник „dave“, има и дозволе за писање.

За све остале фајлове (осим скрипте „mh.sh“), корисник „dave“ и чланови „dave“ групе имају дозволе за читање и писање, док остали корисници имају само дозволу за читање.

Код скрипте „mh.sh“, власник „dave“ и чланови групе имају дозволе за читање, писање и извршавање, док остали корисници имају дозволе за читање и извршавање.

Синтакса подешавања дозвола

За коришћење `chmod` команде за подешавање дозвола, морамо дефинисати:

Коме: Коме се подешавају дозволе.
Шта: Какву промену вршимо (додавање или уклањање дозволе)?
Коју: Коју конкретну дозволу подешавамо?

Користимо посебне индикаторе за представљање ових вредности, формирајући кратке „изјаве о дозволама“, попут `u+x`, где `u` означава „корисник“ (ко), `+` означава „додавање“ (шта), а `x` означава дозволу за „извршавање“ (коју).

Вредности за „ко“ могу бити:

`u`: Корисник (власник фајла).
`g`: Група (чланови групе којој фајл припада).
`o`: Остали (корисници који нису обухваћени ‘u’ и ‘g’ категоријама).
`a`: Сви (све претходно наведене категорије).

Ако се ни једна од ових вредности не користи, `chmod` се понаша као да је коришћено `a`.

Вредности за „шта“ могу бити:

`-`: Минус знак – уклањање дозволе.
`+`: Плус знак – додељивање дозволе (додаје се постојећим дозволама).
`=`: Знак једнакости – подешавање дозволе и уклањање осталих.

Вредности за „коју“ могу бити:

`r`: Дозвола за читање.
`w`: Дозвола за писање.
`x`: Дозвола за извршавање.

Подешавање и промена дозвола

Претпоставимо да имамо фајл где сви корисници имају пуне дозволе.

ls -l new_file.txt

Желимо да корисник „dave“ има дозволе за читање и писање, док група и остали корисници имају само дозволу за читање. То се може постићи следећом командом:

chmod u=rw,og=r new_file.txt

Коришћењем оператора „=“ бришемо све постојеће дозволе, а затим подешавамо нове наведене.

Проверимо нове дозволе за овај фајл:

ls -l new_file.txt

Постојеће дозволе су уклоњене, а нове су подешене, као што смо очекивали.

Шта ако желимо да додамо дозволу, а да не уклањамо постојећа подешавања? И то је могуће.

Рецимо да имамо скрипту коју смо завршили са уређивањем. Морамо је учинити извршном за све кориснике. Њене тренутне дозволе су:

ls -l new_script.sh

Дозволу за извршавање за све можемо додати следећом командом:

chmod a+x new_script.sh

Погледом на дозволе, видимо да је дозвола за извршавање додата свима, а претходне дозволе су задржане.

ls -l new_script.sh

Исти ефекат смо могли постићи и без `a` у `a+x` изјави. Следећа команда би радила исто:

chmod +x new_script.sh

Подешавање дозвола за више фајлова

Дозволе можемо применити на више фајлова одједном.

Ево фајлова у текућем директоријуму:

ls -l

Рецимо да желимо да уклонимо дозволе за писање за „остале“ кориснике из фајлова који имају екстензију `.page`. То се може постићи следећом командом:

chmod o-w *.page

Проверимо ефекат:

ls -l

Као што видимо, дозвола за писање је уклоњена из фајлова са екстензијом `.page` за категорију „остали“. Ни један други фајл није промењен.

Ако желимо да укључимо фајлове у поддиректоријумима, можемо користити опцију `-R` (рекурзивно).

chmod -R o-w *.page

Нумерички начин дефинисања дозвола

Други начин за коришћење команде `chmod` је да се дозволе задају као троцифрен број, где свака цифра представља дозволе за власника, групу и остале, респективно.

Следе цифре које можете користити и шта оне представљају:

0: (000) Без дозвола.
1: (001) Дозвола за извршавање.
2: (010) Дозвола за писање.
3: (011) Дозволе за писање и извршавање.
4: (100) Дозвола за читање.
5: (101) Дозволе за читање и извршавање.
6: (110) Дозволе за читање и писање.
7: (111) Дозволе за читање, писање и извршавање.

Свака од три дозволе је представљена једним битом у бинарном еквиваленту децималног броја. Дакле, 5, што је 101 у бинарном облику, представља читање и извршавање. 2, што је 010 у бинарном облику, представља дозволу за писање.

Користећи овај метод, подешавате дозволе које желите, а не додајете их постојећим дозволама. Дакле, ако су дозволе за читање и писање већ биле постављене, морали бисте користити 7 (111) да бисте додали дозволу за извршавање. Коришћење 1 (001) би уклонило дозволе за читање и писање и додало дозволу за извршавање.

Вратимо дозволу за читање фајловима са екстензијом `.page` за категорију осталих корисника. Морамо поставити и корисничке и групне дозволе, тако да их морамо поставити на њихове постојеће вредности. Ови корисници већ имају дозволе за читање и писање, што је 6 (110). Желимо да „остали“ имају дозволу за читање, што је 4 (100).

Следећа команда ће то постићи:

chmod 664 *.page

Овим подешавамо дозволе за корисника, чланове групе и остале кориснике. Корисници и чланови групе имају враћене дозволе на претходно стање, а осталима је враћена дозвола за читање.

ls -l

Напредне опције

Уколико прочитате ман страницу за команду `chmod`, видећете да постоје напредне опције које се односе на SETUID и SETGID битове, као и на ограничено брисање или „лепљиви“ бит.

За 99% случајева где ће вам требати `chmod`, опције које су овде описане ће бити сасвим довољне.