有人能告诉我在哪里可以找到 Ubuntu(14.04)上有效的 suid/guid 程序列表吗?
注意我可以使用 find 来获取我的机器上的 suid/sgid 程序列表,但我想知道它们是否是真正的有效程序;是否有一个列表可以与它们进行比较,或者有其他方法来确定它们是否有效?
答案1
有一个想法 - 但需要在脚本方面做一些工作---请随意 ;-)
找到一个 suid/sgid 文件;我们把它称为
scommand
检查已安装的包:
dpkg -S /full/path/to/scommand
将其权限与原始 deb 包进行比较,首先下载该包:
apt-get download package
检查命令是否应该在包中设置 suid
dpkg -c package*deb | grep /full/path/to/scommand
清理、冲洗、重复。
例子:
[romano:~/tmp] % ls -l /bin/passwd
ls: cannot access /bin/passwd: No such file or directory
[romano:~/tmp] 2 % ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 47032 Feb 17 2014 /usr/bin/passwd
[romano:~/tmp] % dpkg -S /usr/bin/passwd
passwd: /usr/bin/passwd
[romano:~/tmp] % apt-get download passwd
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main passwd amd64 1:4.1.5.1-1ubuntu9 [755 kB]
Fetched 755 kB in 1s (487 kB/s)
[romano:~/tmp] % dpkg -c passwd*.deb| grep /usr/bin/passwd
-rwsr-xr-x root/root 47032 2014-02-17 03:42 ./usr/bin/passwd
警告:.deb 软件包中的某个文件可能不是 suid/sgid,但安装/安装后脚本会将其更改为 suid/sgid。在这种情况下,您必须找到其他方法来检查,也许可以与全新安装进行比较。
答案2
这似乎有效:它首先对系统可以下载的每个包进行 apt-cache 搜索,然后下载所有包(压缩在它们的 .deb 中),然后循环运行 dpkg -c 来获取 .deb 文件中文件的路径和权限,通过剪切前三个字符并查找在行首设置的 suid 位,然后打印所有具有 suid 属性的路径。
PKG=$(apt-cache search . | cut -f 1 -d ' ');
echo $PKG | xargs apt-get download;
F=(`find *.deb`); for i in ${F[@]};
do dpkg -c $i | cut -c 4- | grep ^s | cut -c 4- | cut -f 2 -d '.' | tee > suid_root;
done
笔记:这需要很多的磁盘空间来运行,并且速度或其他方面都没有得到很好的优化。