实操环境与前置条件
本次实操使用的系统为Kali Linux 2024.4版本,内核版本6.8.0,测试主机固定IP地址为192.168.31.120,网关192.168.31.1,DNS服务器为223.5.5.5。
前置条件如下:
1、测试主机已完成基础系统更新,具备可正常访问的官方软件源
2、操作账号拥有sudo权限,可执行特权命令完成审计与排查操作
3、系统已预装find、stat、sudo等基础工具,未安装的组件可通过apt命令完成部署
4、本次操作仅用于授权范围内的安全测试,请不要在未获得书面授权的系统上执行相关操作
一、Linux用户权限基础配置审计
用户权限配置是Linux系统安全的基础,异常的权限配置会直接成为红队的提权入口,该环节将从用户账号、sudo规则、文件目录权限三个维度完成全流程审计。
1.1 系统用户与组信息审计
Linux系统的用户与组信息集中存储在/etc/passwd、/etc/shadow、/etc/group三个核心文件中,审计的核心是排查异常账号、越权配置与权限泄露风险。
首先执行以下命令,查看系统全量用户配置,重点关注UID为0的账号与可登录用户:
root@kali:~# cat /etc/passwd | head -15
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
kali:x:1000:1000:kali:/home/kali:/bin/bash
test:x:1001:1001:test:/home/test:/bin/bash
配置说明:Linux系统中UID为0代表最高系统权限,正常情况下仅root账号的UID为0;shell字段为/bin/bash、/bin/sh等可登录shell的账号,需核实是否为授权使用的账号,其余系统账号默认应使用/sbin/nologin禁止登录。
执行以下命令,专项排查UID为0的非root账号,该类账号属于高风险越权账号:
root@kali:~# awk -F: '$3==0 && $1!="root" {print $1}' /etc/passwd
若命令有输出结果,说明系统存在额外的特权账号,需立即核实账号来源并清理。
接下来审计/etc/shadow文件,该文件存储用户密码哈希值,权限配置错误会直接导致密码泄露。执行以下命令查看文件权限:
root@kali:~# stat /etc/shadow
File: /etc/shadow
Size: 1635 Blocks: 8 IO Block: 4096 regular file
Device: 8,1 Inode: 262153 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-04-20 10:20:00.000000000 +0800
Modify: 2026-04-15 14:30:00.000000000 +0800
Change: 2026-04-15 14:30:00.000000000 +0800
Birth: 2026-03-01 09:00:00.000000000 +0800
正常配置下,/etc/shadow文件的权限应为0600,属主与属组均为root。若权限配置大于0600,比如出现其他用户可读权限,会导致密码哈希被非授权用户获取,需立即修复权限。
最后审计用户组配置,重点关注root组与sudo组的成员,执行以下命令:
root@kali:~# grep -E 'sudo|root' /etc/group
root:x:0:
sudo:x:27:kali
需逐行核实sudo组内的用户,仅授权用户可加入该组;root组内除root账号外,不应存在其他普通用户,避免越权风险。
1.2 用户sudo权限配置审计
sudo权限配置不当是Linux本地提权最常见的入口,配置文件为/etc/sudoers,同时/etc/sudoers.d/目录下的所有文件都会被加载生效。
首先执行以下命令,验证sudoers配置文件的语法合法性:
root@kali:~# visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/kali-grant-root: parsed OK
/etc/sudoers.d/README: parsed OK
若输出结果中存在语法错误,会直接导致sudo命令无法正常使用。修改sudoers配置请不要直接使用vi/vim编辑,必须使用visudo命令,该命令会在保存时自动校验语法,避免配置错误导致系统权限管理异常。若已出现配置错误导致sudo无法使用,可通过pkexec visudo命令修复配置。
执行以下命令,查看系统全量生效的sudo权限规则,过滤掉注释与空行:
root@kali:~# cat /etc/sudoers /etc/sudoers.d/* 2>/dev/null | grep -v '^#' | grep -v '^$'
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d
kali ALL=(root) NOPASSWD: ALL
test ALL=(ALL) NOPASSWD: /usr/bin/find, /usr/bin/vim
高风险配置排查要点:
1、NOPASSWD配置项,允许用户无需输入密码执行sudo命令,一旦对应用户账号被控制,红队可直接获取对应权限
2、ALL权限配置,允许用户执行所有系统命令,等同于完全的root权限,仅授权管理员账号可使用该配置
3、包含可提权命令的配置,比如find、vim、less、python、bash等命令,即使仅允许执行该单个命令,红队也可通过命令内置功能实现提权
执行以下命令,专项排查系统中所有NOPASSWD配置项:
root@kali:~# grep -r 'NOPASSWD' /etc/sudoers /etc/sudoers.d/
/etc/sudoers.d/kali-grant-root:kali ALL=(root) NOPASSWD: ALL
/etc/sudoers:test ALL=(ALL) NOPASSWD: /usr/bin/find, /usr/bin/vim
对于排查到的NOPASSWD配置,需严格限制可执行命令的范围,禁止配置ALL参数,同时移除可用于提权的危险命令,仅保留业务必需的最小权限命令。
1.3 文件与目录权限基础审计
文件与目录的权限配置直接决定数据的访问边界,异常的可写权限会导致配置被篡改、恶意代码执行等风险,重点审计系统关键目录与全局可写文件。
首先审计系统关键目录的权限配置,执行以下命令查看根目录权限:
root@kali:~# stat /
File: /
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 8,1 Inode: 2 Links: 18
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-04-01 09:00:00.000000000 +0800
Modify: 2026-03-01 09:00:00.000000000 +0800
Change: 2026-03-01 09:00:00.000000000 +0800
Birth: 2026-02-01 09:00:00.000000000 +0800
根目录的正常权限应为0755,仅root用户可写,若配置为其他用户可写,会导致严重的权限泄露风险。同理,/etc、/root、/usr/bin、/usr/sbin等系统关键目录,均需保证仅root用户可写。
执行以下命令,排查系统中所有全局可写的文件,全局可写代表系统所有用户均可修改文件内容:
root@kali:~# find / -type f -perm -0002 2>/dev/null | head -10
/tmp/test.sh
/tmp/backup.log
/var/tmp/debug.txt
/home/test/run.sh
全局可写文件的风险点在于,若该文件被root权限的进程、计划任务、服务调用,红队可通过修改文件内容插入恶意代码,在进程执行时实现提权。排查过程中,/tmp、/var/tmp等临时目录的文件需重点关注,业务脚本、配置文件禁止设置全局可写权限。
执行以下命令,排查系统中所有全局可写的目录:
root@kali:~# find / -type d -perm -0002 2>/dev/null | grep -v 'tmp'
/home/test/data
/opt/script
全局可写目录的风险在于,红队可在目录中写入恶意文件、替换原有文件,若该目录在特权进程的执行路径中,会直接导致提权。除系统默认的临时目录外,业务相关目录请不要设置全局可写权限。
二、Linux提权风险点专项排查
完成基础权限审计后,需针对Linux系统常见的提权路径做专项排查,提前发现红队可利用的风险点,完成前置防护。
2.1 SUID/SGID权限异常文件排查
SUID权限是Linux系统的特殊权限,设置了SUID的文件,执行时会继承文件属主的权限;若文件属主为root,普通用户执行该文件时会临时获得root权限,是红队本地提权的核心利用路径。
执行以下命令,排查系统中所有属主为root且设置了SUID权限的文件,为方便排查可将结果输出到文件中:
root@kali:~# find / -type f -user root -perm -4000 2>/dev/null | tee suid_files.txt
/usr/bin/su
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/mount
/usr/bin/umount
/usr/bin/fusermount3
/usr/sbin/mount.nfs
/home/test/find
/opt/script/bash
正常系统中,SUID权限文件仅包含su、sudo、passwd等系统默认工具,排查重点为非系统默认路径的SUID文件,以及find、vim、bash、python、nmap等可用于提权的工具。
以find命令为例,若该文件设置了root属主的SUID权限,红队可通过以下命令直接获取root权限:
test@kali:~$ /home/test/find . -exec /bin/bash -p \;
bash-5.2# id
uid=1001(test) gid=1001(test) euid=0(root) groups=1001(test)
对于排查到的非必要SUID文件,可通过chmod u-s 文件名的命令移除SUID权限;对于业务必需的SUID文件,需严格限制文件的访问权限,仅允许授权用户执行。
同理,执行以下命令排查属主为root且设置了SGID权限的文件,SGID权限会让文件执行时继承属组的权限,若属组为root,同样存在提权风险:
root@kali:~# find / -type f -user root -perm -2000 2>/dev/null
/usr/bin/wall
/usr/bin/chage
/usr/bin/ssh-agent
/usr/bin/crontab
/usr/sbin/unix_chkpwd
2.2 可写配置文件与计划任务风险排查
计划任务是Linux系统中定时执行脚本或程序的功能,若计划任务以root权限执行,且对应的脚本、程序或配置文件存在可写权限,红队可通过篡改内容实现提权。
系统级计划任务的配置文件与目录包括/etc/crontab、/etc/cron.d/、/etc/cron.hourly/、/etc/cron.daily/等,用户级计划任务存储在/var/spool/cron/crontabs/目录下。
首先执行以下命令,查看系统核心crontab配置:
root@kali:~# cat /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
0 2 * * * root /opt/backup/backup.sh
重点关注以root用户执行的任务,需逐行核实任务调用的脚本或程序的权限。以上述配置中的/opt/backup/backup.sh为例,执行以下命令查看文件权限:
root@kali:~# stat /opt/backup/backup.sh
File: /opt/backup/backup.sh
Size: 320 Blocks: 8 IO Block: 4096 regular file
Device: 8,1 Inode: 263001 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-04-10 09:00:00.000000000 +0800
Modify: 2026-04-01 09:00:00.000000000 +0800
Change: 2026-04-01 09:00:00.000000000 +0800
Birth: 2026-03-01 09:00:00.000000000 +0800
该文件设置了0777全局可写权限,任何用户都可以修改脚本内容,在每日凌晨2点执行时,插入的恶意代码会以root权限运行,属于极高风险配置。
执行以下命令,批量排查cron相关目录下的所有文件权限:
root@kali:~# find /etc/cron* -type f -exec ls -la {} \; 2>/dev/null
-rw-r--r-- 1 root root 1042 Mar 1 09:00 /etc/crontab
-rw-r--r-- 1 root root 102 Mar 1 09:00 /etc/cron.d/backup
-rwxr-xr-x 1 root root 320 Apr 1 09:00 /etc/cron.daily/0anacron
-rwxr-xr-x 1 root root 539 Mar 1 09:00 /etc/cron.daily/apt-compat
同时需关注计划任务中的PATH环境变量,若PATH配置中包含当前目录(.)或普通用户可写的目录,且目录顺序在系统目录之前,红队可在对应目录写入与系统命令同名的恶意文件,计划任务执行时会优先运行恶意文件,实现提权。
除计划任务外,还需重点排查/etc/passwd、/etc/sudoers、/etc/group、/etc/rc.local、/etc/systemd/system/等系统配置文件与服务目录,若这些文件或目录存在非root用户可写权限,红队可直接修改配置实现提权。
2.3 内核与系统组件漏洞风险排查
未修复的内核与系统组件漏洞,是红队实现本地提权的重要路径,即使权限配置完全合规,攻击者也可通过漏洞绕过权限限制获取root权限。
首先执行以下命令,查看系统内核版本:
root@kali:~# uname -a
Linux kali 6.8.0-kali3-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.8.6-1kali1 (2024-04-22) x86_64 GNU/Linux
需根据内核版本,排查是否存在公开的提权漏洞,常见的内核提权漏洞包括脏牛(CVE-2016-5195)、Dirty Pipe(CVE-2022-0847)、PTRACE_TRACEME漏洞(CVE-2019-13272)等。对于存在公开漏洞的内核版本,需立即升级到官方修复后的稳定版本。
执行以下命令,查看系统sudo组件的版本,sudo是提权漏洞高发的组件,历史上出现过多个本地提权漏洞:
root@kali:~# sudo -V
Sudo version 1.9.15p5
Sudoers policy plugin version 1.9.15p5
Sudoers file grammar version 48
Sudoers I/O plugin version 1.9.15p5
同理,polkit、dbus、docker等系统组件也存在多个历史提权漏洞,需定期更新组件版本,修复已知安全漏洞。对于生产环境系统,建议配置自动安全更新,及时修复高危漏洞。
2.4 权限配置不当的服务与进程排查
以root权限运行的服务与进程,若对应的可执行文件、配置文件、日志目录存在可写权限,红队可通过篡改内容实现提权,该类风险在业务自定义服务中尤为常见。
执行以下命令,查看系统中所有以root权限运行的进程:
root@kali:~# ps aux | grep root | head -10
root 1 0.0 0.1 168432 12340 ? Ss 09:00 0:01 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 09:00 0:00 [kthreadd]
root 300 0.0 0.2 321456 23456 ? Ss 09:00 0:00 /usr/sbin/sshd -D
root 1200 0.0 0.1 245678 11234 ? S 09:05 0:00 /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
root 1500 0.0 0.3 456789 34567 ? Ssl 09:10 0:02 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
重点排查非系统默认的业务进程,以上述nginx进程为例,执行以下命令查看可执行文件的权限:
root@kali:~# stat /opt/nginx/sbin/nginx
File: /opt/nginx/sbin/nginx
Size: 1245678 Blocks: 2432 IO Block: 4096 regular file
Device: 8,1 Inode: 264001 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-03-01 09:00:00.000000000 +0800
Modify: 2026-03-01 09:00:00.000000000 +0800
Change: 2026-03-01 09:00:00.000000000 +0800
Birth: 2026-02-01 09:00:00.000000000 +0800
若该文件存在非root用户可写权限,攻击者可替换可执行文件,重启服务后即可执行恶意代码获取root权限。同时需排查服务对应的配置文件、日志目录、脚本文件的权限,避免出现可写风险。
对于systemd管理的服务,执行以下命令查看自定义服务的配置文件,重点关注服务的执行用户与ExecStart参数:
root@kali:~# cat /etc/systemd/system/test.service
[Unit]
Description=Test Business Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/home/test/start.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
该服务以root权限运行,执行的脚本位于普通用户的家目录下,若脚本存在可写权限,攻击者可直接修改脚本内容,重启服务后实现提权。对于非必需的服务,请不要以root用户运行,需配置独立的普通用户执行服务进程,遵循最小权限原则。
三、自动化审计工具的部署与使用
手动审计可精准定位风险点,但效率较低,可通过专业的自动化审计工具完成全系统扫描,提升排查效率。
3.1 auditd审计工具部署与配置
auditd是Linux系统内置的审计工具,可实时监控系统关键文件的修改、特权命令的执行、权限变更等操作,实现风险行为的实时记录与事后追溯。
首先执行以下命令安装并启动auditd服务:
root@kali:~# apt update && apt install auditd -y
命中:1 http://http.kali.org/kali kali-rolling InRelease
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
auditd 已经是最新版 (1:3.1.2-2)。
0 个升级,0 个新安装,0 个要删除和 0 个不升级。
root@kali:~# systemctl enable --now auditd
Synchronizing state of auditd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable auditd
root@kali:~# systemctl status auditd
● auditd.service - Security Auditing Service
Loaded: loaded (/lib/systemd/system/auditd.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-04-20 10:30:00 CST; 10s ago
Docs: man:auditd(8)
https://github.com/linux-audit/audit-userspace
Main PID: 2000 (auditd)
Tasks: 1 (limit: 4654)
Memory: 1.2M
CPU: 15ms
CGroup: /system.slice/auditd.service
└─2000 /sbin/auditd
执行以下命令,配置审计规则,监控系统关键权限文件的修改操作:
root@kali:~# auditctl -w /etc/passwd -p wa -k passwd_modify
root@kali:~# auditctl -w /etc/shadow -p wa -k shadow_modify
root@kali:~# auditctl -w /etc/sudoers -p wa -k sudoers_modify
root@kali:~# auditctl -w /etc/crontab -p wa -k crontab_modify
参数说明:-w指定监控的文件路径,-p wa指定监控写入与属性变更操作,-k设置规则的关键词,便于后续日志检索。
执行以下命令,查看已配置的审计规则:
root@kali:~# auditctl -l
-w /etc/passwd -p wa -k passwd_modify
-w /etc/shadow -p wa -k shadow_modify
-w /etc/sudoers -p wa -k sudoers_modify
-w /etc/crontab -p wa -k crontab_modify
当监控的文件被修改时,可通过ausearch命令检索对应的审计日志,比如查看/etc/sudoers文件的修改记录:
root@kali:~# ausearch -k sudoers_modify
----
time->Mon Apr 20 10:35:00 2026
type=PROCTITLE msg=audit(1713580500.123:45): proctitle=76697375646F002D73
type=PATH msg=audit(1713580500.123:45): item=0 name="/etc/sudoers.tmp" inode=262150 dev=08:01 mode=0100600 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1713580500.123:45): cwd="/root"
type=SYSCALL msg=audit(1713580500.123:45): arch=c000003e syscall=82 success=yes exit=0 a0=55f8a7b8d240 a1=55f8a7b8d280 a2=0 a3=7fff5a6b78c0 items=1 ppid=1900 pid=2050 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="visudo" exe="/usr/sbin/visudo" subj=unconfined key="sudoers_modify"
日志中会记录操作的时间、执行的命令、操作用户、进程ID等信息,可用于风险行为的追溯与排查。
3.2 Lynis安全审计工具使用
Lynis是一款开源的Linux安全审计工具,可自动扫描系统的权限配置、提权风险、漏洞、合规性等内容,生成详细的审计报告,是蓝队常用的安全审计工具。
执行以下命令安装Lynis:
root@kali:~# apt install lynis -y
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
lynis 已经是最新版 (3.0.9-1)。
0 个升级,0 个新安装,0 个要删除和 0 个不升级。
执行以下命令,启动系统全量安全审计:
root@kali:~# lynis audit system
[+] Initializing program
------------------------------------
- Detecting OS... [ DONE ]
- Checking profiles... [ DONE ]
- Detecting language and localization [ DONE ]
- Using language: en (English)
- Program version: 3.0.9
- Operating system: Linux
- Kernel version: 6.8.0
- Hardware platform: x86_64
- Hostname: kali
- Auditor: root
- Scan mode: full system scan
- Log file: /var/log/lynis.log
- Report file: /var/log/lynis-report.dat
... 扫描过程省略 ...
[+] File Permissions
------------------------------------
- Checking umask value [ OK ]
- Checking file permissions in /etc [ OK ]
- Checking file permissions in /home [ WARNING ]
- Checking for SUID/SGID files [ FOUND ]
- Checking for world writable files [ FOUND ]
- Checking for orphaned files [ OK ]
... 扫描过程省略 ...
===============================================================================
Lynis security scan details:
Hardening index : 65 [############## ]
Tests performed : 267
Plugins enabled : 0
Components:
- Firewall [V]
- Malware scanner [X]
Scan mode:
- Normal [V]
- Forensics [X]
- Pentest [X]
Tips:
- Run lynis show details TEST-ID to see details about a test
- Use the --profile option to scan with a custom profile
- Enable plugins to get more functionality
- Check the log file and report for more details
扫描完成后,Lynis会生成系统加固指数,标记出所有风险项与警告项,详细的扫描报告存储在/var/log/lynis.log文件中,可根据报告中的提示逐一修复风险点。
四、风险修复与权限加固建议
完成审计与排查后,需针对发现的风险点完成修复,同时建立常态化的权限管理机制,具体建议如下:
1、严格限制系统用户的权限,删除未使用的闲置账号,禁止非授权用户拥有sudo权限,sudo配置需遵循最小权限原则,严格限制可执行的命令范围,禁止使用NOPASSWD: ALL类的全权限配置
2、规范文件与目录的权限配置,系统关键目录与文件仅允许root用户可写,移除非必要的SUID/SGID权限,定期排查全局可写的文件与目录,业务脚本与配置文件禁止设置全局可写权限
3、定期更新系统内核与软件包,修复已知的安全漏洞,对于不再维护的系统版本,及时升级到官方支持的稳定版本,生产环境建议配置自动安全更新,及时修复高危漏洞
4、配置系统审计工具,监控关键文件的修改与特权命令的执行,建立定期安全审计机制,每月至少完成一次全系统的权限审计与风险排查,及时发现并修复潜在风险
5、规范服务与进程的运行权限,禁止非必要的服务以root用户运行,为业务服务配置独立的普通用户,服务对应的可执行文件、配置文件与脚本需严格限制写入权限,仅授权用户可修改














