Какво са SUID, SGID и Sticky

Осмичната бройна система е бройна система с основа 8 и използва цифри от 0 до 7 (Осмична бройна система).
Вече говорихме кои са трите важни цифри, когато се дават права за достъп до файл или директория (http://dreamlandpoly.blogspot.com/p/files-1.html). Освен правата за четене, писане и изпълнение, съществуват и други специални позволения, които могат да се назначат с командите chmod и chown. Те са SUID, SGID, Sticky Bit, за по-прецизно управление на файловете и директориите от администраторите в Линукс, но за това ни е необходим 4-ти бит в осмичното представяне на правата за достъп.

Каква е магията?

Да вземем например числото 777. То дава абсолютни права за достъп до файл или директория. Да го изразим със символи:

-rwxrwxwvx

Да разделим на групи:

rwx rwx rwx

За да превърнем в двоичен вид, правим следното: ако има символ- пишем 1, ако няма- пишем 0. В двоичен вид числото 777 ще има вида:

111 111 111

Да превърнем двоичното число в осмично. За целта, разделяме двоичното число на групи по три бита, като започваме деленето от дясно на ляво, след което записваме осмичния еквивалент за всяка група.

Binary_Oct.png
От двоична в осмична бройна система (и обратно)

Получихме това, което търсим. На осмичното число 777 съответства двоичното 111 111 111. Всъщност, както вече казахме, необходим ни е 4-ти бит, който ще представя SUID, SGID, Sticky Bit. Записано като 0777 това число означава:

0- няма поставени SUID, SGID или Sticky Bit;
7- собственика на файла има пълни права над него (чете, пише, изпълнява);
7- групата има пълни права над файла;
7- всички останали имат пълни права над файла.

Какво е SUID?

SUID идва от Set owner User ID. Когато стартира програма в Линукс, тя наследява права за достъп от потребителя, който е влязъл в системата. SUID позволява на потребителя да получи правата на собственика на файла.Именно това е причината, поради която е необходимо да внимавате на кои файлове, директории или скриптове го поставяте.
За да променим паролата на потребителския си акаунт, използваме командата passwd, която всъщност е собственост на суперпотребителя (root). Файлът, съдържащ тази команда, ще се опита да редактира някои системни конфигурационни файлове (като /etc/passwd и /etc/shadow), когато се опитаме да променим паролата си. Вторият файл, например, не може да се отвори и да се разгледа от обикновен потребител, единствено root потребителя ще има достъп. По този начин, ако опитаме да премахнем SUID и дадем пълен достъп до файла на командата passwd, той не може да отвори други файлове (подобно на файла /etc/shadow), за да ъпдейтне промените и ще получим съобщение за отказан достъп или друго съобщение за грешка, когато опитаме да изпълним командата. Така, че командата passwd се поставя със SUID, за да даде root потребителя достъп на нормалния потребител до /etc/shadow и другите файлове, които е необходимо да бъдат ъпдейтнати.
Други команди на които може да се постави SUID са ping и crontab.

Как можем да поставим SUID на файл?

Съществуват два начина за поставяне на SUID на файл: единият чрез символи, а другият е чрез число (4).
Създайте файл date.txt и го качете на сървъра.
Командите, с които можете да поставите SUID на файла са:

chmod u+s [път до файла date.txt]

с която SUID бита се поставя чрез +s;

или

chmod 4750 [път до файла date.txt]

с която SUID бита се поставя чрез цифрата на числото 4.

С командата ls -l можем да проверим дали сме поставили SUID бит.

suid.png

Обърнете внимание на правата на собственика на файла. Там, на мястото на символа "x", сега стои символът "s", което означава, че е поставен SUID бит.

Внимавайте с поставянето на SUID на скрипт, защото може да бъде използван от злонамерени потребители.

Kakво е SGID?

SGID (идва от Set Group ID) е специален тип право на достъп до файл или папка. Обикновено в Линукс, когато програмата стартира, тя наследява правата за достъп от логналия се в системата потребител. SGID дава временни права на потребителя, за да стартира програма или файл с правата на групата, на която принадлежи файла, за да стане член на тази група и да изпълни файла. С други думи, потребителят ще получи позволенията на групата, когато изпълнява файл, програма, команда или отваря папка.

Как да поставим SGID на файл?

Начините са два: чрез символи или чрез число.
За да поставим SGID(+s) на групата, собственик на файла, в терминала въвеждаме:


chmod g+s date.txt

Другият начин е:

chmod 2750 date.txt

където

2- показва, че е поставен SGID бит;
7- пълни права над файла за собственика;
5- права за четене и изпълнение за групата;
0- всички останали са без права над този файл.

Как да проверим дали на файла е поставен SGID бит?

За да проверим дали е поставен SGID бит на файла date.txt, ползваме командата ls -l:

SGID.png

За да премахнем SGID бита, в терминала въвеждаме:

chmod g-s date.txt

Осмичните числови стойности за SUID и SGID са 4000 и 2000, а символните: u+s и g+s (за поставянето им) и u-s, g-s, съответно за премахването им. SUID, SGID влияят на стартирането на файла, а Sticky бита влияе на определянето на собственика на обект в директорията.

За да открием файловете с поставени SUID и SGID, в терминала въвеждаме:

find / -type f -perm /4000

или

find / -type f -perm /4000

или

find / -type f -perm /6000

Какво е Sticky бит?

Какво означава на директорията да е поставен Sticky бит?Това означава, че премахването на файла от тази директория може да се осъществи само от собственика на файла и от суперпотребителя. Другите потребители се лишават от това право. Поставянето на Sticky бит на директория се извършва само от суперпотребителя, а премахването му може да се извърши и от собственика на директорията, и от суперпотребителя. Осмичната стойност на Sticky бита е 1000, а символната е +t. Поставянето му се осъществява с командата chmod

За да поставим Sticky бит на файла date.txt:
  1. Влизаме в директорията, в която сме съхранили файла.
  2. Проверяваме правата за достъп до файла с помощта на командата ls -l.
  3. Задаваме Sticky бит на файла с командата chmod.
  4. Проверяваме правата за достъп до файла с ls -l.
Нагледно този процес ще изглежда така:

sticky_1.png

Обърнете внимание на предпоследния ред, където са показани правата за достъп до файла date.txt. Sticky бита е главна буква Т. Защо главна, а не малка? Когато Sticky бита е главна буква Т, това означава, че обикновеният потребител (не суперпотребителя, нито член на групата, на която принадлежи файлът) не е имал права за изпълнение на файла (това се вижда от третия ред (-rwxr-x---)) преди да се назначи този бит. Ако желанието ни е всички останали потребители да притежават права за изпълнение на файла, тогава с помощта на командата chmod даваме съответните привилегии:

sticky_2.png

Sticky бита вече е малка буквичка t, което означава, че обикновеният потребител вече има права за изпълнение на файла. Отнемаме ги отново с командата chmod и Sticky бита отново е главна буква Т:

sticky_3.png

Премахването на Sticky бита става така:

chmod -t date.txt

sticky_4.png


sign.png

Няма коментари:

Публикуване на коментар