一、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  UMASK
umask的默认设置一般为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命令来看

last
last /var/log/wtmp
注意:系统账户诸如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"
在/etc/xinetd.conf文件中禁止不必要的基本网络服务。注意:改变了“/etc/xinetd.conf”文件之后,需要重新启动xinetd。对必须提供的服务采用tcpwapper来保护

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 或版本的敏感信息