Linux等级保护2.0笔记

RedHat/CentOS

查看版本

1
2
3
4
5
6
7
8
9
10
# 查看Linux 内核版本
cat /proc/version
uname –a
uname –r
# 查看Linux 版本:
lsb_release –a
cat /etc/redhat-release
cat /etc/centos-release
rpm -q redhat-release
rpm -q centos-release

身份鉴别

密码策略

口令复杂度

  • 使用pam_cracklib.so模块检查口令强度
    文件位置:/etc/pam.d/system-auth
参数 说明
difok=N 口令历史,默认值为5
minlen=N 最短口令长度
dcredit=N 新口令允许使用有的数字的数量,N=-1是至少有一个数字
ucredit=N 新口令允许使用的大写字母的数量,N=-1是至少有一个大写字母
lcredit=N 新口令允许使用的小写字母的数量,N=-1是至少有一个小写字母
ocredit=N 新口令允许使用的特殊字符的数量,N=-1是至少有一个特殊字符
minclass=N 新口令中使用的字符种类,即大小写字母、数字和字符,默认值为0
maxrepeat=N 拒绝包含超过N个相同连续字符的口令,默认值为0
maxsequence=N 拒绝包含大于N的单调字符序列的密码,如‘123456’或‘fedcba’,默认值为0。
maxclassrepeat=N 拒绝包含同一类中超过N个连续字符的密码,默认值为0。
reject_username 检查新密码中是否包含直接或反向形式的用户名称,如root/toor
enforce_for_root 对root用户进行检查
authtok_type=XXX 提示输入密码的文本内容。默认是”New UNIX password: “ and “Retype UNIX password: “,可以自定义
retry=N 返回错误前最多提示用户N次。默认值为1。
dictpath=/path 密码字典路径,centos7.2版本的默认字典路径在/usr/share/cracklib下
示例配置
1
2
password    requisite     pam_cracklib.so enforce_for_root minlen=8 minclass=3  difok=3 reject_username
password requisite pam_cracklib.so enforce_for_root minlen=8 difok=3 reject_username ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

口令更换周期

  • /etc/login.defs
1
2
3
4
5
6
7
8
9
10
11
# 默认参数
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7

# 推荐参数
PASS_MAX_DAYS 90 #密码有效期/天
PASS_MIN_DAYS 1 #更换密码的最小天数
PASS_MIN_LEN 8 #密码最小长度,实际无效,需要通过system-auth文件来进行控制
PASS_WARN_AGE 7 #密码失效前多少天开始警告

注意:login.defs仅对新添加的用户生效,不会影响现有账户。

  • chage -l username
查看单个用户的口令更改策略
1
2
3
4
5
6
7
Last password change                                    : Dec 12, 2018 # 上次修改时间
Password expires : never # 密码过期时间
Password inactive : never # 密码失效时间
Account expires : never # 帐户过期时间
Minimum number of days between password change : 0 # 两次改变密码之间相距的最小天数
Maximum number of days between password change : 99999 # 两次改变密码之间相距的最大天数
Number of days of warning before password expires : 7 # 在密码过期之前警告的天数
口令更改时间
1
2
3
# 通过shadow文件计算
cat /etc/shadow
date -u -d "1970-01-01 UTC $((16749 * 86400 )) seconds"
设置账户口令定期更改策略
1
2
3
chage -m 1 username  #设置两次改变密码之间相距的最小天数为1天
chage -M 90 username #设置两次改变密码之间相距的最大天数为90天
chage -W 7 username #在密码过期之前警告的天数为7天

登录失败

  • 使用pam_tally2.so模块配置登录失败
选项 说明
onerr=[fail|succeed] 失败或者成功,默认为失败
file=/path/to/counter 在哪里保存计数文件。默认值是/var/log/tallylog
audit 如果找不到用户,则会将用户名登录到系统日志中
silent 关闭信息提示
no_log_info 不要通过syslog(3)记录信息性消息
deny=N 如果此用户的计数超过n,则拒绝访问
lock_time=n 尝试失败后n秒内始终拒绝
unlock_time=n 尝试失败n秒后允许访问。如果使用此选项,则在用户超过允许的最大尝试次数后,将在指定的时间段内被锁定。否则,帐户将被锁定,直到系统管理员手动干预解除锁定
magic_root 如果uid=0的用户调用模块,则计数器不会递增。系统管理员应将此参数用于用户启动的服务(如su),否则应忽略此参数
even_deny_root 拒绝root用户
root_unlock_time=n 此选项意味着甚至可以拒绝根选项。尝试失败后,允许在n秒后访问根帐户。如果使用此选项,则在根用户超过其允许的最大尝试次数后,将在指定的时间内被锁定
serialize 使用锁序列化对计数文件的访问。此选项只能用于非多线程服务,因为它依赖于tally文件的fcntl锁定。另外,仅在身份验证阶段与帐户或setcred阶段之间的时间不依赖于身份验证客户端的配置中使用此选项也是一个好主意。否则,身份验证客户端将能够通过简单地人为地延长文件记录锁的保持时间来防止同一用户同时进行身份验证
可设置文件路径
1
2
3
/etc/pam.d/system-auth
/etc/pam.d/login
/etc/pam.d/sshd
示例配置
1
auth        required      pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=300
  • 补充
  • auth
    是 authentication (认证) 的缩写,所以这种类别主要用来检验使用者的身份验证,这种类别通常是需要口令来检验的, 所以后续接的模块是用来检验用户的身份。

  • account
    account (账号) 则大部分是在进行 authorization (授权),这种类别则主要在检验使用者是否具有正确的权限, 举例来说,当你使用一个过期的口令来登陆时,当然就无法正确的登陆了。

  • session
    session 是会议期间的意思,所以 session 管理的就是使用者在这次登陆 (或使用这个命令) 期间,PAM 所给予的环境配置。 这个类别通常用在记录用户登陆与注销时的信息!例如,如果你常常使用 su 或者是 sudo 命令的话, 那么应该可以在 /var/log/secure 里面发现很多关于 pam 的说明,而且记载的数据是『session open, session close』的信息!

  • password
    password 就是口令嘛!所以这种类别主要在提供验证的修订工作,举例来说,就是修改/变更口令啦!

关于pam.d第一个字段:验证类别 (Type)
  • required
    此验证若成功则带有 success (成功) 的标志,若失败则带有 failure 的标志,但不论成功或失败都会继续后续的验证流程。 由于后续的验证流程可以继续进行,因此相当有利于数据的登录 (log) ,这也是 PAM 最常使用 required 的原因。

  • requisite
    若验证失败则立刻回报原程序 failure 的标志,并终止后续的验证流程。若验证成功则带有 success 的标志并继续后续的验证流程。 这个项目与 required 最大的差异,就在于失败的时候还要不要继续验证下去?由于 requisite 是失败就终止, 因此失败时所产生的 PAM 信息就无法透过后续的模块来记录了。

  • sufficient
    若验证成功则立刻回传 success 给原程序,并终止后续的验证流程;若验证失败则带有 failure 标志并继续后续的验证流程。 这玩意儿与 requisits 刚好相反!

  • optional
    这个模块控件目大多是在显示信息而已,并不是用在验证方面的。

关于pam.d第二个字段:验证的控制旗标(control flag)

登录超时

  • /etc/profile
1
TMOUT=300
  • /etc/ssh/ssh_config
1
2
ClientAliveInterval 60 #每隔60秒向客户端发送消息
ClientAliveCountMax 3 #3次未响应则关闭连接

ssh_config方式基于网络,即使不操作客户端也会发送消息


远程管理协议

1
2
service sshd status
service telnetd status

双因子身份鉴别


访问控制

强制访问控制

  • /etc/selinux/config

    enforcing:强制模式
    permissive:宽容模式
    disabled:关闭selinux


安全审计

审计进程

系统日志服务
1
2
3
4
5
6
7
service syslog status #(CentOS6或redhat6以上为rsyslog)
service auditd status
#或
service --status-all | grep running
#查看进程
PS -ef | grep syslog
ps -ef | grep auditd

日志配置文件

1
/etc/audit/audit.rules
  • /etc/rsyslog.conf、/etc/syslog.conf
rsyslog.conf文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 将info或更高级别的消息送到messages,除了mail、authpriv、cron以外。
# 其中*是通配符;none表示不对任何级别的信息进行记录。
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# 将授权和安全相关的消息记录到secure文件中
authpriv.* /var/log/secure

# 由mail子系统产生的消息记录到maillog中.
mail.* -/var/log/maillog

# cron守护进程相关的信息记录到cron文件中
cron.* /var/log/cron

# 最高级别消息发送给所有在线的用户
*.emerg *

# 网络消息子系统.重要情况
uucp,news.crit /var/log/spooler

# 将和系统启动相关的信息记录到boot.log
local7.* /var/log/boot.log
  • 日志设施有:

    auth(security), authpriv: 授权和安全相关的消息
    kern: 来自Linux内核的消息
    mail: 由mail子系统产生的消息
    cron: cron守护进程相关的信息
    daemon: 守护进程产生的信息
    news: 网络消息子系统
    lpr: 打印相关的日志信息
    user: 用户进程相关的信息
    local0 to local7: 保留,本地使用

  • 日志级别有(升序):

    debug:包含详细的开发情报的信息,通常只在调试一个程序时使用。
    info:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。
    notice:不是错误情况,也不需要立即处理。
    warning:警告信息,不是错误,比如系统磁盘使用了85%等。
    err:错误,不是非常紧急,在一定时间内修复即可。
    crit:重要情况,如硬盘错误,备用连接丢失。
    alert:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。
    emerg:紧急情况,需要立即通知技术人员。

如何对rsyslog进行配置

日志文件

日志文件 说明
/var/log/cron 系统定时任务相关信息
/var/log/cups 打印信息
/var/log/dmesg 系统在开机时内核自检的信息
/var/log/btmp 错误登录信息(二进制文件,使用lastb命令查看)
/var/log/lastlog 系统中所有用户最后一次登录时间信息(二进制文件,使用lastlog命令查看)
/var/log/mailog 邮件信息
/var/log/message 系统重要信息(Linux绝大多数重要信息)
/var/log/secure 登录和授权方面的信息(登录、切换用户、sudo授权、添加用户、修改密码)
/var/log/wtmp 永久记录所有用户登录,注销信息,系统启动、重启、关机事件(二进制文件,使用last查看)
/var/log/utmp 当前已登录用户信息(二进制文件,使用who、w、users查看)

日志存储时间

/etc/logrotate.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# see "man logrotate" for details
# rotate log files weekly
weekly #日志切割间隔

# keep 4 weeks worth of backlogs
rotate 4 #轮询次数

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}

/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}

# system-specific logs may be also be configured here.

Linux 日志切割神器 logrotate 原理介绍和配置详解


入侵防范

系统服务

1
2
3
4
5
service --status-all
ps -ef
setup #通过图形界面记录系统开启的网络服务
chkconfig --list #查看各运行级别下系统开启的服务,命令行为3,5为图形化
who –r #查看系统当前运行级别

端口

1
2
3
netstat -lntp #查看tcp端口
netstat -lnup #查看udp端口
netstat -ano #早期Linux

地址限制

  • /etc/hosts.allow、/etc/hosts.deny
参数
1
2
sshd:192.168.1.0/24:allow
sshd:*:deny
  • /etc/ssh/sshd_config
参数
1
2
AllowUsers root test@192.168.1.1
DenyUsers root test@192.168.1.1
  • iptables
命令
1
iptables -n -L

补丁包

1
rpm -qa grep patch



Solaris

查看版本

1
cat /etc/release #Solaris

身份鉴别

密码策略

  • /etc/default/passwd
参数
1
2
3
4
5
6
MINWEEKS=1   # 密码可以被改变的最小时段
MAXWEEKS=13 # 密码最大的生存周期
WARNWEEKS=4 # 设定密码到期提醒天数
PASSLENGTH=8 # 设定密码长度
MINALPHA=2 # 口令必须包含字母的最小数目
MINDIFF=1 # 口令必须包含唯一字符的最小数目

登录失败

1
2
3
4
5
/etc/security/policy.conf
/etc/default/login

LOCK_AFTER_RETRIES=YES
RETRIES=5

远程协议

Solaris
1
2
svcs | grep ssh
svcs | grep telnet

访问控制

安全审计

Solaris
1
2
3
4
/etc/default/login
SYSLOG=YES #审计进程运行正常

svcs |grep auditd #audit服务

审计内容

Solaris
1
2
3
4
5
6
7
8
9
10
11
/etc/syslog.conf 
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages

/etc/security/audit_control
#应设置需审计的事件类,如:
#audit_control file
dir: /var/audit
flags:1o
minfree:20
naflags:lo
*审计事件类型至少应包括:lo、fw、fm、fd。

日志文件

RadHat/CentOS
1
2
3
/var/log/messages
/var/log/secure
/var/log/audit/audit.log
Solaris
1
2
3
/var/adm/messages;
/var/adm/wtmpx;
/var/adm/utmpx;

入侵防范

端口

1
2
3
netstat -lntp #查看tcp端口
netstat -lnup #查看udp端口
netstat -ano #早期Linux

服务

Solaris
1
svcs -a

补丁

Solaris
1
cat /etc/release #系统版本、安全补丁安装

地址限制

Solaris
1
2
3
/etc/default/login
# 参数
CONSOLE=/dev/console