Может ли процесс пользовательского пространства запустить корневой подпроцесс?

501
Mehdi Sadeghi

Я использую Ubuntu Linux, и у меня работает проприетарное программное обеспечение Viber. Сегодня я сохранил файл, используя Viber, и понял, что он был сохранен в файловой системе с владельцем root в качестве владельца. Я копал больше и понял, что запущены два процесса, один под моим именем пользователя, другой под root. Может ли кто-нибудь объяснить мне, возможно ли, чтобы процесс в пользовательском пространстве запускал другой подпроцесс от имени пользователя root?

Вот права доступа к файлу, хранящемуся в Viber:

mehdix@spielplatz:~/New Folder2$ ls -l total 240 -rw-rw-r-- 1 root root 245455 Okt 9 09:50 saved_with_viber 

и вот результат команды 'ps':

mehdix@spielplatz:~$ ps axuf | grep Viber mehdix 23857 0.0 0.0 4444 644 ? S Okt08 0:00 \_ /bin/sh /usr/share/viber/Viber.sh root 23864 0.0 1.8 2794592 146604 ? Sl Okt08 0:17 | \_ /usr/share/viber/Viber mehdix 26484 0.0 0.0 17432 964 pts/5 S+ 09:43 0:00 \_ grep --color=auto Viber mehdix@spielplatz:~$ 

Вот вывод 'ls -l / usr / share / viber / Viber':

mehdix@spielplatz:~$ ls -l /usr/share/viber/Viber -rwsr-sr-x 1 root root 1733113 Okt 31 2013 /usr/share/viber/Viber 

и вот содержимое файла /usr/share/viber/Viber.sh:

mehdix@spielplatz:~$ cat /usr/share/viber/Viber.sh #!/bin/sh appname=`basename $0 | sed s,\.sh$,,`  dirname=`dirname $0` tmp="$"  if [ "$" != "/" ]; then dirname=$PWD/$dirname fi  LD_LIBRARY_PATH=$dirname export LD_LIBRARY_PATH 
0
Конечно. Посмотри вверх SUID. Bob 10 лет назад 0
@ Боб, я не понимаю ситуацию. Я почти уверен, что программа из пользовательского пространства никогда не сможет запускать что-либо как root, тогда как она может запустить подпроцесс root и пометить права доступа к файлам как root? Или я совершенно не прав? Mehdi Sadeghi 10 лет назад 0
Можете ли вы показать вывод `ls -l / usr / share / viber / Viber` и опубликовать где-нибудь` / usr / share / viber / Viber.sh`? Это может сказать нам, что происходит ... lemonsqueeze 10 лет назад 0

1 ответ на вопрос

2
Bob

Конечно. Файл с установленным битом разрешения SUID будет запускаться от имени владельца файла, а не от пользователя, который его запустил. Файл SUID, принадлежащий пользователю root, будет работать под пользователем root.

sudoэто пример такой программы. Вы можете запустить его от любого пользователя, но он будет работать под root и может запускать дальнейшие процессы с привилегиями root.

Как вы можете видеть в своих ls -lвыходных данных, этот метод используется здесь: файл принадлежит rootи установлен бит SUID (как указано sвместо xразрешения пользователя на выполнение). На самом деле, похоже, что бит SGID также установлен.

Когда я запускаю 'sudo', я должен предоставить пароль root, но когда я запускаю Viber, я не предоставляю пароль. Это имеет значение? Mehdi Sadeghi 10 лет назад 0
@MehdiSadeghi Пароль запрашивается и управляется двоичным файлом `sudo` и не имеет ** никакого отношения к SUID ** - это происходит * после * выполнения двоичного файла под пользователем root. SUID и другие функции прав доступа управляются ядром (`exec`). Bob 10 лет назад 0

Похожие вопросы