原文链接:安全加固之Linux&Solaris
一、Linux安全加固常见查询命令 1.应按照不同的用户分配不同的账号。避免不同用户间共享账号。避免用户账号和设备间通信使用的账号共享 cat /etc/passwd#不同的用户拥有不同的账号; - useradd username #创建账号
- passwd username #设置密码
- chmod 750 directory #为要更改权限的目录根据实际情况设置权限
复制代码 2.应删除或锁定与设备运行、维护等工作无关的账号。
- cat /etc/passwd | grep -i -E "listen|gdm|webservd|nobody|nobody4|noaccess"
- cat /etc/shadow | grep -i -E "listen|gdm|webservd|nobody|nobody4|noaccess"
- #锁定用户:#修改/etc/shadow 文件,用户名后加*LK*
- #将/etc/passwd文件中的shell域设置成/bin/false,/bin/false是最严格的禁止login选项,一切服务都不能用
- #/usr/sbin/nologin:nologin会礼貌的向用户显示一条信息,并拒绝用户登录
- passwd -l username #锁定用户
- passwd – d username #解锁用户。原有密码失效,登录需输入新密码
复制代码 3.根据系统要求及用户的业务需求,建立多帐户组,将用户账号分配到相应的帐户组
- cat /etc/passwd
- cat /etc/group
- groupadd –g GID groupname #创建一个组,并为其设置 GID 号,若不设 GID,系统会自动为该组分配一个 GID 号
- usermod –g group username #将用户 username 分配到 group 组中
复制代码
4.使用PAM禁止任何人su为root - cat /etc/pam.d/su
-
- auth sufficient /lib/security/pam_rootok.so
- auth required /lib/security/pam_wheel.so group=wheel
- #有这两行表明只有wheel组的成员可以使用su命令成为root用户。即符合要求
- usermod –G groupname username #把用户添加到wheel组,使它可以使用su命令成为root用户
复制代码 5.对于采用静态口令认证技术的设备,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类
- cat /etc/pam.d/system-auth
- #大于centos7版本的cat /etc/security/pwquality.conf
- #suse linux : cat /etc/pam.d/cpmmon-password
- 参考配置:minlen=8 minclass=3 retry=3
- dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
- minclass=N:密码组成(大/小字母,数字,特殊字符)
- minclass=N:密码组成(大/小字母,数字,特殊字符)
- # retry:设置用户输入口令字时允许重试的次数,默认值是retry=3。
- # dcredit=N: N >= 0:密码中最多有多少个数字;N < 0密码中最少有多少个数字
- lcredit=N:小写字母的个数
- ucredit=N 大写字母的个数
- ocredit=-1 最少1个符号
- cat /etc/login.defs | grep PASS
- PASS_MIN_LEN=8 #设定最小用户密码长度为 8 位
复制代码
6.对于采用静态口令认证技术的设备,帐户口令的生存期不长于90天 - cat /etc/login.defs | grep PASS
- PASS_MAX_DAYS=90 #设定口令的生存期不长于90天
复制代码
7.对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近5次(含5次)内已使用的口令 - cat /etc/pam.d/system-auth | grep remember
- # 默认没有remember的标记,不记录以前的密码,在password sufficient这一行加上remember=5即可
- password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5
- Redhat:编辑/etc/pam.d/system-auth文件,
- Suse9:编辑/etc/pam.d/passwd文件,
- Suse10,Suse11:编辑/etc/pam.d/common-password文件
复制代码 8.对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过6次(不含6次),锁定该用户使用的账号。
- cat /etc/pam.d/system-auth | grep deny
- deny #连续认证失败次数超过的次数 unlock_time #锁定的时间,单位为秒
- auth required pam_tally.so deny=5 unlock_time=600 no_lock_time account required pam_tally.so
- Redhat:编辑/etc/pam.d/system-auth文件,
- Suse9:编辑/etc/pam.d/passwd文件,
- Suse10,Suse11:编辑/etc/pam.d/common-password文件
复制代码
9.在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限 - ll /etc/passwd /etc/group /etc/shadow #查询命令
- /etc/passwd 必须所有用户都可读,root用户可写 –rw-r—r—
- /etc/shadow 只有root可读 –r--------
- /etc/group 须所有用户都可读,root用户可写 –rw-r—r—
复制代码
10.限制具备超级管理员权限的用户远程登录。远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作 cat /etc/ssh/sshd_config | grep PermitRootLogin#编辑/etc/passwd,帐号信息的shell为/sbin/nologin表示禁止远程登录,/bin/bash表示允许登陆 #root从远程ssh登录,修改/etc/ssh/sshd_config文件,将PermitRootLogin yes改为PermitRootLogin no,重启sshd服务
11.控制用户缺省访问权限,当在创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限。防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制 cat /etc/login.defs | grep UMASKumask的默认设置一般为022,这给新创建的文件默认权限为755(777-022=755),这会给文件所有者读、写权限,但只给组成员和其他用户读权限,建议修改为027。
12.如果需要启用FTP服务,控制FTP进程缺省访问权限,当通过FTP服务创建新文件或 目录时应屏蔽掉新文件或目录不应有的访问允许权限
- # 当通过FTP服务创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限
- netstat -an | grep 21
- ps -ef | grep ftp
- #如果开启了ftp,查看/etc/vsftpd/chroot_list 文件,将需要限制的用户名加入到文件中
- cat /etc/vsftpd/vsftpd.conf | grep -i -E "chroot_list|chroot_local_user"
- cat /etc/vsftpd/chroot_list | grep -i -E "chroot_list|chroot_local_user"
- #suse linux: cat /etc/vsftpd.conf
复制代码
13.设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,以及远程登录时,用户使用的IP地址 /var/log/wtmp文件中记录着所有登录过主机的用户,时间,来源等内容,该文件不具可读性,可用last命令来看
注意:系统账户诸如bin、daemon、adm、uucp、mail等不应该登录,如果发现这些账户有登录记录,就说明系统可能已经被入侵。 - usermod -L username #锁定帐号username
- usermod -U username #解锁帐号username
复制代码
14.启用syslog系统日志审计功能 - cat /etc/rsyslog.conf | grep authpriv
- #配置如下:#authpriv.* /var/log/secure
- #将 authpirv 设备的任何级别的信息记录到/var/log/secure 文件中,这主要是一些和认证、权限使用相关的信息。
- suse linux: suse: cat /etc/syslog-ng/syslog-ng.conf
复制代码
15.系统日志文件由syslog创立并且不可被其他用户修改;其它的系统日志文件不是全局可写 - ll /var/log/messages /var/log/secure /var/log/maillog /var/log/cron /var/log/spooler /var/log/boot.log
复制代码
16.启用记录cron行为日志功能 - cat /etc/rsyslog.conf | grep cron
- #是否启用cron行为日志功能,配置如:
- # Log cron stuff
- cron.* var/log/cron
- cron.*
复制代码
17.设备配置远程日志功能,将需要重点关注的日志内容传输到日志服务器 - cat /etc/rsyslog.conf
- 配置如:*.* @192.168.0.1
复制代码
# 将"*.*"替换为你实际需要的日志信息。比如:kern.* ; mail.* 等等。 # 将192.168.0.1 替换为实际的IP或域名
18.对于使用IP协议进行远程维护的设备,设备应配置使用SSH等加密协议,并安全配置SSHD的设置 ps -ef | grep ssh
ps -ef | grep telnet#禁止使用telnet等明文传输协议进行远程维护;如特别需要,需采用访问控制策 略对其进行限制;
19.在保证业务网络稳定运行的前提下,安装最新的OS补丁.补丁在安装前需要测试确定 - 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/
复制代码20.关闭不必要的服务或端口 - chkconfig --list
- chkconfig --list | grep -E "daytime|time|echo|discard|chargen|sendmail|ntalk|ident|printer|bootps|kshell|klogin|lpd|nfs|nfs.lock|ypbind"
复制代码21.修改系统banner,避免泄漏操作系统名称,版本号,主机名称等,并且给出登陆告警信息 - cat /etc/rc.d/rc.local
- ll /etc/issue*
- #在下面显示的这些行前加一个“#”,把输出信息的命令注释掉
- # This will overwrite /etc/issue at every boot. So, make any changes you want to make to /etc/issue here or you will lose them when you reboot.
- #echo "" > /etc/issue
- #echo "$R" >> /etc/issue
- #echo "Kernel $(uname -r) on $a $(uname -m)" >>
- #cp -f /etc/issue /etc/issue.net
- #echo >> /etc/issue 其次删除"/etc"目录下的isue.net和issue文件:# mv /etc/issue /etc/issue.bak
- # mv /etc/issue.net /etc/issue.net.bak
复制代码22.对于具备字符交互界面的设备,配置定时帐户自动登出 - cat /etc/profile | grep TMOUT
- #通过修改账户中“TMOUT”参数,可以实现此功能。TMOUT按秒计算;
- #建议TMOUT=300(可根据情况设定)
- #注:改变这项设置后,必须先注销用户,再用该用户登录才能激活这个功能
复制代码23. .rhosts,.netrc,hosts.equiv 等文件都具有潜在的危险,如果没有应用,应该删除 - find / -name .netrc
- find / -name .rhosts
- find / -name hosts.equiv
- #无以上文件
复制代码24.禁止root登陆FTP - cat /etc/ftpaccess #检查文件中内容是否包含 root
- cat /etc/vsftpd/ftpusers
- cat /etc/vsftpd/user_list
- cat /etc/vsftpd/vsftpd.conf | grep -i -E"userlist_enable|userlist_deny"
复制代码①黑名单:userlist_enable=YES,userlist_deny=YES。那列在user_list文件中的用户就会被禁止访问ftp ②白名单:userlist_enable=YES,userlist_deny=NO。文件中的用户就会被允许访问ftp ③userlist_deny不存在时,默认状态是YES ④suse: cat /etc/vsftpd.conf | grep anonymous_enable 25.修改 FTP banner信息 cat /etc/vsftpd/vsftpd.conf | grep banner
# 内容应不包括 FTP 或版本的敏感信息===================分割线======================
二、Solaris安全加固常见查询命令
1.应按照不同的用户分配不同的账号 2.应删除或锁定与设备运行、维护等工作无关的账号,删除过期账号 cat /etc/shadow
cat /etc/passwd3.限制具备超级管理员权限的用户远程登录。远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作 预期结果:root远程登录失败,提示“Not on system console”; 普通用户可以登录成功,而且可以切换到 root 用户 4.检测某些特定用户是否可以进行交互登录 cat /etc/passwddaemon、bin、sys、adm、lp、uucp、nuucp、smmsp、listen,gdm,webservd,nobody,nobody4、noaccess预期结果:以上用户的shell为/bin/false或者/sbin/nologin
5.对于采用静态口令认证技术的设备,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类 - cat /etc/default/passwd | grep PASSLENGTH #设定最小用户密码长度,预期为8
- cat /etc/default/passwd | grep MINALPHA #表示至少包括几个字母,建议1
- cat /etc/default/passwd | grep MINNONALPHA #表示至少包括几个非字母,建议1
复制代码6.对于采用静态口令认证技术的设备,帐户口令的生存期不长于90天 cat /etc/default/passwd | grep MAXWEEKS #密码的最大生存周期为多少周,Solaris 8&10
cat /etc/default/passwd | grep PWMAX= 90 #密码的最大生存周期为多少天,Solaris 其它版本7.对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近5次(含5次)内已使用的口令 cat /etc/default/passwd | grep HISTORY
#用户不能重复使用密码的次数限制,预期值58.对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过 6次(不含6次),锁定该用户使用的账号 - cat /etc/user_attr | grep RETRIES
- cat /etc/security/policy.conf | grep RETRIES
- # 预期配置:LOCK_AFTER_RETRIES=YES
- cat /etc/default/login | grep RETRIES
- #失败次数,预期值7
复制代码
9.在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限 - ls -l /etc/passwd /etc/group /etc/shadow
- #/etc/passwd 必须所有用户都可读,root 用户可写 –rw-r—r—
- #/etc/shadow 只有root 可读 –r--------
- #/etc/group 必须所有用户都可读,root 用户可写 –rw-r—r—
复制代码10.控制用户缺省访问权限,当在创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限。防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制 cat /etc/default/login | grep umask
#一般默认为022,建议值02711.控制 FTP 进程缺省访问权限,当通过 FTP服务创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限
- #限制某些系统帐户不允许 ftp 登录: 通过修改 ftpusers文件:
- cat /etc/ftpusers #Solaris 8
- cat /etc/ftpd/ftpusers #Solaris 10
复制代码12.Passwd、group、shadow 配置文件权限只对 root 可写 ls -l /etc/passwd /etc/group /etc/shadow
#均只对root可写13.设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,以及远程登录时,用户使用的IP地址 cat /etc/default/login | grep SYSLOG
#配置为SYSLOG=YESlastSOLARIS10是wtmpx文件,Solaris8是wtmp,wtmps,文件中记录着所有登录过主机的用户,时间,来源等内容,这两个文件不具可读性,可用last命令来看 14设备应配置日志功能,记录用户对设备的操作,包括但不限于以下内容:账号创建、 删除和权限修改,口令修改,读取和修改设备配置,读取和修改业务用户的话费数据、身份数据、涉及通信隐私数据。需记录要包含用户账号,操作时间,操作内容以及操作结果 ls /var/adm | grep pacct #存在pacct文件即符合要求15.设备应配置权限,控制对日志文件读取、修改和删除等操作 ls -l /var/adm/messages /var/adm/utmpx /var/adm/wmtpx /var/adm/sulog
#应当返回644、644、644、60016.系统上运行的应用/服务也应该配置相应日志选项,比如cron cat /etc/default/cron | grep CRONLOG
#设置 CRONLOG=yes17.设备应配置日志功能,记录对与设备相关的安全事件 cat /etc/syslog.conf | grep *.
#预期配置 *.err;kern.debug;daemon.notice; /var/adm/messages18.设备配置远程日志功能,将需要重点关注的日志内容传输到日志服务器 cat /etc/syslog.conf | grep *.
#预期配置:*.* @192.168.0.1将"*.*"替换为你实际需要的日志信息。比如:kern.* ; mail.*等,将192.168.0.1替换为实际的IP或域名 19.对于使用IP协议进行远程维护的设备,设备应配置使用SSH等加密协议,禁止使用telnet等明文传输协议进行远程维护 - ps -ef | grep ssh
- ps -ef | grep telnet
- #Solaris 10 如果没有安装ssh,使用命令查看进程:
- svcs -a |grep ssh
- svcs -a |grep telnet
复制代码20.检测是否禁止ICMP重定向 - #查看当前icmp重定向设置:
- ndd –get /dev/ip ip_send_redirects
- ndd -get /dev/ip ip6_send_redirects
- #返回为0表示禁止ICMP重定向
复制代码也可以在/etc/rc2.d/S??inet目录下看是否有:ndd -set /dev/ip ip_send_redirects=0内容。 /etc/rc2.d/S69inet中包含的是:ndd -set /dev/ip ip6_send_redirects 0 21.在保证业务及网络安全的前提下,经过实验室测试后,更新使用最新版本的操作系统补丁 showrev –p #检查补丁号22.修改系统 banner,避免泄漏操作系统名称,版本号,主机名称等,并且给出登陆告警信息 cat /etc/motd
#无系统敏感信息,避免泄漏操作系统名称,版本号,主机名称等23.要求内容防止堆栈缓冲溢出 - cat /etc/system
- #预期配置:
- set noexec_user_stack=1
- set noexec_user_stack_log =1
复制代码24.要求关闭不必要的服务 #查看开启的服务
ps —eafsvcs—a #solaris 10
cat /etc/inet/inetd.conf,cat /etc/inet/services #solaris 825. 禁止root登陆FTP cat /etc/ftpusers | grep root
#在该文件中配置root26.禁止匿名FTP cat /etc/passwd | grep ftp
#在该文件中注释掉ftp用户27.修改 FTP banner信息 cat /etc/default/ftpd
#把ftpd文件里的BANNER=""字段设置为空或不敏感的字符28.对于具备字符交互界面的设备,配置定时帐户自动登出 cat /etc/profile | grep TMOUT
#建议值 TMOUT=180,可适当调整29. .rhosts,.netrc,等文件都具有潜在的危险,如果没有应用应该删除 find / -name .netrc
find / -name .rhosts
#不存在以上文件30.检测系统snmp是否设置为使用默认的团体字 cat /etc/sma/snmp/snmpd.conf
#默认只读团体名不是rocommunity,默认可读写团体名不是rwcommunity设置默认只读团体名:编辑/etc/sma/snmp/snmpd.conf文件,
#修改配置rocommunity public为:othername public设置默认可读写团体名:编辑/etc/sma/snmp/snmpd.conf文件, #修改配置rwcommunity private为:othername private31.检测系统是否设置 eeprom安全密码 - <code><span class="code-snippet_outer">/usr/sbin/eeprom <span class="code-snippet__comment">#显示当前eeprom配置
- </span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">#显示结果</span></span></code><code><span class="code-snippet_outer">
- security-mode=<span class="code-snippet__built_in">command</span></span></code>
复制代码
|