1

Всем привет

Изучая линукс наткнулся на такие довольно интересные вещи как  SUID и SGID.  Но так до конца и непонимаю каким же образом они работают

Вот например как пишут:

В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root.

Если на исполняемый файл установлен бит suid, то при выполнении эта программа автоматически меняет «эффективный userID» на идентификатор того пользователя, который является владельцем этого файла. То есть, независимо от того — кто запускает эту программу, она при выполнении имеет права хозяина этого файла.

Если я правильно понимаю, то допустим я администратор и создал файл     readme    со следующим содержанием:

#!/bin/bash
echo hello world

и присвоил ему следующие права:
-rwx rw- r--           (владелец - чтение, запись и исполнение, группа -чтение и запись, все остальные - только чтение)

После чего я эти права меняю и добавляю SUID бит
chmod 4764 readme
-rws rw- r--

И теперь этот файл по идеи сможет запустить любой пользователь, но уже не с правами (r--),  а с правами администратора (rwx) т.е. сможет сделать с ним все что угодно. Но если я пытаюсь от имени обычного пользователя запустить этот файл у меня вылезает сообщение "отказано в доступе".

Объясните пожалуйста что именно я сделал не так? или чего я не так понял?

2

Ты не разрешил другим пользователям запускать файл, бит "x".

3 (16.03.2015 13:55:35 отредактировано dicros)

Vascom,  так если я установлю для других пользователей флаг  x,  то тогда зачем мне вообще использовать  SUID  если они и так его смогут запустить?

Я думал что не зависимо от того какие права есть у пользователя, он получает права администратора.

4 (16.03.2015 13:56:50 отредактировано Vascom)

Без этого флага твой скрипт запустится с правами запускающего пользователя.
С этим флагом скрипт запустится с правами владельца.

Если же флаг исполнения не стоит, то скрипт вообще не запустится.

5

Vascom,  если я тебя правильно понимаю то....

rwx rw- r-x readme   

в этом случае если файл запустит пользователь он сможет его только "читать" а если записать вот так:

rws rw- r-x

то он сможет его и редактировать.   Так чтоли?

6

dicros, в основном оно юзается, чтобы простой юзер мог запускать бинарники, требующие рутовых прав.

Leap 42.3 Calculate Linux, Xfce, Emacs, ..

7

Нет, не так.
В первом случае все действия скрипта readme будут делаться от имени запустившего пользователя.
А во втором случае - от имени владельца.

То есть если бы ты в скрипте создавал другой файл, например touch rtmp. То владелец у этого файла будет разным.

8 (16.03.2015 14:16:53 отредактировано dicros)

Я сейчас попробовал так сделать с созданием нового файла, и в обоих случаях пишет что  (отказано в доступе). Хотя во втором случае когда    rws rw- r-x       должно было сработать?

touch: cannot touch ‘temp’: Permission denied

9

Покажи весь скрипт. Где он лежит, как ты запускаешь и какой результат получаешь.

10

Насколько я помню, для скриптов эти биты игнорируются.

11

скрипт:

#!/bin/bash
touch temp

лежит тут:
/home/lucky/test/readme

http://s019.radikal.ru/i616/1503/95/fea80127e04c.png

12

dicros, флаг SUID позволяет изменять файл только владельцу файла (остальные летят на метлах дальше).
Флаг SGID - только группе, в которой состоит владелец файла.

Linux Mint 19.3 Mate Edition
Windows 7

13

Wolfenberg, ты путаешь с обычными флагами доступа для владельца/группы/остальных.

14

Vascom пишет:

Wolfenberg, ты путаешь с обычными флагами доступа для владельца/группы/остальных.

https://ru.wikipedia.org/wiki/Suid

Linux Mint 19.3 Mate Edition
Windows 7

15 (16.03.2015 16:33:45 отредактировано Vascom)

Ну вот и почитай. Запустить файл можно и без этих битов, достаточно бита исполняемости.
А изменять файл позволяют биты права записи.

16

Vascomab А где я писал про запуск?

Linux Mint 19.3 Mate Edition
Windows 7

17

Ты писал про изменение.

18

Vascom, угу. SUID и SGUID - биты безопасности для файлов, каталогов...

Linux Mint 19.3 Mate Edition
Windows 7

19

Но они ни как не влияют на доступ к изменению файла. За это отвечают биты права записи.

20

Vascomab допёрло. Они права повышают, а не понижают.

Linux Mint 19.3 Mate Edition
Windows 7

21 (17.03.2015 09:06:36 отредактировано )

dicros пишет:

Изучая линукс наткнулся на такие довольно интересные вещи как  SUID и SGID.  Но так до конца и непонимаю каким же образом они работают

dicros пишет:

И теперь этот файл по идеи сможет запустить любой пользователь, но уже не с правами (r--),  а с правами администратора (rwx) т.е. сможет сделать с ним все что угодно. Но если я пытаюсь от имени обычного пользователя запустить этот файл у меня вылезает сообщение "отказано в доступе".

Объясните пожалуйста что именно я сделал не так? или чего я не так понял?

бит SET UID выставляет владельца процесса по владельцу файла. Пример:

 Консоль:
drb@amilo:~$ /bin/bash -c whoami
drb
drb@amilo:~$ ls -l /bin/bash
-rwxr-xr-x 1 root root 975432 ноя  7 23:30 /bin/bash*

хотя файл /bin/bash имеет владельца "root", но процессом владеет drb.

Пример set uid

 Консоль:
drb@amilo:~$ /bin/su -c whoami
Пароль:
root
drb@amilo:~$ ls -l /bin/su
-rws--x--x 1 root root 59586 июл  2  2014 /bin/su*

процесс запустил drb, но владелец — root.

Wolfenberg пишет:

Они права повышают

если владелец файла с set uid — root, то повышают.

ЗЫЖ да, на скрипты НЕ действует SET UID, только на ELF.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

22

drBatty пишет:

только на ELF

эм а это что ? чего то я не могу расшифровать  bw

Спросить - стыд минуты, не узнать - стыд всей жизни

23

https://ru.wikipedia.org/wiki/Executabl … ble_Format

24

lone_wolf пишет:

эм а это что ?

первая ссылка в яндексе: https://ru.wikipedia.org/wiki/Executabl … ble_Format
вторая(для полноты картины) : https://lurkmore.to/%DD%EB%FC%F4

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

25

dicros пишет:

touch: cannot touch ‘temp’: Permission denied

Чтобы что-то записать в каталог, запустившему скрипт нужны права на чтение и запись в этот каталог.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Slackware64-current/Xfce/Lenovo G580

26

drBatty пишет:

первая ссылка в яндексе

А вот и гугль

+ открыть спойлер

http://storage2.static.itmages.ru/i/15/0317/s_1426584734_4631184_f01aba8339.jpg

Спросить - стыд минуты, не узнать - стыд всей жизни

27 (17.03.2015 13:02:30 отредактировано )

yars пишет:

    touch: cannot touch ‘temp’: Permission denied

Чтобы что-то записать в каталог

вообще-то touch(1) не создаёт файлы, а меняет их временной штамп. Т.е. если файл уже есть, кроме доступа к каталогу нужно быть хозяином файла.

yars пишет:

запустившему скрипт нужны права на чтение и запись в этот каталог.

нет. На модификацию(+w) и использование(+x). На чтение не нужно.

lone_wolf пишет:

А вот и гугль

да, гугол обделался. Я думал проблема в вашей истории, но у меня такая же беда.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)