@cdmonkey
2022-01-24T06:46:41.000000Z
字数 7870
阅读 1497
系统安全
红帽安全手册:
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-Hardening_Your_System_with_Tools_and_Services.html
http://zkread.com/article/882248.html
http://0101x.blog.51cto.com/8639108/1365721
http://0101x.blog.51cto.com/8639108/1366043
http://www.bubuko.com/infodetail_125048.html
http://gm100861.blog.51cto.com/1930562/932527
设定口令认证失败后的锁定策略。
# 首先对操作的目标文件进行备份:[root@yum-server ~]# cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
[root@yum-server ~]# vim /etc/pam.d/system-auth#%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.auth required pam_env.soauth required pam_tally2.so deny=5 onerr=fail no_magic_root unlock_time=180 # Add this line...account required pam_unix.soaccount required pam_tally2.so # Add this line...
于设定文件中新加上面两行,请一定注意书写位置。
我们使用app用户通过本地终端登录,连续六次输入错误的密码,提示被锁定:
login: appAccount locked due to 6 failed logins
[root@cdmonkey ~]# pam_tally2 --user=appLogin Failures Latest failure Fromapp 6 02/24/17 16:22:09 tty1
注意:这个只是限制了用户从
tty登录,而没有限制远程登录,如果想限制远程登录,需要改sshd文件。
可人工将计数器清零:
pam_tally2 --user=app --reset
# 首先对操作的目标文件进行备份:[root@yum-server ~]# cp -a /etc/login.defs /etc/login.defs_bak
主要是修改下面三行的内容:
[root@yum-server ~]# vim /etc/login.defs...PASS_MAX_DAYS 90 # 新建用户的密码最长使用天数不大于90天PASS_MIN_DAYS 10 # 新建用户的密码最短使用天数为10天PASS_WARN_AGE 7 # 新建用户的密码到期提前提醒天数为7天
找不到太多关于该文件的具体说明,但是看文件名应该能够判断出该文件是用于控制系统认证的。其定义了许多PAM命令语句,其主要作用是提示普通用户输入根用户账号的密码并且包括所有用户个人的配置,我们能够于这里面修改限制登录次数并且锁定一段时间。
[root@yum-server ~]# vim /etc/pam.d/system-auth# 于文件中找到如下内容:password requisite pam_cracklib.so try_first_pass retry=3 type=
将上面的这行修改为下面的内容:
# 至少包含一个数字、一个小写字母、一个大写字母、一个特殊 字符,并且密码长度要大于等于8password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8
上面的
cracklib模块能提供额外的密码检查能力,对于密码的复杂度进行详细控制就需要借助于该模块。
下面的系统自带的账号应该移除或锁定。这类用户的密码列不是用*或者!!开头的。
lp sync halt news uucp operator games gopher smmsp nfsnobody nobody
三类用户:
root用户。如果上面的这些用户没有被删除或锁定,可选用如下的三种操作:
1、直接将用户移除掉
userdel username
2、若不想将上述用户移除,也可将其进行锁定
passwd -l username # 锁定用户,只有具备超级用户权限的使用者方可使用。passwd –d username # 解锁用户,解锁后原有密码失效,登录设置新密码才能登录。passwd -u username # 解锁用户后,原密码仍然有效。
3、还可修改用户的shell为/bin/false
usermod -s /bin/false username
执行下面的指令将上述用户进行锁定,并且将shell设定为/bin/false:
for a in lp sync halt news uucp operator games gopher smmsp nfsnobody nobody;do passwd -l $a;done----------------for a in lp sync halt news uucp operator games gopher smmsp nfsnobody nobody;do usermod -s /bin/false $a;done
对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近五次(含五次)内已使用的口令。
[root@yum-server ~]# vim /etc/pam.d/system-auth# 找到这一行:password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
将上面的这行密码控制语句改为:
# 只需于该行的末尾加上 remember=5 参数即可:password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
注意:
NIS系统无法生效,非NIS系统或NIS+系统能够生效。
[root@yum-server ~]# vim /etc/pam.d/su# 于文件开头加入下面两行(有则修改,没有则新加)auth sufficient pam_rootok.soauth required pam_wheel.so use_uid
注意:
auth同sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开。
http://blog.csdn.net/cbbbc/article/details/51712913
通常情况下,一般用户通过执行su -命令,输入正确的根用户密码,就能登录成为根用户。但是,为了更进一步加强安全性,有必要创建一个管理员组,只允许该组的用户来执行su -命令登录为根用户,而使得其他组的用户即使是执行了该指令、输入了正确的密码,也无法登录为根用户。这个组的名称通常为wheel。
按照上面的方法修改后,普通用户无法登录为根用户:
[app@yum-server ~]$ su -Password:su: incorrect password # 总是会提示密码错误,即便输入了正确的密码。
若希望该普通用户能够登录为根用户,需要将其加入到wheel组中:
[root@yum-server ~]# usermod -G wheel app
首先要对操作的目标文件进行备份:
[root@yum-server ~]# cp /etc/profile /etc/profile.bak
[root@yum-server ~]# echo "umask 027" >> /etc/profile[root@yum-server ~]# source /etc/profile
chmod 644 /etc/passwdchmod 400 /etc/shadowchmod 644 /etc/groupchmod 644 /etc/serviceschmod 600 /etc/xinetd.confchmod 600 /etc/security
使用命令查看messages文件是否只可追加不可修改:
[root@yum-server ~]# lsattr /var/log/messages-------------e- /var/log/messages
[root@yum-server ~]# chattr +a /var/log/messages[root@yum-server ~]# lsattr /var/log/messages-----a-------e- /var/log/messages
[root@yum-server ~]# mkdir -pv /var/adm/[root@yum-server ~]# touch /var/adm/messages[root@yum-server ~]# chmod 666 /var/adm/messages[root@yum-server ~]# echo '*.err;kern.debug;daemon.notice /var/adm/messages' >> \/etc/rsyslog.conf[root@yum-server ~]# /etc/init.d/rsyslog restart
对权限>640的日志文件设定为640的权限。
LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#"|awk '{print $2}'|sed 's/^-//g'|grep '^\s*\/'`ls -l $LOGDIR 2>/dev/null|grep -v "[r-][w-]-[r-]-----"|awk '{print $1" "$8" "$9}'-rw-rw-rw- 11:24 /var/adm/messages-rw-r--r-- 2016 /var/log/boot.log
找到这些权限有问题的日志文件后,对其进行修改权限的操作:
[root@yum-server ~]# chmod 640 /var/adm/messages[root@yum-server ~]# chmod 640 /var/log/boot.log
略
如果/etc/profile中有下面的两行则按需要进行修改,没有这两行则写入这两行:
[root@yum-server ~]# echo "TMOUT=300" >> /etc/profile[root@yum-server ~]# echo "export TMOUT" >> /etc/profile[root@yum-server ~]# source /etc/profile
要求系统中不能有这三个文件:.rhosts、.netrc、hosts.equiv。如果使用rlogin进行远程登录,就会需要这三个文件。通常情况下是没有这三个文件的,因而该远程登录方法很少使用了。
使用如下命令查看是否有这三个文件:
find / -maxdepth 3 -name .netrc 2>/dev/null|wc -lfind / -maxdepth 3 -name .rhosts 2>/dev/null|wc -lfind / -maxdepth 3 -name hosts.equiv 2>/dev/null|wc -l
| Service | Explain |
|---|---|
| Telnet | 就是远程登陆,通讯的数据是明文传输,因而不太安全。 |
| SSH | 安全的shell,主机间的通讯是加密传输的,这样别人要用网络工具什么来截取包获得信息就困难了。 |
| Rlogin | 主机之间的信任关系,如果条件满足,可不用输密码而登陆远程主机。 |
如需要nfs服务,则需要设置限制能够访问服务的IP范围。
echo "nfs:"
该安全配置暂时先不执行。
# Create ssh banner file:[root@yum-server ~]# touch /etc/ssh_banner[root@yum-server ~]# chown bin:bin /etc/ssh_banner[root@yum-server ~]# chmod 644 /etc/ssh_banner[root@yum-server ~]# echo "Authorized only. All activity will be monitored and reported" > \/etc/ssh_banner[root@yum-server ~]# echo "Banner /etc/ssh_banner" >> /etc/ssh/sshd_config# Restart the service:[root@yum-server ~]# nohup /etc/init.d/sshd restart &
其中的警告信息可根据实际需要进行修改。还有一处,依据安全扫描标准也需要进行修改:
touch /etc/motdecho "Authorized users only. All activity may be monitored and reported" > /etc/motd
# 查找任何用户都有写权限的文件:for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`;do find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -xdev -exec ls -ld {} \; 2>/dev/null;done
去掉上面输出文件的其他用户的写权限:
chmod o-w <filename>
# 查找任何用户都有写权限的目录:for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`;do find $PART -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -xdev -exec ls -ld {} \; 2>/dev/null;done
去掉上面输出目录的其他用户的写权限:
chmod o-w <directory>
[root@yum-server ~]# echo "* soft core 0" >> /etc/security/limits.conf[root@yum-server ~]# echo "* hard core 0" >> /etc/security/limits.conf
源路由是一种互联网协议机制,可许可IP数据包携带地址列表的信息,以此分辨数据包沿途经过的路由器。通过某一路径时,会出现一可选项,记录为中间路径。所列出的中间路径,即路径记录,可提供返回至源路由路径上的目的地。这就允许源路由可指定某一路径,无论是严格的还是松散的,可忽略路径列表上的一些或全部路由器。它可允许用户恶意重定向网络流量。因而,应禁用源路由。
[root@yum-server ~]# /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
首先执行备份:
cp -p /etc/hosts.allow /etc/hosts.allow_bakcp -p /etc/hosts.deny /etc/hosts.deny_bak
echo "sshd:192.168.1.*:allow" >> /etc/hosts.allowecho "all:all" >> /etc/hosts.deny # 拒绝一切远程访问配合文件 hosts.allow 使用。
注意:执行该安全配置时千万小心,防止将正常的业务访问阻拦掉。
为何要关闭该功能,因为其会导致ICMP重定向攻击,即利用ICMP路由公告功能,攻击者使用该功能可改变攻击目标的路由配置(可造成主机的网络连接异常,被用于流量攻击等严重后果)。
[root@yum-server ~]# echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.conf[root@yum-server ~]# sysctl -p
[root@yum-server ~]# vim /etc/host.conforder hosts, bindmulti on # 指定是否hosts文件中指定的主机能够有多个IP。nospoof on # 不允许对该服务器进行IP地址欺骗。
[root@yum-server ~]# vim /etc/profile# 这两行有则修改,没有则新加:HISTFILESIZE=5HISTSIZE=5# 检查上面两个变量是否被声明为环境变量:export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL HISTFILESIZE
| Entry | Expalin |
|---|---|
HISTFILESIZE |
定义了于.bash_history中保存命令的记录总数,可理解为该文件中最多只有多少行。 |
HISTSIZE |
定义了history命令输出的记录数,即输出.bash_history文件中的最后多少行。 |
# 执行下面的命令让配置生效:[root@yum-server ~]# source /etc/profile
该安全设定只适用于具有图形界面的主机。需要使用gconftool-2指令。
[root@yum-server ~]# vim .bashrc# 这两行有则修改,没有则新加:alias ls='ls -aol'alias rm='rm -i'
请确认bash的版本:
[root@yum-server ~]# bash --versionbash --versionGNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)Copyright (C) 2009 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>...
可直接使用Yum进行升级,但并不是最新的版本,若要升级到最新的版本,请进行编译安装升级。
[root@svn-test ~]# cd tools/bash-4.4[root@svn-test bash-4.4]# ./configuremake && make install