用户空间进程可以启动根子进程吗?

用户空间进程可以启动根子进程吗?

我使用的是 Ubuntu Linux,上面运行着 Viber 专有软件。今天我使用 Viber 保存了一个文件,然后我发现该文件已存储在文件系统中用户作为其所有者。我进一步挖掘后发现有两个进程正在运行,一个以我的用户名运行,另一个以 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="${dirname#?}"

if [ "${dirname%$tmp}" != "/" ]; then
  dirname=$PWD/$dirname
fi

LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH

答案1

当然可以。包含SUID 权限位set 将在文件所有者而不是启动它的用户下运行。root 拥有的 SUID 文件将在 root 下运行。

sudo就是这样一个程序的例子。你可以从任何用户启动它,但它将在 root 权限下运行,并可以使用 root 权限启动进一步的进程。

从输出中可以看出ls -l,这里使用的方法如下:文件归 拥有,root并且设置了 SUID 位(如 所示,s而不是x用户执行权限)。事实上,SGID 位似乎也设置了。

相关内容