我们如何找到 sudoers 文件中的现有可执行文件及其父目录权限?

我们如何找到 sudoers 文件中的现有可执行文件及其父目录权限?

我们可以编写一个命令来解析 sudoers 文件中列出的可执行文件列表,并检查可执行文件及其父目录的全局可写权限吗?

我能够获取可执行文件的列表,任何人都可以帮助我进一步找到可执行文件及其父目录的权限。

# for i in `cat /etc/passwd | cut -d: -f1`; do for j in `sudo -lU $i | grep '(root)' | awk '{print $3}'`; do if [ -e $j ]; then echo $j; fi; done; done
/usr/bin/tail
/usr/bin/tail
/usr/bin/tail
/usr/bin/php
/usr/local/nagiosxi/scripts/components/getprofile.sh
/usr/local/nagiosxi/scripts/repair_databases.sh
/usr/local/nagiosxi/scripts/manage_services.sh
/etc/init.d/npcd
/etc/init.d/npcd
/etc/init.d/npcd
/etc/init.d/npcd
/etc/init.d/npcd
/usr/bin/php
/usr/local/nagiosxi/scripts/components/getprofile.sh
/usr/local/nagiosxi/scripts/upgrade_to_latest.sh
/usr/local/nagiosxi/scripts/change_timezone.sh
/usr/local/nagiosxi/scripts/manage_services.sh
/usr/local/nagiosxi/scripts/reset_config_perms.sh
/usr/local/nagiosxi/scripts/manage_ssl_config.sh
/usr/local/nagiosxi/scripts/backup_xi.sh

答案1

首先,我想指出,您的脚本在我的机器上不起作用,但是我使用它的输出来测试我的脚本,因为您说它在您的机器上运行。

要列出每个文件的权限,请通过管道输出

| xargs ls -l

并列出目录的权限,添加此管道(不是在前一个管道之后,而是在循环中)

| sed 's|\(.*\)/.*|\1|' | xargs ls -ld

一种懒惰的方法是将脚本的结果输出到临时文件,然后使用 cat 读取它(我将其全部写在一行中,因为这就是您在问题中提供它的方式

`for i in `cat /etc/passwd | cut -d: -f1`; do for j in `sudo -lU $i | grep '(root)' | awk '{print $3}'`; do if [ -e $j ]; then echo $j; fi; done; done` > /tmp/suexecs && echo `cat /tmp/suexecs | xargs ls -l` && echo `cat /tmp/suexecs | sed 's|\(.*\)/.*|\1|' | xargs ls -ld ` && rm /tmp/suexecs -f

作为 shell 脚本:

#!/bin/sh
for i in `cat /etc/passwd | cut -d: -f1`; do
    for j in `sudo -lU $i | grep '(root)' | awk '{print $3}'`; do
         if [ -e $j ]; then echo $j; fi; 
    done 
done > /tmp/suexecs
echo `cat /tmp/suexecs | xargs ls -l`
echo `cat /tmp/suexecs | sed 's|\(.*\)/.*|\1|' | xargs ls -ld`
rm /tmp/suexecs -f

答案2

显示应用程序未安装在系统中,但用户仍然被分配了 root 访问权限。

    for i in `cat /etc/passwd | cut -d: -f1`; do
        for j in `sudo -lU $i | grep '(root)' | awk '{print $3}'`; do
             if [ ! -e $j ]; then echo $j; fi;
        done
done

显示系统中安装的应用程序,并且用户被分配了 root 访问权限

for i in `cat /etc/passwd | cut -d: -f1`; do
    for j in `sudo -lU $i | grep '(root)' | awk '{print $3}'`; do
         if [  -e $j ]; then echo $j; fi;
    done
done

列出系统中存在的应用程序的权限

for i in `cat /etc/passwd | cut -d: -f1`; do
    for j in `sudo -lU $i | grep '(root)' | awk '{print $3}'`; do
         if [  -e $j ]; then echo $j; fi;
    done
done > /tmp/suexecs
echo `cat /tmp/suexecs | xargs ls -l`
rm /tmp/suexecs -f

列出系统中存在的应用程序目录的权限

for i in `cat /etc/passwd | cut -d: -f1`; do
    for j in `sudo -lU $i | grep '(root)' | awk '{print $3}'`; do
         if [  -e $j ]; then echo $j; fi;
    done
done > /tmp/suexecs
echo `cat /tmp/suexecs |awk  'BEGIN{OFS=FS="/"};{$NF="";print $0}'| xargs ls -ld`
rm /tmp/suexecs -f

相关内容