摘要:linux是一套免费使用和自由传播的系统,是一个基于UNIX的多用户、多任务、支持多线程和多CPU的操作系统。所谓的多用户和多任务。多用户是指在同一时刻可以有多个用户同时使用操作系统而且他们互不干扰,而多任务则指的是任何一个用户在同一时间可以在操作系统上运行多个程序。
作为一个开放源代码的操作系统,Linux服务器以其安全、高效和稳定的显著优势而得以广泛应用,不过,如果不做好权限的合理分配,系统的安全性得不到更好的保障。
因此,为提高系统的稳定性,加强安全管理必不可少。
本文将使用centos7操作系统,分别从账户安全、密码策略、登录控制、系统资源控制以及日志审计等方面优化系统的安全性。详细内容请参考下文。
一、优化系统账号管理
说明:系统账户默认存放的目录为/etc/passwd,可以执行cat指令手动查询用户信息。具体的优化措施是除了root账户需要登录以外,其他的账户全部设置为禁止登录。
需要用到的命令如下:
userdel <用户名> //删除不必要的账号。
passwd -l <用户名> //锁定不必要的账号。
passwd -u <用户名> //解锁必要的账号。
解决办法:本文使用{passwd -l 用户名}锁定用户登录,可以编写lockuser.sh脚本完成这个过程。
1、编写脚本
执行指令# vim lockuser.sh
备注:grep -v就是反向过滤文本行的搜索,grep -v name # 表示搜索除了含有name之外的行内容。
2、执行脚本
执行指令# sh lockuser.sh
二、设置密码管理策略
说明:操作系统和数据库的管理用户身份鉴别信息应具有不易被破解的特点,口令应有一定的复杂度要求并定期更换。设置有效的密码策略,防止攻击者破解出密码。
1、查看空口令帐号并为弱/空口令帐号设置强密码
执行指令# awk -F: '($2 == ""){print $1}' /etc/shadow
备注:可用密码网站查询出帐号的密码是否是弱口令
2、修改login.defs配置密码周期策略
执行指令# vim /etc/login.defs
修改密码策略文件
修改内容为
备注:此策略只对策略实施后所创建的帐号生效, 以前的帐号还是按99999天周期时间来算。对于已创建的账户,可以使用chage命令修改用户设置(针对已创建用户)。【比如# chage -m 0 -M 90 -I 5 -W 7 <用户名>】表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码过期后5天之后账户失效,过期前7天警告用户。
参数含义如下所示:
PASS_MAX_DAYS 90 #密码最长过期天数
PASS_MIN_DAYS 0 #密码最小过期天数
PASS_MIN_LEN 8 #密码最小长度
PASS_WARN_AGE 7 #密码过期警告天数
3、修改system-auth配置密码复杂度
执行指令# vim /etc/pam.d/system-auth
修改密码复杂度文件为
备注:在密码复杂度文件的末尾添加如下一行:password requisite pam_cracklib.so retry=3 difok=2 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
参数含义如下所示:
difok:本次密码与上次密码至少不同字符数
minlen:密码最小长度,此配置优先于login.defs中的PASS_MAX_DAYS
ucredit:最少大写字母
lcredit:最少小写字母
dcredit:最少数字
retry:重试多少次后返回密码修改错误
三、设置登陆管理策略
说明:服务器必须设置登录失败处理策略,可以采取结束会话、限制非法登录次数和自动退出等措施。遭遇密码破解时,暂时锁定帐号,降低密码被猜解的可能性。
1、登录失败处理功能策略(服务器终端)
执行指令# vim /etc/pam.d/system-auth编辑系统文件,在 auth 字段所在的那一部分策 略下面添加如下策略参数。
auth required pam_tally2.so onerr=fAIl deny=3 unlock_time=30 even_deny_root root_unlock_time=30
备注:注意添加的位置,要写在第一行,即#%PAM-1.0的下面。如上图所示。以上策略表示,普通帐户和 root 的帐户登录连续 3 次失败,就统一锁定30 秒,30 秒后可以解锁。如果不想限制 root 帐户,可以把 even_deny_root root_unlock_time这两个参数去掉, root_unlock_time 表示 root 帐户的 锁定时间,onerr=fail 表示连续失败,deny=3,表示 超过3 次登录失败即锁定。还应该注意的是,用户锁定期间,无论在输入正确还是错误的密码,都将视为错误密码,并以最后一次登录为锁定起始时间,若果用户解锁后输入密码的第一次依然为错误密码,则再次重新锁定。登陆信息可以通过日志 tail -f /var/log/secure查看。
2、登录失败处理功能策略(ssh远程连接登录)
执行指令# vim /etc/pam.d/sshd编辑SSH文件,在 auth 字段所在的那一部分策 略下面添加如下策略参数。
auth required pam_tally2.so onerr=fail deny=3 unlock_time=30 even_deny_root root_unlock_time=30
备注:上面的错误意思是在/lib64/security/ 下面找不到pam_tally.so,而我进入到目录下,确实没找到这个文件,解决方法是将现有的 pam_tally2.so做个软连接到pam_tally.so,先切换到目录cd /lib64/security/,然后再做软链接ln -s pam_tally2.so pam_tally.so。
3、解锁账户
首先,执行指令# pam_tally2查看锁定的账户
备注:如果密码在锁定时间内,但是又要立即进入系统,可使用下面方法解锁被锁定用户,当然这是对于root用户解锁普通用户来说的。如果root用户被锁,请等待锁定期过后在操作。
然后,执行指令# pam_tally2 -r -u root解锁指定用户,可以正常登陆系统。如下图
四、设置安全远程管理方式
说明:当对服务器进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听。为防止远程管理过程中,密码等敏感信息被窃听,有必要禁用te.NET等不安全的访问方式。
执行指令# systemctl status xinetd查看telnet状态
执行指令# systemctl stop xinetd禁用telnet功能
五、启用入侵防御方式
说明:操作系统遵循最小安装的原则,仅安装需要的组件和应用程序,并通过设置升级服务器等方式保持系统补丁及时得到更新。关闭与系统业务无关或不必要的服务,减小系统被黑客攻击、渗透的风险。比如禁用蓝牙功能等。
执行指令# systemctl status bluetooth查看蓝牙状态
执行指令# systemctl stop bluetooth禁用蓝牙功能
六、系统资源控制
1、系统资源访问控制
说明:通过设定终端接入方式、网络地址范围等条件限制终端登录,对接入服务器的IP、方式等进行限制,可以阻止非法入侵。
可以在/etc/hosts.allow和/etc/hosts.deny文件中配置接入限制。最好的策略就是阻止所有的主机在“/etc/hosts.deny”文件中加入“ ALL:ALL@ALL, PARANOID ”,然后再在“/etc/hosts.allow” 文件中加入所有允许访问的主机列表。
执行指令# vim /etc/hosts.deny
执行指令# vim /etc/hosts.allow
2、访问系统资源超时锁定
说明:应根据安全策略设置登录终端的操作超时锁定。设置登录超时时间,释放系统资源,也提高服务器的安全性。
执行指令# vim /etc/profile
备注:加入这一行exprot TMOUT=3600,表示设置3600秒内用户无操作就断开终端,该功能视实际情况而定。
然后执行指令# source /etc/profile使操作立即生效。
七、系统日志管理
1、保护审计记录
说明:避免受到意外的删除、修改或覆盖等操作。防止重要日志信息被覆盖,让日志文件转储一个月,保留6个月的信息。执行指令# cat /etc/logrotate.conf查看目前配置
需要将文件修改配置为
2、记录所有用户的登录和操作日志
说明:通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。
首先,执行指令# vim /etc/profile打开配置文件
其次,修改配置文件,在配置文件中输入以下内容
最后,执行指令# source /etc/profile 使配置生效
备注:通过上述步骤,可以在 /var/log/history目录下为每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作。
注意事项:编辑/etc/bashrc文件,最后加入
HISTTIMEFORMAT="%F %T "
export HISTTIMEFORMAT
保存后退出,关闭当前shell,并重新登录这个时候,在变量HISTFILE所指向文件中,就有记录命令执行的时间。如下图
八、系统升级管理
说明:内核、OS版本、所有软件都会升级,会更改相关配置环境。由于系统与硬件的兼容性问题,有可能升级内核后导致服务器不能正常启动,这是非常可怕的,如果没有特别的需要,建议不要随意升级内核。
如果不想升级内核及系统版本,则在执行yum update之前,需修改/etc/yum.conf配置文件,再[main] 后面添加以下配置。
exclude=kernel*
exclude=centos-release*
执行指令# vim /etc/yum.conf
备注:exclude=kernel*表示不升级内核,而exclude=centos-release* 表示不升级系统版本。