跳转至

01-系统安全加固-Linux

检查是否存在空密码的帐户

配置项描述 检查是否存在空密码的帐户,非法用户可通过该账户直接登录系统,威胁系统安全。
操作步骤 1、执行:# awk -F: '( $2 == "" ) { print $1 }' /etc/shadow2、为帐户设置满足密码复杂度的密码:#passwd username。
检测方法 执行:# awk -F: '( $2 == "" ) { print $1 }' /etc/shadow返回值应为空。

删除与设备运行、维护等工作无关的账号

配置项描述 删除或锁定与设备运行、维护等工作无关的账号。
操作步骤 1、 参考配置操作 删除用户:#userdel username; 锁定用户: 1)修改/etc/shadow 文件,用户名后加*LK* 2)将/etc/passwd 文件中的 shell 域设置成/bin/false 3)#passwd -l username 只有具备超级用户权限的使用者方可使用,#passwd -l username 锁定用户,用#passwd –d username 解锁后原有密码失效,登录需输入新密码,修改/etc/shadow 能保留原有密码。 2、 补充操作说明需要锁定的用户:listen,gdm,webservd,nobody,nobody4、noaccess。注:无关的账号主要指测试帐户、共享帐号、长期不用账号(半年以上未用)等
检测方法 *1*、被删除或锁定的账号无法登录成功;2、检测操作使用删除或锁定的与工作无关的账号登录系统;3、需要锁定的用户:listen,gdm,webservd,nobody,nobody4、noaccess

检查除root之外的UID为0的用户

配置项描述 检查是否存在除root之外UID为0的用户
操作步骤 删除除root外的UID为0的用户:#userdel username
检测方法 执行:# awk -F: '($3 == 0) { print $1 }' /etc/passwd返回值应只有root

设置口令策略满足复杂度要求

配置项描述 设置口令策略满足复杂度要求和口令生存周期,确保口令具有足够的复杂性,可抵抗穷举攻击
操作步骤 1、执行备份:#cp -p /etc/login.defs /etc/login.defs_bak#cp -p /etc/pam.d/system-auth /etc/pam.d/system-anth2、修改策略设置:#vi /etc/login.defs修改PASS_MAX_DAYS为90、PASS_MIN_LEN为8、PASS_MIN_DAYS为1、PASS_WARN_AGE为7#vi /etc/pam.d/system-auth修改或新增行:password requisite pam_cracklib.so difok=3 dcredit=-1 lcredit=-1 ucredit=-1 credit=-1注释:PASS_MAX_DAYS 90 #密码最长过期天数 PASS_MIN_DAYS 1 #密码最小过期天数 PASS_MIN_LEN 8 #密码最小长度 PASS_WARN_AGE 7 #密码过期警告天数 difok=N:新密码必需与旧密码不同的位数;dcredit=N: N >= 0:密码中最多有多少个数字;N < 0 密码中最少有 多少个数字;lcredit=N 小写字母的个数;ucredit=N 大写字母的个数;credit=N 特殊字母的个数;
检查方法 1、执行:#more /etc/login.defs检查PASS_MAX_DAYS、 PASS_MIN_LEN、PASS_MIN_DAYS、PASS_WARN_AGE参数#more /etc/ pam.d/system-auth检查:password requisite pam_cracklib.so difok=3 dcredit=-1 lcredit=-1 ucredit=-1 credit=-1

检查文件与目录缺省权限

配置项描述 系统umask设置,规范用户对目录和文件的操作
操作步骤 修改umask设置:#vi /etc/profile将umask值修改为027,保存退出
检测方法 执行:# more /etc/profile 检查系统umask值

检查用户最小授权

配置项描述 检查用户是否是最小授权
操作步骤 Chmod 400 /etc/shadowChmod 644 /etc/groupChmod 644 /etc/passwd
检查方法 检查文件权限ll /etc/shadowll /etc/groupll /etc/passwd

检查root目录权限是否为700

配置项描述 检查root目录权限是否为700,保证仅有系统管理员拥有对其的访问控制权限。
操作步骤 设置700权限:#chown root:root /root #chmod 700 /root
检查方法 执行:#ls –lad /root查看/root权限

查看字符交互界面超时退出

配置项描述 检查字符交互界面超时时间
操作步骤 1 执行备份:#cp -p /etc/profile /etc/profile_bak2 在/etc/profile文件增加以下两行:#vi /etc/profileTMOUT=300export TMOUT改变这项设置后,重新登录才能有效备注:增加 TMOUT=300(单位:秒,可根据具体情况设定超时退出时间,要求不小于300秒),注销用户,再用该用户登录激活该功能
检查方法 1 执行:#more /etc/profile | grep –i TMOUT

配置SYSLOG

配置项描述 日志功能设置,记录系统日志及应用日志
操作步骤 1、修改配置:#vi /etc/rsyslog.conf配置形如*.err;kern.debug;daemon.notice; /var/log/messages的语句,保存退出*.err;kern.debug;daemon.notice; /var/log/messagescron.* /var/log/cronauthpriv.* /var/log/secure 2、重启syslog服务#/etc/init.d/rsyslog stop#/etc/init.d/rsyslog start
检测方法 执行:#more /etc/rsyslog.conf存在类似如下语句:.err;kern.debug;daemon.notice; /var/log/messagescron. /var/log/cronauthpriv.* /var/log/secure

设置日志服务器

配置项描述 设备配置远程日志功能,将需要重点关注的日志内容传输到日志服务器。
操作步骤 1、修改配置:#vi /etc/rsyslog.conf加上这一行: . @192.168.0.1可以将"."替换为你实际需要的日志信息。比如:kern.* / mail.* 等等。192.168.0.1修改为实际的日志服务器。*.*和@之间为一个Tab。2、重启syslog服务#/etc/init.d/rsyslog stop#/etc/init.d/rsyslog start
检测方法 执行:#more /etc/rsyslog.conf存在类似如下语句:. @192.168.0.1

远程登录取消telnet采用ssh

配置项描述 远程登录取消telnet,采用ssh。telnet缺少对口令和用户名的有效保护措施,所有数据采用明文传输方式,存在较大安全隐患,ssh采用加密方式保护用户数据,数据内容和用户信息更为安全。
操作步骤 关闭telent开启ssh:1、备份#cp -p /etc/xinetd.d/telnet /etc/xinetd.d/telnet_bak2、编辑#vi /etc/xinetd.d/telnet文件,把disable项改为yes,即disable = yes 然后运行services xinetd restart,telnet就可以关闭掉了3、安装ssh软件包,通过#/etc/init.d/sshd start来启动SSH。
检测方法 查看SSH、telnet服务状态:# netstat –an|grep 22# netstat –an|grep 23SSH服务状态查看结果为:有LISTEN状态记录;telnet服务状态查看结果为:无LISTEN状态记录。

限制具备root权限的用户远程ssh登录

配置项描述 远程执行管理员权限操作,应先以普通权限用户远程登录后,再切 换到超级管理员权限账号后执行相应操作。
操作步骤 1、参考配置操作: 编辑/etc/passwd,帐号信息的 shell 为/sbin/nologin 的为禁止远程登录,如要允许,则改成可以登录的 shell 即可,如/bin/bash2、补充操作说明:如果限制 root 从远程 ssh 登录,修改/etc/ssh/sshd_config 文件,将 PermitRootLogin yes改为PermitRootLogin no,重启sshd 服务。
检测方法 1、判定条件: root 远程登录不成功,提示“没有权限” ; 普通用户可以登录成功,而且可以切换到 root用户;2、检测操作:root 从远程使用 telnet 登录; 普通用户从远程使用 telnet 登录; root 从远程使用 ssh 登录; 普通用户从远程使用 ssh登录;3、补充说明:限制 root 从远程 ssh 登录,修改/etc/ssh/sshd_config 文件,将 PermitRootLogin yes改为PermitRootLogin no,重启sshd 服务。

禁止任何人su到root,添加wheel组用户

配置项描述 使用PAM禁止任何人su为root
操作步骤 1、编辑su文件(vi /etc/pam.d/su),在开头添加下面行:auth required pam_wheel.so group=wheel2、补充操作说明:上述添加表明只有whell组的成员可以使用su命令成为root用户。可以把有需求的用户添加到whell组,以使它可以使用su命令成为root用户。添加方法:#usermod –G wheel username
检测方法 查看/etc/pam.d/su是否存在以下行:auth required pam_wheel.so group=wheel

检查登录尝试失败后锁定用户帐户

配置项描述 配置当用户连续认证失败次数超过6次(不含6次),锁定该用户使用的账号。注意仅对自然人使用的帐号做此限制。
操作步骤 修改策略设置:#vi /etc/pam.d/system-auth 增加:auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=30(添加在第二行)保存退出。
检查方法 执行:#/etc /pam.d/system-auth检查是否存在:auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=30(在第二行)

检查ssh端口

配置项描述 隐藏ssh信息
操作步骤 Vi /etc/ssh/sshd_config 修改 Port 22 修改成其他端口,迷惑非法试探者 例:Linux下SSH默认的端口是22,为了安全考虑,现修改SSH的端口为1433,修改方法如下 :/usr/sbin/sshd -p 1433
检查方法 Cat /etc/ssh/sshd_config 判断 port 字段

删除潜在危险文件

配置项描述 检查帐户目录中是否存在.netrc/.rhosts文件,该文件通常会被系统或进程自动加载并执行,对系统带来安全隐患
操作步骤 删除.netrc/.rhosts文件#rm -f filename
检测方法 执行:# find / -name .netrc# find / -name .rhosts返回值应为空

禁止root登录FTP

配置项描述 禁止root登陆FTP
操作步骤 参考配置操作: 在ftpaccess文件中加入下列行 root
检测方法 使用 root 帐号登录 ftp 会被拒绝

禁止匿名FTP

配置项描述 禁止匿名FTP
操作步骤 参考配置操作: 以 vsftpd 为例: 打开vsftd.conf文件,修改下列行为: anonymous_enable=NO
检测方法 匿名账户不能登录
配置项描述 修改系统 banner,避免泄漏操作系统名称,版本号,主机名称等, 并且给出登陆告警信息
操作步骤 删除“/etc”目录下的isue.net和issue文件:#mv /etc/issue /etc/issue.bak#mv /etc/issue.net /etc/issue.net.bak
检测方法 查看“/etc”目录下是否存在isue.net和issue文件

关闭不必要的服务、端口

*服务名称* *端口* *应用说明* *关闭方法* *处置建议*
daytime 13/tcp RFC867 白天协议 chkconfig daytime off 建议关闭
13/udp RFC867 白天协议 chkconfig daytime off
time 37/tcp 时间协议 chkconfig time off
37/udp 时间协议 chkconfig time-udp off
echo 7/tcp RFC862_回声协议 chkconfig echo off
7/udp RFC862_回声协议 chkconfig echo-udp off
discard 9/tcp RFC863 废除协议 chkconfig discard off
9/udp chkconfig discard-udp off
chargen 19/tcp RFC864 字符产生协议 chkconfig chargen off
19/udp chkconfig chargen-udp off
ftp 21/tcp 文件传输协议(控制) chkconfig gssftp off 根据情况选择开放
telnet 23/tcp 虚拟终端协议 chkconfig krb5-telnet off 根据情况选择开放
sendmail 25/tcp 简单邮件发送协议 chkconfig sendmail off 建议关闭
nameserver 53/udp 域名服务 chkconfig named off 根据情况选择开放
53/tcp 域名服务 chkconfig named off 根据情况选择开放
apache 80/tcp HTTP 万维网发布 chkconfig httpd off 根据情况选
服务 择开放
login 513/tcp 远程登录 chkconfig login off 根据情况选择开放
shell 514/tcp 远程命令, no passwd used chkconfig shell off 根据情况选择开放
exec 512/tcp remote execution, passwd required chkconfig exec off 根据情况选择开放
ntalk 518/udp new talk, conversation chkconfig ntalk off 建议关闭
ident 113/tcp auth chkconfig ident off 建议关闭
printer 515/tcp 远程打印缓存 chkconfig printer off 强烈建议关闭
bootps 67/udp 引导协议服务端 chkconfig bootps off 建议关闭
68/udp 引导协议客户端 chkconfig bootps off 建议关闭
tftp 69/udp 普通文件传输协议 chkconfig tftp off 强烈建议关闭
kshell 544/tcp Kerberos remote shell -kfall chkconfig kshell off 建议关闭
klogin 543/tcp Kerberos rlogin -kfall chkconfig klogin off 建议关闭
portmap 111/tcp 端口映射 chkconfig portmap off 根据情况选择开放
snmp 161/udp 简单网络管理协议(Agent) chkconfig snmp off 根据情况选择开放
snmp trap 161/tcp 简单网络管理协议(Agent) chkconfig snmp off 根据情况选择开放
snmp-trap 162/udp 简单网络管理协议(Traps) chkconfig snmptrap off 根据情况选择开放
syslogd 514/udp 系统日志服务 chkconfig syslog off 建议保留
lpd 515/tcp 远程打印缓存 chkconfig lpd off 强烈建议关闭
nfs 2049/tcp NFS 远程文件系统 chkconfig nfs off 强烈建议关闭
2049/udp NFS 远程文件系统 chkconfig nfs off 强烈建议关闭
nfs.lock 动态端口 rpc 服务 chkconfig nfslock off 强烈建议关闭
ypbind 动态端口 rpc 服务 chkconfig ypbind off 强烈建议关闭

更新最新稳定版本os补丁

要求内容 在保证业务网络稳定运行的前提下,安装 新的 OS 补丁。补丁在安装前需要测试确定。
操作指南 1、 参考配置操作 看版本是否为 新版本。 执行下列命令,查看版本及大补丁号。 #uname –a 2、 补充操作说明
检测方法 1、 判定条件 看版本是否为 新版本。 # uname –a 查看版本及大补丁号 RedHat Linux:http://www.redhat.com/support/errata/ Slackware Linux:ftp://ftp.slackware.com/pub/slackware/ SuSE Linux:http://www.suse.com/us/support/security/index.html TurboLinux:http://www.turbolinux.com/security/ 2、 检测操作 在系统安装时建议只安装基本的 OS 部份,其余的软件包则以必要为原则,非必需的包就不装。 3、 补充说明