Как да използвате командата chmod в Linux

Контролирайте кой има достъп до файлове, директории за търсене и изпълнява скриптове с помощта на командата chmod на Linux. Тази команда променя разрешенията за файлове на Linux, които изглеждат сложни на пръв поглед, но всъщност са доста прости, след като знаете как работят.

chmod Променя разрешенията за файлове

В Linux кой какво може да прави с файл или директория се контролира чрез набори от разрешения. Има три набора от разрешения. Един набор за собственика на файла, друг набор за членовете на групата на файла и последен набор за всички останали.

Разрешенията контролират действията, които могат да се извършват върху файла или директорията. Те или позволяват, или предотвратяват четенето, промяната на файл или, ако е скрипт или програма, изпълнението. За директория, разрешенията управляват кой може да диск в директорията и кой може да създава или променя файлове в директорията.

Можете да използвате командата chmod за задайте всяко от тези разрешения. Да се вижте какви разрешения са зададени във файл или директория, можем да използваме ls.

Преглед и разбиране на разрешенията за файлове

Можем да използваме опцията -l (дълъг формат), за да ls изброява разрешенията за файлове за файлове и директории.

ls -l

На всеки ред първият знак идентифицира типа запис, който се изписва. Ако е тире (-), това е файл. Ако е буквата d, това е директория.

Следващите девет знака представляват настройките за трите набора от разрешения.

Първите три знака показват разрешенията за потребителя, който притежава файла (потребителски разрешения).
Средните три знака показват разрешенията за членовете на групата на файла (групови разрешения).
Последните три знака показват разрешенията за всеки, който не е в първите две категории (други разрешения).

Във всеки набор от разрешения има три знака. Знаците са индикатори за наличието или отсъствието на едно от разрешенията. Те са или тире (-), или буква. Ако знакът е тире, това означава, че разрешението не е дадено. Ако знакът е r, w или x, това разрешение е дадено.

Буквите представляват:

r: Разрешения за четене. Файлът може да се отвори и съдържанието му да се види.
w: Разрешения за писане. Файлът може да бъде редактиран, модифициран и изтриван.
x: Изпълнение на разрешения. Ако файлът е скрипт или програма, той може да бъде стартиран (изпълнен).

  Как да използвате командата chgrp в Linux

Например:

— означава, че изобщо не са дадени разрешения.
rwx означава, че са предоставени пълни разрешения. Всички индикатори за четене, запис и изпълнение са налице.

В нашата екранна снимка първият ред започва с d. Този ред се отнася до директория, наречена „архив“. Собственикът на директорията е „dave“, а името на групата, към която принадлежи директорията, също се нарича „dave“.

Следващите три знака са потребителските разрешения за тази директория. Те показват, че собственикът има пълни разрешения. Всички знаци r, w и x присъстват. Това означава, че потребителят dave има разрешения за четене, запис и изпълнение за тази директория.

Вторият набор от три знака са разрешенията на групата, това са rx. Те показват, че членовете на групата Dave имат разрешения за четене и изпълнение за тази директория. Това означава, че те могат да изброят файловете и тяхното съдържание в директорията и могат да CD (изпълнят) в тази директория. Те нямат разрешения за запис, така че не могат да създават, редактират или изтриват файлове.

Последният набор от три знака също е rx. Тези разрешения важат за хора, които не се управляват от първите два набора от разрешения. Тези хора (наричани „други“) имат разрешения за четене и изпълнение на тази директория.

И така, за да обобщим, членовете на групата и други имат разрешения за четене и изпълнение. Собственикът, потребител, наречен Dave, също има разрешения за писане.

За всички други файлове (освен файла на скрипта mh.sh) dave и членовете на групата dave имат свойства за четене и запис във файловете, а останалите имат само разрешения за четене.

За специалния случай на скриптовия файл mh.sh собственикът Dave и членовете на групата имат разрешения за четене, писане и изпълнение, а останалите имат разрешения само за четене и изпълнение.

Разбиране на синтаксиса на разрешенията

За да използваме chmod за задаване на разрешения, трябва да му кажем:

Кой: За кого задаваме разрешения.
Какво: Каква промяна правим? Добавяме или премахваме разрешението?
Кое: Кои от разрешенията задаваме?

Използваме индикатори за представяне на тези стойности и формираме кратки „изявления за разрешения“, като u+x, където „u“ означава „потребител“ (кой), „+“ означава добавяне (какво), а „x“ означава разрешение за изпълнение (който).

  5-те най-добри графични интерфейса за MPV на Linux

Стойностите „кой“, които можем да използваме, са:

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-r *.page

Нека проверим какъв ефект има това:

ls -l

Както виждаме, разрешението за четене е премахнато от файловете „.page“ за категорията „други“ потребители. Други файлове не са засегнати.

  Как да проверите кой графичен процесор е инсталиран на Linux

Ако искахме да включим файлове в поддиректории, можехме да използваме опцията -R (рекурсивна).

chmod -R o-r *.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

Разширени опции

Ако ти прочетете man страницата за chmod ще видите, че има някои разширени опции, свързани с битовете SETUID и SETGID, както и с ограниченото изтриване или „стикия“ бит.

За 99% от случаите, за които ще ви трябва chmod, описаните тук опции ще ви покрият.