Стандартные права (SUID, SGID, Sticky bit)

Thank you for reading this post, don't forget to subscribe! 

Установка Sticky Bit

Выстав­ля­ем sticky bit на файл:

# chmod +t test_sticky_bit.txt
Про­вер­ка:
#·ls -al·test_sticky_bit.txt
-rw-r--r-T · 1 captain· staff· · · 0 Jul 28 12:04 test_sticky_bit.txt
Где:
  • — T — озна­ча­ет, что раз­ре­ше­ния на выпол­не­ние отключены.
  • — t — озна­ча­ет, что пра­ва на выпол­не­ние включены.

Или мож­но еще исполь­зо­вать сле­ду­ю­щую команду:

# chmod 1777 test_sticky_bit.txt
ито­ги:

Sticky bit, в основ­ном исполь­зу­ет­ся в общих ката­ло­гах, таких как /var или /tmp, посколь­ку поль­зо­ва­те­ли могут созда­вать фай­лы, читать и выпол­нять их, при­над­ле­жа­щие дру­гим поль­зо­ва­те­лям, но не могут уда­лять фай­лы, при­над­ле­жа­щие дру­гим поль­зо­ва­те­лям. Напри­мер, если поль­зо­ва­тель (пред­по­ло­жим bob) созда­ет файл с име­нем /tmp/bob, то дру­гой поль­зо­ва­тель (допу­стим tom) не может уда­лить этот файл, даже если в ката­ло­ге /tmp есть раз­ре­ше­ние 777. Если sticky bit не уста­нов­лен, то tom юзер может уда­лить /tmp/bob, так как файл /tmp/bob насле­ду­ет раз­ре­ше­ния роди­тель­ско­го каталога.

Использование SUID ( Set User ID) прав в Unix/Linux

setuid (сокра­ще­ния от англ. set user ID upon execution — «уста­нов­ка ID поль­зо­ва­те­ля во вре­мя выпол­не­ния) явля­ют­ся фла­га­ми прав досту­па в Unix, кото­рые раз­ре­ша­ют поль­зо­ва­те­лям запус­кать испол­ня­е­мые фай­лы с пра­ва­ми вла­дель­ца испол­ня­е­мо­го фай­ла. Ино­гда фай­лы тре­бу­ют раз­ре­ше­ния на выпол­не­ние для поль­зо­ва­те­лей, кото­рые не явля­ют­ся чле­на­ми груп­пы вла­дель­ца, в этом слу­чае вам потре­бу­ет­ся предо­ста­вить спе­ци­аль­ные раз­ре­ше­ния на выпол­не­ние. Когда SUID уста­нов­лен, поль­зо­ва­тель может запус­кать любую про­грам­му, такую как вла­де­лец программы.

Уста­нов­ка SUID бит на файл.

Если SUID бит уста­нов­лен на файл и поль­зо­ва­тель выпол­нил его. Про­цесс будет иметь те же пра­ва что и вла­де­лец файла.

Напри­мер: коман­да passwd име­ет SUID bit. Когда обыч­ный поль­зо­ва­тель захо­чет изме­нит свой пароль в фай­ле /etc/passwd или /etc/shadow, то у него ниче­го не полу­чить­ся, т.к нуж­ны пра­ва супер­поль­зо­ва­те­ля (про­цесс команд­ны PASSWD все­гда рабо­та­ет с пра­ва­ми суперюзера).

Пред­по­ло­жим, что я полу­чил испол­ня­е­мый файл «filename», и мне нуж­но уста­но­вить SUID на этот файл, перей­ди­те в команд­ную стро­ку и выпол­ни­те команду:

#·chmod u+s filename
ИЛИ:
# chmod 4655 filename
Теперь про­верь­те раз­ре­ше­ния на файл с командой:
#·ls -l filename
Наблю­дай­те за «s» бук­вой, кото­рая была добав­ле­на ​​для SUID бита:
-rwsr-xr-x 1 root root 8 Jun ·8 10:10 filename
Что­бы выста­вить SUID для всех папок и фай­лов, используем:
# find /path_to_directory -type d -exec chmod u+s {} \;
Най­ти SUID файлы

Най­ти все SUID фай­лы для «root» пользователя:

#·find / -user root -perm -4000 -print

Най­ти все SUID и SGID файлы:

#·find / -perm -4000 -o -perm -2000 -print

Использование SGID ( Set Group ID ) прав в Unix/Linux

setgid (сокра­ще­ния от англ. set group ID upon execution — «уста­нов­ка ID груп­пы во вре­мя выпол­не­ния») явля­ют­ся фла­га­ми прав досту­па в Unix, кото­рые раз­ре­ша­ют поль­зо­ва­те­лям запус­кать испол­ня­е­мые фай­лы с пра­ва­ми груп­пы испол­ня­е­мо­го файла.

Так же, как SUID , уста­но­вив SGID бит для фай­ла он уста­нав­ли­ва­ет ваш иден­ти­фи­ка­тор груп­пы для груп­пы фай­ла в то вре­мя как файл выпол­ня­ет­ся. Это дей­стви­тель­но полез­но в слу­чае когда у вас есть реаль­ные уста­нов­ки в мно­го­поль­зо­ва­тель­ском режи­ме где у поль­зо­ва­те­лей есть доступ к фай­лом. В одной домаш­ней кате­го­рии я дей­стви­тель­но не нашел исполь­зо­ва­ния для SGID. Но основ­ная кон­цеп­ция явля­ет­ся такой же, как и у SUID, фай­лы у кото­рых SGID бит уста­нав­ли­ва­ет­ся, то они при­над­ле­жат к этой груп­пе , а не к это­му пользователю.

схе­ма:

 

Уста­нов­ка бита SUIDSGID

Если SGID бит  уста­нов­лен на любой ката­лог, все под­ка­та­ло­ги и фай­лы, создан­ные внут­ри полу­чат те же пер­ми­ше­ны что и груп­пы в каче­стве основ­но­го каталога.

Уста­нав­ли­ва­ем SGID на директорию:

# chmod g+s /home/captain/test_dir
Или:
# chmod·2775 /home/captain/test_dir
Про­ве­ря­ем:
# ls -ld /home/captain/test_dir
drwxr-sr-x ·2 captain ·staff ·68 Jul 28 12:20 test_dir
Теперь, пере­клю­ча­ем­ся на дру­го­го поль­зо­ва­те­ля и созда­ем файл в пап­ке  /home/captain/test_dir:
# su - my_test_user
$ cd /home/captain/test_dir
$ touch test_file.txt
В при­ве­ден­ном выше при­ме­ре test_file.txt создал­ся с груп­пой root. Что­бы выста­вить SGID для всех папок и фай­лов, используем:
# find /path_to_directory -type d -exec chmod g+s {} \;
Най­ти SGID файлы

Най­ти все фай­лы с исполь­зо­ва­ни­ем SGID бита, для root пользователя:

#·find / -group root -perm -2000 -print
Най­ти все SUID и SGID файлы:
#·find / -perm -4000 -o -perm -2000 -print

Зачем нужны SUID и SGID?

Есть доста­точ­но мно­го про­грамм и фай­лов, кото­рые долж­ны при­над­ле­жать поль­зо­ва­те­лю root, и в то же вре­мя – про­стые поль­зо­ва­те­ли долж­ны иметь воз­мож­ность выпол­нять его. Для при­ме­ра – ути­ли­та passwd, кото­рая нахо­дит­ся в ката­ло­ге /usr/bin/passwd и кото­рая име­ет дело с фай­лом /etc/passwd, редак­ти­ро­вать кото­рый может толь­ко поль­зо­ва­тель root.

ито­ги:

Коман­да chmod так­же может исполь­зо­вать­ся для уста­нов­ки или отме­ны сле­ду­ю­щих зна­че­ний в каче­стве пре­фик­са для обыч­ных трех чис­ло­вых привилегий:

  • 0 — setuid, setgid, sticky bits не установлены.
  • 1 — Уста­но­вить sticky bit.
  • 2 -Уста­но­вить setgid bit.
  • 3 -Уста­но­вить setgid и sticky bits.
  • 4 -Уста­но­вить setuid bit.
  • 5 -Уста­но­вить setuid и sticky bits.
  • 6 — Уста­но­вить setuid и setgid bit-ы.
  • 7 — setuid, setgid, sticky bits активированы.