Как работят разрешенията за Linux файлове?
Ако сте използвали Linux за известно време (и дори OS X), вероятно ще срещнете грешка "разрешения". Но какво точно са те и защо са необходими или полезни? Нека погледнем отвътре.
Потребителски разрешения
През деня компютрите бяха масивни машини, които бяха изключително скъпи. За да извлекат максимума от тях, бяха свързани множество компютърни терминали, които позволиха на много потребители да работят едновременно. Обработката на данни и съхранението им бяха извършени на машината, докато самите терминали бяха малко повече от средство за преглед и въвеждане на данни. Ако мислите за това, до голяма степен имаме достъп до данните в „облака“; погледнете в облачната MP3 система на Amazon, Gmail и Dropbox и ще забележите, че докато промените могат да се правят локално, всичко се съхранява дистанционно.
(Изображение: Zenith Z-19 "тъп" терминал; кредит: ajmexico)
За да работи това, индивидуалните потребители трябва да имат сметки. Те трябва да имат част от зоната за съхранение, която им е предоставена и трябва да им бъде позволено да изпълняват команди и програми. Всеки получава специфични „потребителски разрешения“, които диктуват какво могат и какво могат да направят, къде в системата, която имат и нямат достъп, и чиито файлове могат и не могат да променят. Всеки потребител се поставя в различни групи, които предоставят или ограничават по-нататъшния достъп.
Достъп до файл
В този свят на много потребители, вече сме установили граници за това какво могат да направят потребителите. Но какво да кажем за това, което имат достъп? Е, всеки файл има набор от разрешения и собственик. Обозначението на собственика, обикновено свързано при създаването на файла, декларира на кой потребител принадлежи и само този потребител може да промени разрешенията си за достъп.
В света на Linux разрешенията се разделят на три категории: четене, писане и изпълнение. Достъпът до "четене" позволява да се види съдържанието на даден файл, достъпът до "запис" позволява да се променя съдържанието на даден файл, а "изпълни" позволява да се изпълни набор от инструкции, като скрипт или програма. Всяка от тези категории се прилага за различни класове: потребител, група и свят. „Потребител“ означава собственик, „група“ означава всеки потребител, който е в същата група като собственика, а „свят“ означава всеки и всички.
Папките също могат да бъдат ограничени с тези разрешения. Можете, например, да позволите на други хора във вашата група да виждат директориите и файловете в домашната папка, но не и някой извън вашата група. Вероятно ще искате да ограничите достъпа само до себе си, освен ако не работите по някакъв споделен проект. Можете също да създадете споделена директория, която позволява на всеки да преглежда и променя файловете в тази папка.
Промяна на разрешения в Ubuntu
GUI
За да промените разрешенията на файл, който притежавате в Ubuntu, просто щракнете с десния бутон върху файла и отидете на “Properties”.
Можете да промените дали собственикът, групата или други могат да четат и пишат, да четат само или да не правят нищо. Можете също да поставите отметка в квадратчето, за да разрешите изпълнението на файла, и това ще го активира едновременно за собственика, групата и други.
Командна линия
Можете да направите това и чрез командния ред. Отидете в директория с файлове в нея и въведете следната команда, за да видите всички файлове в списък:
ls-al
До всеки файл и директория ще видите специален раздел, който очертава разрешенията, които има. Изглежда така:
-rwxrw-R-
Най- R означава "четене" w означава "пиша" и х Директория ще се стартира с “d” вместо “-“. Ще забележите също, че има 10 пространства, които задържат стойността. Можете да игнорирате първото, а след това има 3 комплекта от 3. Първият комплект е за собственика, вторият е за групата, а последният е за света..
За да промените разрешения за файл или директория, нека да разгледаме основната форма на командата chmod.
chmod [class] [operator] [разрешение] файл
chmod [ugoa] [+ или -] [rwx] файл
Това може да изглежда сложно в началото, но повярвайте ми, това е доста лесно. Първо, нека разгледаме класовете:
- u: Това е за собственика.
- g: Това е за групата.
- o: Това е за всички останали.
- a: Това ще промени разрешенията за всички по-горе.
След това операторите:
- +: Знакът плюс ще добави следващите разрешения.
- -: Знакът минус ще премахне следващите разрешения.
Все още ли сте с мен? А последният раздел е същият, както когато проверихме разрешенията за файл:
- r: Позволява достъп за четене.
- w: Позволява достъп за запис.
- x: Позволява изпълнение.
Сега, нека да го съберем заедно. Да кажем, че имаме файл с име „todo.txt“, който има следните разрешения:
-RW-RW-R-
Това означава, че собственикът и групата могат да четат и пишат, а светът може само да чете. Искаме да променим разрешенията за тях:
-rwxr-
Това означава, че собственикът има пълни разрешения и групата може да чете. Можем да направим това в 3 стъпки. Първо, ще добавим разрешение за изпълнение за потребителя.
chmod u + x todo.txt
След това ще премахнем разрешението за писане за групата.
chmod g-w todo.txt
Накрая ще премахнем разрешенията за четене за всички останали потребители.
chmod o-r todo.txt
Също така можем да комбинираме тези в една команда, като:
chmod u + x, g-w, o-r todo.txt
Можете да видите, че всяка секция е разделена със запетаи и няма интервали.
Ето някои полезни разрешения:
- -rwxr-xr-x: Собственикът има пълни разрешения, група и други потребители могат да четат съдържанието на файла и да го изпълняват.
- -rwxr-r-: Собственикът има пълни разрешения, група и други потребители могат да четат само файл (полезно, ако нямате нищо против другите да гледат файловете ви.
- -rwx-: Собственикът има пълни разрешения, всички останали нямат (полезно за персонални скриптове).
- -rw-rw--: Собственикът и групата могат да четат и пишат (полезно за сътрудничество с членове на групата).
- -rw-r-r-: Собственикът може да чете и пише, групира и други потребители могат да четат само файл (полезен за съхраняване на лични файлове в споделена мрежа).
- -rw--: Собственикът може да чете и пише, всички останали да нямат (полезно за съхраняване на лични файлове).
Има още няколко неща, които можете да направите с chmod - като setuid и setgid - но те са малко по-задълбочени и повечето потребители няма да имат нужда да ги използват така или иначе.
Корените или суперпотребителите и системните файлове
Днес не винаги изпълняваме системи, които имат множество потребители. Защо трябва да се тревожим за разрешения?
Е, Unix и неговите производни - Linux, OS X, наред с другото - също разграничават неща, които се изпълняват от потребителя, неща, които се изпълняват от администратор или с администраторски привилегии, и неща, управлявани от самата система. Като такива, нещата, които са неразделна част от системата, се нуждаят от администраторски привилегии за промяна или достъп. По този начин вие не обърквате нищо случайно.
В Ubuntu, за да правите промени в системните файлове, използвате “sudo” или “gksudo”, за да получите еквивалента на администраторски привилегии. В други дистрибуции, вие превключвате на "root" или "супер-потребител", което ефективно прави същото, докато не излезете.
Имайте предвид, че и при двете обстоятелства промяната на разрешенията за файлове може да доведе до това, че програмите не работят, неволно да променят собствеността на файла на главния потребител (вместо собственика) и да направят системата по-сигурна (чрез предоставяне на повече разрешения). Поради това се препоръчва да не променяте разрешенията за файлове - особено системни - освен ако не е необходимо или знаете какво правите.
Налице са разрешения за файлове, които осигуряват основна система за сигурност сред потребителите. Научаването на начина, по който те работят, може да ви помогне да настроите основно споделяне в многопотребителска среда, да защитите „публичните“ файлове и да ви даде представа кога нещо се обърка със собствеността на системните файлове..
Мислиш ли, че можеш да обясниш нещата по-лесно? Имате ли корекция? Искаш ли да си спомниш за старите дни? Направете си почивка и помислете в коментарите.