各位大佬,想看那种网络设备/操作系统/数据库/中间件的测评命令清单,可在留言区留言!
依据 GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》等保2.0三级 标准,针对 Oracle Solaris 11.4/11.3/10 给出可直接落地的测评命令清单。
版本说明:Solaris 11使用IPS包管理系统和SMF服务管理,Solaris 10使用SVCS和SVR4包管理
一、身份鉴别(8.1.4.1)
1.1 账户与密码策略
| 测评项 | Solaris 11命令 | Solaris 10命令 | 达标判据 |
|---|---|---|---|
| 查看用户账户 | cat /etc/passwd / getent passwd | 相同 | 无空账户,UID唯一 |
| 检查密码策略 | passwd -s username / userattr | passwd -s / grep username /etc/shadow | 启用复杂度,定期更换 |
| 查看密码过期 | userattr -S password-history | passwd -f username | ≤90天 |
| 检查空口令 | logins -p | logins -p | 无输出 |
详细命令:
# 1. 查看所有用户账户(Solaris 11/10通用)
cat /etc/passwd
getent passwd
# 2. 检查空口令账户(关键命令)
logins -p
# 输出应为空,如有输出则为空口令用户
# 3. 查看无效/过期账户
logins -x
# 或查看过期密码
logins -d
# 4. 查看系统用户与角色(Solaris特有RBAC)
cat /etc/user_attr
# 或
userattr -S
# 检查:roles profiles
# 5. 查看特定用户密码状态
passwd-s username
# 输出示例:
# username PS 01/15/24 0 90 7 -1 # PS=密码锁定,90天最大使用期,7天警告期
# 6. 查看密码策略配置(Solaris 11使用user_attr)
userattr -S password-history
userattr -S password-minlength
userattr -S password-minalpha
userattr -S password-minnumeric
# 7. 查看/etc/default/passwd配置
cat /etc/default/passwd
# 关键参数:
# PASSLENGTH=8 # 最小长度
# MINALPHA=2 # 最少字母
# MINDIGIT=1 # 最少数字
# MINUPPER=1 # 最少大写
# MINLOWER=1 # 最少小写
# MINNONALPHA=1 # 最少非字母数字
# MAXWEEKS=13 # 最大使用周数(约90天)
# MINWEEKS=1 # 最小使用周数
# WARNWEEKS=1 # 警告周数
# 8. 检查密码哈希算法(Solaris 11默认SHA512)
grep CRYPT /etc/security/policy.conf
# 或
cat /etc/security/policy.conf |grep CRYPT_DEFAULT
# 期望:CRYPT_DEFAULT=6 (SHA512)
# 9. 查看PAM配置(Solaris使用Solaris PAM)
cat /etc/pam.conf
# 或Solaris 11的PAM目录
ls /etc/pam.d/
cat /etc/pam.d/login
cat /etc/pam.d/other
# 10. 检查密码字典检查
grep"pam_authtok_check" /etc/pam.conf
# 或
cat /etc/pam.d/passwd |grep cracklib
1.2 登录失败处理与会话超时
| 测评项 | Solaris 11命令 | Solaris 10命令 | 达标判据 |
|---|---|---|---|
| 查看登录失败记录 | lastb / faillog | last / lastb | 记录完整 |
| 检查账户锁定 | userattr lock_after_retries | grep LOCK /etc/security/policy.conf | 3-5次失败锁定 |
| 查看会话超时 | userattr idlecheck / tmout | echo $TMOUT / cat /etc/profile | ≤10分钟 |
| 检查SSH超时 | sshd -T / cat /etc/ssh/sshd_config | 相同 | ClientAliveInterval 300 |
# 11. 查看登录失败记录(需启用审计)
lastb
# 或查看详细登录历史
last -a
# 12. 查看当前登录用户
who
w
# 或详细查看
whodo
# 13. 检查账户锁定策略(Solaris 11)
userattr -S lock_after_retries
# 或在user_attr中查看
grep"lock_after_retries" /etc/user_attr
# 14. 查看/etc/security/policy.conf中的锁定配置
cat /etc/security/policy.conf |grep-E"LOCKOUT|RETRIES"
# 期望:
# LOCK_AFTER_RETRIES=YES
# RETRIES=3
# 15. 检查用户空闲超时(Solaris特有idletime)
userattr -S idletime
# 或在/etc/user_attr中配置
grep"idletime" /etc/user_attr
# 16. 查看系统级超时配置
cat /etc/profile |grep-itimeout
cat /etc/profile |grep TMOUT
# 期望:export TMOUT=600
# 17. 检查SSH会话超时
cat /etc/ssh/sshd_config |grep-E"ClientAlive|TCPKeepAlive"
# 期望:
# ClientAliveInterval 300
# ClientAliveCountMax 0
# TCPKeepAlive no
# 18. 查看SSH登录失败处理
cat /etc/ssh/sshd_config |grep-E"MaxAuthTries|PermitRootLogin"
# 期望:
# MaxAuthTries 3
# PermitRootLogin no
# 或PermitRootLogin prohibit-password
1.3 远程管理安全
| 测评项 | 命令 | 达标判据 |
|---|---|---|
| 检查SSH服务 | svcs ssh / service ssh status | 在线,仅v2 |
| 禁用Telnet | svcs telnet | 禁用或未安装 |
| 检查FTP服务 | svcs ftp / svcs proftpd | 禁用或使用SFTP |
| 查看控制台安全 | cat /etc/default/login | 安全设置 |
# 19. 检查SSH服务状态(Solaris 11 SMF)
svcs ssh
# 或Solaris 10
svcadm enablessh
svcs -a|grepssh
# 20. 查看SSH详细配置
cat /etc/ssh/sshd_config |grep-v"^#"|grep-v"^$"
# 关键检查:
# Protocol 2
# Ciphers aes256-ctr,aes192-ctr,aes128-ctr
# MACs hmac-sha2-512,hmac-sha2-256
# KexAlgorithms ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256
# 21. 检查Telnet服务(应禁用)
svcs telnet
# 或
inetadm -l telnet
# 期望:disabled或未安装
# 22. 检查FTP服务(应禁用或使用vsftpd/sftpd)
svcs ftp
svcs -a|grepftp
# 或查看inetd服务
inetadm -l|grepftp
# 23. 查看控制台安全设置
cat /etc/default/login
# 关键参数:
# CONSOLE=/dev/console # 仅控制台可root登录
# PASSREQ=YES # 要求密码
# SYSLOG=YES # 记录日志
# DISABLETIME=900 # 登录失败禁用时间(秒)
# RETRIES=3 # 重试次数
# LOCK_AFTER_RETRIES=YES # 失败后锁定
# 24. 检查直接root登录限制
cat /etc/default/login |grep CONSOLE
# 应设置:CONSOLE=/dev/console 或更严格
# 25. 查看SSH公钥认证配置
cat /etc/ssh/sshd_config |grep-E"PubkeyAuthentication|AuthorizedKeysFile"
# 期望:PubkeyAuthentication yes
二、访问控制(8.1.4.2)
2.1 权限管理与RBAC(Solaris特有)
Solaris具有强大的 RBAC(Role-Based Access Control) 系统,这是其区别于Linux的重要特性。
| 测评项 | 命令 | 达标判据 |
|---|---|---|
| 查看角色定义 | cat /etc/user_attr / roles | 角色分离清晰 |
| 检查配置文件 | cat /etc/security/prof_attr | 最小权限原则 |
| 查看授权 | cat /etc/security/auth_attr | 授权细化 |
| 检查执行属性 | cat /etc/security/exec_attr | 命令级控制 |
# 26. 查看RBAC用户属性
cat /etc/user_attr
# 格式:username:::type=role;roles=role1,role2;profiles=All
# 检查:root是否直接使用,是否有分离的管理角色
# 27. 查看系统角色
roles
# 或
cat /etc/user_attr |greptype=role
# 28. 查看配置文件(Profiles)
cat /etc/security/prof_attr
# 检查预定义配置文件:System Administrator, Operator, Basic Solaris User等
# 29. 查看授权定义
cat /etc/security/auth_attr |head-20
# 检查:solaris.* 授权命名空间
# 30. 查看执行属性(命令级授权)
cat /etc/security/exec_attr |grep"System Administrator"
# 检查:哪些命令可被特定profile执行
# 31. 查看用户配置文件分配
profiles username
# 或
userattr profiles username
# 32. 查看用户授权
auths username
# 或
userattr auths username
# 33. 检查root角色分离(最佳实践)
grep"^root:" /etc/user_attr
# 期望:root:::type=normal;roles=root; 或更严格的角色分配
# 34. 查看/etc/sudoers(如使用sudo替代RBAC)
cat /etc/sudoers
visudo -c# 检查语法
2.2 文件系统权限与ACL
Solaris支持丰富的文件系统安全特性,包括 ZFS ACL、扩展属性 等。
# 35. 查看关键文件权限
ls-la /etc/passwd /etc/shadow /etc/user_attr
# 期望:
# -rw-r--r-- 1 root sys /etc/passwd
# -r-------- 1 root sys /etc/shadow
# -rw-r--r-- 1 root sys /etc/user_attr
# 36. 查看文件ACL(Solaris支持POSIX和NFSv4 ACL)
getfacl /etc/passwd
# 或ZFS文件系统
ls-V /etc/passwd # 显示详细ACL
# 37. 查看ZFS文件系统安全属性
zfs get all rpool/ROOT/solaris |grep-E"aclmode|aclinherit|xattr|encryption"
# 关键属性:
# aclmode: restricted
# aclinherit: restricted
# encryption: aes-256-gcm (如启用)
# 38. 查看文件扩展属性(Solaris特有)
runat /etc/passwd ls-la# 查看隐藏属性
# 或使用
getfattr -d /etc/passwd
# 39. 检查SUID/SGID文件(高风险)
find / -type f \(-perm-4000-o-perm-2000\)-ls2>/dev/null
# 或更精确
find / -type f -perm-4000-execls-la{}\;2>/dev/null
# 40. 查看世界可写文件(高风险)
find / -type f -perm-002-ls2>/dev/null
find / -type d -perm-002-ls2>/dev/null
# 41. 检查无主文件
find / -nouser-o-nogroup2>/dev/null
三、安全审计(8.1.4.3)
3.1 Solaris审计系统(BSM)
Solaris使用 BSM(Basic Security Module) 进行审计,这是其企业级安全特性。
| 测评项 | 命令 | 达标判据 |
|---|---|---|
| 检查审计状态 | auditconfig -getcond | auditing |
| 查看审计策略 | auditconfig -getpolicy | 覆盖关键事件 |
| 检查审计日志 | ls -la /var/audit | 存在且权限正确 |
| 查看审计配置 | cat /etc/security/audit_control | 配置完整 |
# 42. 检查审计系统状态
auditconfig -getcond
# 期望输出:audit condition = auditing
# 或:auditconfig -getkernel
# 43. 查看审计策略
auditconfig -getpolicy
# 期望包含:cnt, argv, arge, seq, trail, group, public
# 44. 查看审计类配置
cat /etc/security/audit_class
# 预定义类:all, no, lo, na, cl, co, fa, fd, fm, fr, fw, pc, ps
# 45. 查看审计事件到类的映射
cat /etc/security/audit_event |head-30
# 格式:event_num:event_name:description:classes
# 46. 查看审计控制文件(核心配置)
cat /etc/security/audit_control
# 关键配置:
# dir:/var/audit # 审计日志目录
# dir:/var/audit/backup # 备份目录
# flags:lo,ss,as,ua,ex,nt # 审计标志
# naflags:lo,nt # 非属性审计
# minfree:20 # 最小剩余空间%
# plugin: # 插件配置
# 47. 查看用户审计掩码
auditconfig -getumask
# 或特定用户
userattr audit_flags username
# 48. 查看审计日志文件
ls-la /var/audit/
# 检查:权限600,属主root,定期轮转
# 49. 查看当前审计日志大小
du-sh /var/audit/
df-h /var/audit
# 50. 查看审计记录(需要root)
auditreduce -d today | praudit -s
# 或查看特定事件
auditreduce -c lo -d today | praudit -s# 登录事件
# 51. 查看审计统计
auditconfig -getstat
# 或重置统计
auditconfig -setstat
# 52. 检查审计远程传输(如配置)
cat /etc/security/audit_control |grep plugin
# 或查看audit_remote插件
svcs auditd
cat /etc/security/audit_remote
3.2 系统日志与Syslog
# 53. 查看系统日志配置
cat /etc/syslog.conf
# Solaris 11使用rsyslog或传统syslog
cat /etc/rsyslog.conf 2>/dev/null ||cat /etc/syslog.conf
# 54. 查看日志服务状态(Solaris 11 SMF)
svcs system-log
# 或Solaris 10
svcadm enable system-log
# 55. 查看日志文件
ls-la /var/adm/
# 关键日志:
# /var/adm/messages # 系统消息
# /var/adm/sulog # su命令日志
# /var/adm/lastlog # 最后登录
# /var/adm/wtmpx # 登录历史(二进制)
# /var/adm/utmpx # 当前登录
# 56. 查看系统消息
tail-100 /var/adm/messages
# 或使用dmesg
dmesg|tail-50
# 57. 查看安全相关日志
tail-50 /var/adm/sulog
# 检查:su切换记录,失败尝试
# 58. 查看登录历史(二进制格式)
last |head-20
lastb |head-20# 失败登录
# 59. 查看FTP日志(如启用)
tail-50 /var/adm/xferlog
# 或
tail-50 /var/log/proftpd/proftpd.log
# 60. 查看Cron日志
tail-50 /var/cron/log
# 61. 查看SMF服务日志(Solaris 11特有)
svcs -Lv svc:/system/system-log:default
# 或查看所有服务日志
ls-la /var/svc/log/
四、入侵防范(8.1.4.4)
4.1 系统安全状态
| 测评项 | 命令 | 达标判据 |
|---|---|---|
| 查看系统版本 | uname -a / cat /etc/release | 官方支持版本 |
| 检查补丁级别 | pkg list entire / showrev -p | 最新补丁 |
| 查看加固状态 | cat /etc/security/audit_control | 已加固 |
| 检查ASLR等 | pargs -e $$ | 启用地址随机化 |
# 62. 查看系统版本信息
uname-a
# 输出:SunOS hostname 5.11 11.4.0.15.0 sun4v sparc sun4v
cat /etc/release
# 详细版本信息
# 63. 查看Solaris版本(不同命令)
showrev -r# Solaris 10
cat /etc/release # Solaris 11
pkg info entire # Solaris 11 IPS
# 64. 查看已安装补丁(Solaris 10)
showrev -p|head-20
# 或Solaris 11查看软件包更新
pkg list -u# 可更新包
pkg update --dry-run # 模拟更新
# 65. 查看系统安全加固配置
cat /etc/security/policy.conf
# 关键参数:
# PRIV_DEFAULT=basic,proc_clock_highres
# PRIV_LIMIT=all
# LOCK_AFTER_RETRIES=YES
# DISABLE_ADB=YES # 禁用ADB调试器
# 66. 检查进程地址空间随机化(ASLR)
pargs -e$$|grep-i random
# 或查看系统配置
cat /etc/security/policy.conf |grep ASLR
# 67. 查看栈保护(如果应用编译时启用)
/usr/ccs/bin/elfdump -d /usr/bin/ls |grep STACK
# 68. 查看系统资源限制(防DoS)
cat /etc/system |grep-v"^*"|grep-v"^$"
# 或使用prctl
prctl -n process.max-file-descriptor $$
prctl -n process.max-stack-size $$
# 69. 查看系统参数(类似Linux sysctl)
ndd /dev/tcp tcp_ip_abort_interval
# 或使用ipadm(Solaris 11)
ipadm show-prop -p _conn_req_max_q tcp
# 70. 查看核心转储配置(安全考虑)
cat /etc/coreadm.conf
coreadm
# 建议:限制核心转储,或定向到安全目录
4.2 网络安全配置
# 71. 查看网络接口配置
ifconfig-a
# 或Solaris 11使用ipadm
ipadm show-addr
# 72. 查看路由表
netstat-rn
# 或
route -p show
# 73. 查看监听端口
netstat-an|grep LISTEN
# 或
ss -tunlp# 如安装iproute包
# 74. 查看防火墙状态(IP Filter或Solaris防火墙)
# Solaris 10/11 IP Filter
ipfstat -io
cat /etc/ipf/ipf.conf
# Solaris 11使用netcat或ipfilter
svcs ipfilter
# 75. 查看TCP Wrappers配置
cat /etc/hosts.allow
cat /etc/hosts.deny
# 期望:hosts.deny包含ALL: ALL
# 76. 查看网络服务监听(inetd/SMF)
inetadm -l|grep-v disabled # Solaris 10
svcs -a|grep online |grep-v system # Solaris 11
# 77. 查看NFS共享(如使用)
showmount -e localhost
cat /etc/dfs/dfstab
cat /etc/dfs/sharetab
# 78. 查看NFS安全选项
sharemgr show -v
# 或
zfs get sharenfs
# 79. 查看DNS配置
cat /etc/resolv.conf
cat /etc/nsswitch.conf |grep hosts
# 80. 查看LDAP/NIS配置(如使用)
cat /etc/nsswitch.conf
ldapclient list # 如使用LDAP
ypwhich # 如使用NIS
五、恶意代码防范与完整性(8.1.4.5/8.1.4.6)
5.1 系统完整性检查
| 测评项 | 命令 | 达标判据 |
|---|---|---|
| 查看文件完整性 | pkg verify / bart | 无异常修改 |
| 检查关键文件 | digest -a sha256 | 哈希校验 |
| 查看软件包签名 | pkg list -v | 签名验证 |
| 检查启动完整性 | bootadm list-archive | 启动归档完整 |
# 81. 使用BART(Basic Audit Reporting Tool)检查文件完整性
# 创建基线
bart create -I> /var/bart/baseline.manifest
# 对比检查
bart compare /var/bart/baseline.manifest /var/bart/current.manifest
# 82. 验证关键系统文件(Solaris 11 IPS)
pkg verify
# 或验证特定包
pkg verify entire
pkg verify system/core-os
# 83. 查看软件包签名状态
pkg list -v|grep SIGNATURE
# 或
pkg info --signature entire
# 84. 查看软件包内容
pkg contents -r system/core-os |head-20
# 85. 计算文件哈希(替代md5sum)
digest -a sha256 /etc/passwd
digest -a md5 /etc/shadow
# 86. 查看启动归档(Solaris 11)
bootadm list-archive
bootadm list-menu
# 87. 检查启动环境(BE - Boot Environment)
beadm list
# 查看当前和备用启动环境
# 88. 查看系统快照(ZFS快照,用于恢复)
zfs list -t snapshot
# 或查看自动快照
svcs time-slider
cat /etc/timeslider/timeslider.xml
# 89. 查看防病毒软件(如安装McAfee/Symantec)
ps-ef|grep-i"mcafee\|symantec\|sophos"
# 或查看
pkg list |grep-i virus
六、数据备份与恢复(8.1.4.9)
6.1 ZFS备份与快照
Solaris的 ZFS文件系统 提供了强大的快照和备份功能。
# 90. 查看ZFS池状态
zpool status
zpool list
# 91. 查看ZFS文件系统
zfs list
zfs list -o name,used,available,compressratio,mountpoint
# 92. 查看ZFS快照
zfs list -t snapshot
# 或特定文件系统
zfs list -t snapshot rpool/ROOT/solaris
# 93. 查看自动快照配置
svcs time-slider
cat /etc/timeslider/timeslider.xml
# 94. 查看ZFS备份(发送/接收)
zfs get all |grep send
# 或查看计划任务
crontab-l|grep zfs
# 95. 查看ZFS属性(包括压缩、加密)
zfs get compression rpool
zfs get encryption rpool # 查看加密根池
zfs get keystatus rpool # 查看密钥状态
# 96. 查看ZFS加密数据集
zfs list -o name,encryption,keystatus,keysource
# 检查敏感数据是否加密存储
# 97. 查看传统备份(ufsdump/tar)
cat /etc/dumpdates
# 或查看备份脚本
ls-la /etc/backup/
七、SMF服务管理(Solaris 11特有)
Solaris 11使用 SMF(Service Management Facility) 管理服务,替代传统的init脚本。
# 98. 查看所有服务状态
svcs -a
# 或仅查看在线服务
svcs -a|grep online
# 99. 查看特定服务
svcs ssh
svcs -lssh# 详细信息
svcs -Lvssh# 包括日志
# 100. 查看服务依赖
svcs -d svc:/network/ssh:default # 依赖此服务的服务
svcs -D svc:/network/ssh:default # 此服务依赖的服务
# 101. 查看服务配置
svcprop svc:/network/ssh:default
# 或特定属性
svcprop -p config svc:/network/ssh:default
# 102. 查看服务日志
svcs -L svc:/network/ssh:default
# 或查看所有服务日志位置
ls-la /var/svc/log/
# 103. 查看维护模式服务(故障服务)
svcs -x
# 或
svcs -xv# 详细解释
# 104. 查看服务历史
svcs -H svc:/network/ssh:default
八、一键巡检脚本(Solaris版)
#!/bin/bash
# Oracle Solaris 等保三级一键巡检脚本
# 支持:Solaris 10/11 (SPARC/x86)
# 执行权限:root
INSPECTION_LOG="/var/log/solaris_inspection_$(date +%Y%m%d_%H%M%S).log"
echo"=========================================="|tee-a$INSPECTION_LOG
echo" Oracle Solaris 等保三级巡检报告"|tee-a$INSPECTION_LOG
echo" 时间: $(date)"|tee-a$INSPECTION_LOG
echo" 主机: $(uname-n)"|tee-a$INSPECTION_LOG
echo" 版本: $(uname-v)"|tee-a$INSPECTION_LOG
echo"=========================================="|tee-a$INSPECTION_LOG
check_pass(){
echo-e"\033[32m[PASS]\033[0m $1"|tee-a$INSPECTION_LOG
echo" $2"|tee-a$INSPECTION_LOG2>/dev/null
}
check_fail(){
echo-e"\033[31m[FAIL]\033[0m $1"|tee-a$INSPECTION_LOG
echo" $2"|tee-a$INSPECTION_LOG2>/dev/null
}
check_warn(){
echo-e"\033[33m[WARN]\033[0m $1"|tee-a$INSPECTION_LOG
echo" $2"|tee-a$INSPECTION_LOG2>/dev/null
}
# 1. 身份鉴别检查
echo""|tee-a$INSPECTION_LOG
echo"===== 1. 身份鉴别 ====="|tee-a$INSPECTION_LOG
echo"--- 空口令检查 ---"|tee-a$INSPECTION_LOG
empty_pass=$(logins -p2>/dev/null)
if[-z"$empty_pass"];then
check_pass "空口令检查""未发现空口令用户"
else
check_fail "空口令检查""发现空口令用户: $empty_pass"
fi
echo"--- 密码策略检查 ---"|tee-a$INSPECTION_LOG
if[-f /etc/default/passwd ];then
passlen=$(grep"^PASSLENGTH=" /etc/default/passwd |cut-d=-f2)
if["$passlen"-ge8]2>/dev/null;then
check_pass "密码最小长度""当前设置: $passlen"
else
check_fail "密码最小长度""当前设置: ${passlen:-未设置},建议≥8"
fi
maxweeks=$(grep"^MAXWEEKS=" /etc/default/passwd |cut-d=-f2)
if["$maxweeks"-le13]2>/dev/null;then
check_pass "密码最大使用期""当前设置: ${maxweeks}周(约$((maxweeks*7))天)"
else
check_warn "密码最大使用期""当前设置: ${maxweeks:-未设置}周,建议≤13周"
fi
else
check_fail "密码策略文件""/etc/default/passwd不存在"
fi
echo"--- 账户锁定策略 ---"|tee-a$INSPECTION_LOG
lockout=$(grep"^LOCK_AFTER_RETRIES=" /etc/security/policy.conf 2>/dev/null |cut-d=-f2)
if["$lockout"="YES"];then
retries=$(grep"^RETRIES=" /etc/default/login 2>/dev/null |cut-d=-f2)
check_pass "账户锁定""启用锁定,重试次数: ${retries:-3}"
else
check_fail "账户锁定""未启用登录失败锁定"
fi
echo"--- SSH安全配置 ---"|tee-a$INSPECTION_LOG
if[-f /etc/ssh/sshd_config ];then
ssh_ver=$(grep"^Protocol" /etc/ssh/sshd_config |awk'{print $2}')
if["$ssh_ver"="2"];then
check_pass "SSH协议版本""强制使用SSHv2"
else
check_warn "SSH协议版本""未强制SSHv2,当前: ${ssh_ver:-未设置}"
fi
root_login=$(grep"^PermitRootLogin" /etc/ssh/sshd_config |awk'{print $2}')
if["$root_login"="no"]||["$root_login"="prohibit-password"];then
check_pass "Root远程登录""已限制: $root_login"
else
check_fail "Root远程登录""未限制root登录: ${root_login:-未设置}"
fi
else
check_fail "SSH配置""sshd_config不存在"
fi
# 2. 访问控制检查
echo""|tee-a$INSPECTION_LOG
echo"===== 2. 访问控制 ====="|tee-a$INSPECTION_LOG
echo"--- RBAC配置 ---"|tee-a$INSPECTION_LOG
if[-f /etc/user_attr ];then
root_role=$(grep"^root:" /etc/user_attr |grep"type=role")
if[-n"$root_role"];then
check_pass "RBAC配置""root已配置为角色"
else
check_warn "RBAC配置""root可能直接使用,建议启用RBAC"
fi
else
check_warn "RBAC配置""未找到user_attr文件"
fi
echo"--- 关键文件权限 ---"|tee-a$INSPECTION_LOG
shadow_perm=$(ls-la /etc/shadow 2>/dev/null |awk'{print $1}')
if["$shadow_perm"="-r--------"];then
check_pass "Shadow文件权限""权限正确: $shadow_perm"
else
check_fail "Shadow文件权限""权限不合规: ${shadow_perm:-无法获取}"
fi
# 3. 安全审计检查
echo""|tee-a$INSPECTION_LOG
echo"===== 3. 安全审计 ====="|tee-a$INSPECTION_LOG
echo"--- BSM审计状态 ---"|tee-a$INSPECTION_LOG
audit_stat=$(auditconfig -getcond2>/dev/null |grep"audit condition"|awk'{print $3}')
if["$audit_stat"="auditing"];then
check_pass "BSM审计""审计已启用"
else
check_fail "BSM审计""审计未启用: ${audit_stat:-未配置}"
fi
echo"--- 审计日志检查 ---"|tee-a$INSPECTION_LOG
if[-d /var/audit ];then
audit_size=$(du-sh /var/audit 2>/dev/null |awk'{print $1}')
check_pass "审计日志目录""存在,大小: $audit_size"
else
check_fail "审计日志目录""/var/audit不存在"
fi
echo"--- 系统日志配置 ---"|tee-a$INSPECTION_LOG
if[-f /var/adm/messages ];then
log_lines=$(wc-l /var/adm/messages 2>/dev/null |awk'{print $1}')
check_pass "系统日志""messages日志存在,行数: $log_lines"
else
check_warn "系统日志""/var/adm/messages不存在"
fi
# 4. 入侵防范检查
echo""|tee-a$INSPECTION_LOG
echo"===== 4. 入侵防范 ====="|tee-a$INSPECTION_LOG
echo"--- 系统版本与补丁 ---"|tee-a$INSPECTION_LOG
solaris_ver=$(uname-v)
check_pass "系统版本""$solaris_ver"
# Solaris 11检查IPS更新
if[-x /usr/bin/pkg ];then
updatable=$(pkg list -u2>/dev/null |wc-l)
if["$updatable"-eq0];then
check_pass "软件包更新""系统已最新"
else
check_warn "软件包更新""有 $updatable 个包可更新"
fi
fi
echo"--- SUID/SGID文件检查 ---"|tee-a$INSPECTION_LOG
suid_count=$(find / -type f -perm-40002>/dev/null |wc-l)
if["$suid_count"-lt50];then
check_pass "SUID文件数量""发现 $suid_count 个SUID文件"
else
check_warn "SUID文件数量""发现 $suid_count 个SUID文件,建议审查"
fi
echo"--- 网络服务检查 ---"|tee-a$INSPECTION_LOG
# 检查inetd服务(Solaris 10)
inetd_services=$(inetadm -l2>/dev/null |grep-v disabled |wc-l)
# 或SMF服务(Solaris 11)
smf_services=$(svcs -a2>/dev/null |grep online |grep-v system |wc-l)
if["$inetd_services"-gt0]2>/dev/null;then
check_warn "Inetd服务""$inetd_services 个inetd服务启用"
elif["$smf_services"-gt0]2>/dev/null;then
check_pass "SMF服务""$smf_services 个非系统服务在线"
fi
# 5. 数据安全与备份
echo""|tee-a$INSPECTION_LOG
echo"===== 5. 数据安全与备份 ====="|tee-a$INSPECTION_LOG
echo"--- ZFS快照检查 ---"|tee-a$INSPECTION_LOG
snap_count=$(zfs list -t snapshot 2>/dev/null |wc-l)
if["$snap_count"-gt0];then
check_pass "ZFS快照""存在 $snap_count 个快照"
else
check_warn "ZFS快照""未发现快照,建议配置自动快照"
fi
echo"--- ZFS加密检查 ---"|tee-a$INSPECTION_LOG
encrypt_count=$(zfs list -o encryption 2>/dev/null |grep-v"off$"|wc-l)
if["$encrypt_count"-gt0];then
check_pass "ZFS加密""$encrypt_count 个数据集已加密"
else
check_warn "ZFS加密""未发现加密数据集"
fi
# 6. 高可用检查
echo""|tee-a$INSPECTION_LOG
echo"===== 6. 高可用与冗余 ====="|tee-a$INSPECTION_LOG
echo"--- ZFS池健康 ---"|tee-a$INSPECTION_LOG
zpool_health=$(zpool status 2>/dev/null |grep"state:"|awk'{print $2}')
if["$zpool_health"="ONLINE"];then
check_pass "ZFS池状态""状态: $zpool_health"
else
check_fail "ZFS池状态""状态异常: ${zpool_health:-无法获取}"
fi
echo"--- 启动环境 ---"|tee-a$INSPECTION_LOG
if[-x /usr/sbin/beadm ];then
be_count=$(beadm list 2>/dev/null |wc-l)
check_pass "启动环境""$be_count 个启动环境可用"
fi
# 总结
echo""|tee-a$INSPECTION_LOG
echo"=========================================="|tee-a$INSPECTION_LOG
echo" 巡检完成"|tee-a$INSPECTION_LOG
echo" 日志保存: $INSPECTION_LOG"|tee-a$INSPECTION_LOG
echo"=========================================="|tee-a$INSPECTION_LOG
echo""|tee-a$INSPECTION_LOG
echo"统计结果:"|tee-a$INSPECTION_LOG
grep-c"\[PASS\]"$INSPECTION_LOG|xargsecho"通过项:"|tee-a$INSPECTION_LOG
grep-c"\[FAIL\]"$INSPECTION_LOG|xargsecho"失败项:"|tee-a$INSPECTION_LOG
grep-c"\[WARN\]"$INSPECTION_LOG|xargsecho"警告项:"|tee-a$INSPECTION_LOG
高风险项重点核查清单
| 检查项 | 验证命令 | 不合规判定 | 整改建议 |
|---|---|---|---|
| 存在空口令用户 | logins -p | 有输出 | passwd username 设置密码 |
| 密码策略未启用 | cat /etc/default/passwd | MAXWEEKS未设置或>13 | 设置MAXWEEKS=13 |
| 未启用账户锁定 | grep LOCK /etc/security/policy.conf | 无LOCK_AFTER_RETRIES=YES | 启用锁定策略 |
| SSH使用v1 | cat /etc/ssh/sshd_config | grep Protocol | Protocol 1或未设置 | 强制Protocol 2 |
| 允许root远程登录 | cat /etc/ssh/sshd_config | grep PermitRootLogin | 为yes | 设置为no |
| BSM审计未启用 | auditconfig -getcond | 非auditing | audit -s 启用审计 |
| 无审计日志 | ls /var/audit | 目录为空或不存在 | 配置审计并检查权限 |
| 过多SUID文件 | find / -perm -4000 | wc -l | >50个 | 审查并移除不必要SUID |
| ZFS池异常 | zpool status | 非ONLINE状态 | 检查磁盘状态并修复 |
| 未配置自动快照 | svcs time-slider | 未启用 | 启用time-slider服务 |
| 敏感数据未加密 | zfs get encryption | 关键数据集为off | 启用ZFS加密 |
| 系统补丁滞后 | pkg list -u / showrev -p | 大量未安装补丁 | 更新至最新补丁级别 |
Solaris 10 vs 11 差异说明
| 功能项 | Solaris 10 | Solaris 11 |
|---|---|---|
| 包管理 | SVR4 (pkgadd/pkginfo) | IPS (pkg) |
| 服务管理 | SMF (svcs/svcadm) | SMF增强版 |
| 文件系统 | UFS + ZFS可选 | ZFS默认 |
| 启动管理 | GRUB/Legacy | bootadm/beadm |
| 网络配置 | ifconfig/route | ipadm/routeadm |
| 区域(Zone) | Solaris Zone | Zone增强 + Immutable Zone |
| 审计 | BSM | BSM增强 |
| 加密 | 基础加密 | ZFS原生加密 + KMS |
| 等保适配 | 需大量手动加固 | 预置安全模板 |
与Linux/AIX对比
| 对比项 | Oracle Solaris 11 | RHEL 8 | IBM AIX 7.2 |
|---|---|---|---|
| 内核 | SunOS 5.11 | Linux 4.18 | AIX 7.2 |
| 包管理 | IPS | RPM/DNF | installp |
| 服务管理 | SMF | systemd | SRC |
| 文件系统 | ZFS(原生) | XFS/ext4 + ZFS | JFS2 |
| RBAC | 原生完整RBAC | sudo + PolicyKit | RBAC |
| 审计 | BSM | auditd | audit |
| 容器 | Zone(原生) | Podman/Docker | WPAR |
| 等保工具 | 需定制 | 有加固脚本 | 有安全基线 |
| 行业应用 | 电信、金融 | 全行业 | 金融、电力 |
常用命令速查
# 系统信息
uname-a# 系统版本
cat /etc/release # 详细版本
showrev -r# Solaris 10补丁
pkg info entire # Solaris 11版本
prtconf # 硬件配置
psrinfo -v# CPU信息
# 用户管理
useradd-m username # 添加用户
passwd username # 修改密码
usermod-R"root,admin" username # 分配角色
profiles username # 查看用户配置文件
roles username # 查看用户角色
logins -x# 查看过期账户
# 服务管理(SMF)
svcs -a# 所有服务
svcs -x# 故障服务
svcadm enablessh# 启用服务
svcadm disable telnet # 禁用服务
svcprop svc:/network/ssh # 查看服务属性
# 网络管理
ifconfig-a# 接口配置
ipadm show-addr # Solaris 11 IP管理
route -p show # 路由表
netstat-an# 网络状态
ipfstat -io# IP Filter状态
# 文件系统
zfs list # ZFS数据集
zpool status # ZFS池状态
zfs snapshot pool/fs@snap # 创建快照
zfs send pool/fs@snap # 发送快照
beadm list # 启动环境
beadm create newbe # 创建启动环境
# 审计管理
auditconfig -getcond# 审计状态
auditconfig -setpolicy +cnt # 设置策略
audit -s# 启动审计
audit -t# 停止审计
praudit /var/audit/* # 读取审计日志
auditreduce -d today # 过滤审计记录
# 安全管理
cat /etc/user_attr # RBAC用户属性
cat /etc/security/prof_attr # 配置文件
cat /etc/security/auth_attr # 授权定义
cat /etc/security/exec_attr # 执行属性
userattr -S# 查看安全属性
# 日志查看
tail-f /var/adm/messages # 系统日志
last # 登录历史
lastb # 失败登录
dmesg# 内核消息
svcs -L svc:/system/system-log # 服务日志
参考标准:GB/T 22239-2019、GB/T 28448-2019、Oracle Solaris Security Guidelines、CIS Solaris Benchmarks
适用版本:Solaris 10 1/13 (U11)、Solaris 11.3、Solaris 11.4
硬件平台:SPARC(T4/T5/T7/M7/M8)和 x86-64
执行权限:多数命令需root或等效RBAC配置文件(如Primary Administrator)
声明:来自汪汪虚拟空间,仅代表创作者观点。链接:https://eyangzhen.com/7485.html