请注意:本次实验使用的centos 7 版本
一、查找系统中是否存在空密码账户
1、使用命令: awk -F: '($2==""){print $1}' /etc/shadow 直接查看。可以看到系统中没有空密码账户
2、验证一下。添加一个账户qwe, 命令:useradd qwe(此时qwe虽然没有密码但是他还不能使用空密码登录)
3、使用root账户清除qwe密码,passwd -d qwe
4、再次使用 awk -F: '($2==""){print $1}' /etc/shadow 命令查看系统中空密码账户
二、查找uid值为0的用户。
如果passwd文件中uid值为0的话,那么这个用户就拥有root权限。
1、查找uid为0账户: awk -F: '($3==0){print $1}' /etc/passwd 可以看到当前系统只有root账户拥有root权限。
2、修改权限的话,以root用户权限修改passwd文件中的uid为0,保存退出。
在root用户下使用su - lu切换lu用户
此时切换lu用户是,依然显示的是root的状态,但是查看history明显是lu用户,而且lu已经获取到了root的权限,使用该用户可以做root用户的操作
查看uid为0命令 awk -F: '($3==0){print $1}' /etc/passwd
接下来我想到,用lu用户修改/etc/passwd文件中root用户uid为1000,保存退出
然后切换回root用户,以此时uid为1000的root查看passwd时,文件已变为只读
三、安全加固的一些方案
1、密码策略
修改 /etc/login.defs文件中相应参数
PASS_MAX_DAYS 密码有效期
PASS_MIN_DAYS 修改密码的最短期限
PASS_MIN_LEN 密码最短长度
PASS_WARN_AGE 密码过期提醒
加固方案:
1).备份配置文件:
# cp -a /etc/login.defs /etc/login.defs.default
2).编辑配置文件并将相关参数改成如下
# vi /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 6
PASS_MIN_LEN 8
PASS_WARN_AGE 30
2、修改密码策略
修改vi /etc/pam.d/system-auth文件
默认配置:
[root@33f ~]# cat /etc/pam.d/system-auth | grep "pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type="
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
加固方案:
1).备份配置文件:
# cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default
2).编辑配置文件
# vi /etc/pam.d/system-auth
注释掉(前面加#)
#password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
并在其下面新增1行
password requisite pam_cracklib.so try_first_pass minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=
3).保存配置文件
备注:
try_first_pass而当pam_unix验证模块与password验证类型一起使用时,该选项主要用来防止用户新设定的密码与以前的旧密码相同。
minlen=8:最小长度8位
difok=5:新、旧密码最少5个字符不同
dcredit=-1:最少1个数字
lcredit=-1:最少1个小写字符,(ucredit=-1:最少1个大写字符)
ocredit=-1:最少1个特殊字符
retry=1:1次错误后返回错误信息
type=xxx:此选项用来修改缺省的密码提示文本
3、新口令不能与10个最近使用的相同
修改vi /etc/pam.d/system-auth文件,
在password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok 所在行的后面添加 remember=11
4、设置会话超时
修改vi /etc/profile文件在最后添加参数
export TMOUT=600 #(600秒 十分钟)
5、账户锁定策略(终端登录)
修改vi /etc/pam.d/system-auth文件
在# User changes will be destroyed the next time authconfig is run.行的下面,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
(终端登录失败5次,锁定半小时)
6、禁止root通过ssh远程登录
修改文件,
vi /etc/ssh/sshd_config
将配置参数#PermitRootLogin yes改成PermitRootLogin no
重启ssh服务
# /etc/init.d/sshd restart
7、设置history命令时间戳
加固方案: 编辑配置文件:
vi /etc/profile
在文件的末尾添加参数
export HISTTIMEFORMAT="%F %T `whoami` "
保存配置文件
四 .SSH 配置参数增强
1.备份配置文件
2.编辑配置文件
#vi /etc/ssh/sshd_config
(1)禁止空密码登录
将#PermitEmptyPasswords no参数的注释符号去掉,改成
PermitEmptyPasswords no
(2)关闭ssh的tcp转发
将#AllowTcpForwarding yes参数改成
AllowTcpForwarding no
(3)关闭S/KEY(质疑-应答)认证方式
将#ChallengeResponseAuthentication yes参数,改成
ChallengeResponseAuthentication no
(4)关闭基于GSSAPI 的用户认证
将GSSAPIAuthentication yes参数,改成
GSSAPIAuthentication no
3.保存配置文件
4.重启ssh服务
五:.设置SSH登录警告语
加固方案:
1.备份配置文件
#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2.编辑配置文件
#vi /etc/ssh/sshd_config
找到#Banner none参数,在其下一行,增加
Banner /etc/ssh/alert
3.保存配置文件
4新增告警信息文件.
#vi /etc/ssh/alert
文件内容,设置成
这里的内容自己定义,可以提示一下登录的用户引起运维人员重视
Warning!!!Any Access Without Permission Is Forbidden!!!
5.保存后重启ssh服
六.设置umask值
默认配置:
# umask
002
2
加固方案:
1.备份配置文件
# cp -a /etc/bashrc /etc/bashrc.default
2.编辑配置文件
# vi /etc/bashrc
在文件末尾增加参数
umask 027
3.保存配置文件
4. 备份配置文件
#cp -a /etc/profile /etc/pr ofile.default
5.编辑配置文件
# vi /etc/profile
在文件末尾增加参数
umask 027
6.保存配置文件
备注:
将umask值设置成0027,用于拿掉新增目录与文件的非所有者和所有者所属组的访问权限
默认:
新增目录权限755,即rxwr-xr-x
新增文件权限644,即rw-r--r—
加固后:
新增目录权限750,即rxwr-x---
新增文件权限640,即rw-r-----
七.禁止Control-Alt-Delete 键盘重启系统命令
默认配置:
ls /usr/lib/systemd/system/ctrl-alt-del.target
加固方案:
1.备份配置文件
cp -a /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.default
2.移除该原源文件
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
八. 隐藏系统版本信息
默认配置: 显示
加固方案:
执行以下命令:
#mv /etc/issue /etc/issue.bak
#mv /etc/issue.net /etc/issue.net.bak
备注:登录界面显示系统版本信息
九.设置grup密码
默认配置:无
加固方案:
1.备份配置文件
cp -a /etc/grub.d/00_header /etc/grub.d/00_header.default
2.使用grub2-mkpasswd-pbkdf2 加密密码(密码自己定义,但是一定得保存好否则最后连自己都登录不进去)
[root@localhost ~]# grub2-mkpasswd-pbkdf2
Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A
3.添加以下配置到该文件的最后面(特别需要注意 用户名root和密文之间是空格分隔,而不是换行)
cat <<EOF
set superusers='root'
password_pbkdf2 root grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A
E0F
4.执行命令重新编译生成grub.cfg文件
grub2-mkconfig -o /boot/grub2/grub.cfg
十.最大文件打开数(文件句柄数)
默认配置:
[root@33f ~]# ulimit -n
1024
加固方案:
1.备份配置文件
cp -a /etc/security/limits.conf /etc/security/limits.conf.default
2.添加以下两行配置到该文件最后
* soft nofile 65535
* hard nofile 65535
备注:修改所有用户的最大文件打开数为65535
十一.用户最大进程数
默认配置:
[root@33f ~]# cat /etc/security/limits.d/20-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
* soft nproc 4096
root soft nproc unlimited
加固方案:
1.备份配置文件
cp -a /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.default
2.修改配置文件vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
* hard nproc 65535
备注:修改所有用户的最大进程数为65535
十二.系统参数调优
默认配置:无
加固方案:
1.备份配置文件
cp -a /etc/sysctl.conf /etc/sysctl.conf.default
2.添加以下调优参数到该文件中
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.route.gc_timeout = 20
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.route.gc_timeout = 20
net.ipv4.ip_local_port_range = 10024 65535
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
fs.file-max = 65535
kernel.pid_max = 65536
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 10240
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 36000
3.SSH 空闲超时时间检测
1、在【/etc/ssh/sshd_config】文件中设置【ClientAliveInterval】设置为600到900之间
2、提示:SSH空闲超时时间建议为:600-900
此方案可以增强SSH服务的安全性,修复后连接SSH长时间无操作会自动退出,防止被他人利用。
4.检测是否限制密码重复使用
1、配置文件备份cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
2、在【/etc/pam.d/system-auth】文件【password sufficient】后面添加或修改remember=3
具体来说,remember=3 表示系统会记住最近使用过的 3 个密码。这样,用户在更改密码时,系统会检查新密码是否与这 3 个历史密码之一相同,如果相同,则不允许使用。这有助于提高系统的安全性,因为它防止用户频繁地在一段时间内轮换几个简单的密码。
此方案通过限制登录密码重复使用次数,加强服务器访问控制保护。
5.bootloader配置权限检查
1、根据风险描述提示的文件,对grub配置安全的权限,centos7一般是grub2
2、查看目录若是grub2,则:chmod 600 /boot/grub2/grub.cfg、chown root /boot/grub2/grub.cfg
3、若是grub,则:chmod 600 /boot/grub/grub.cfg、chown root /boot/grub/grub.cfg
此方案可以加强服务器grub界面的防护,进一步阻止外部入侵服务器。
6.SSH密码复杂度检查
1、【/etc/security/pwquality.conf】 把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4。如:
2、minclass=3
此方案加强服务器登录密码的复杂度,降低被爆破成功的风险。
7.检测是否使用安全的套接字加密远程管理ssh
1、在【/etc/ssh/sshd_config】文件中添加或修改Protocol 2
2、随后执行命令systemctl restart sshd重启进程
此方案可以增强对SSH通信的保护,避免敏感数据泄露。
在 /etc/ssh/sshd_config 文件中添加或修改 Protocol 2 的作用是限制 SSH 服务器仅使用 SSH 协议版本 2 进行通信。
SSH(Secure Shell)是用于安全远程登录到计算机系统的协议。SSH 协议有两个主要版本:版本 1 和版本 2。虽然版本 1 是较早的版本,但由于其存在一些安全漏洞和弱点,推荐使用版本 2。
通过将 Protocol 2 添加到 /etc/ssh/sshd_config 文件中,您可以明确指定 SSH 服务器仅接受版本 2 的连接请求。这有助于增强系统的安全性,因为它阻止了使用版本 1 的连接,从而避免了与版本 1 相关的潜在安全漏洞。
一般来说,除非您有特殊的需求,否则应该始终将 SSH 服务器配置为仅接受版本 2 的连接。
8.检查重要文件是否存在suid和sgid特权
SUID(Set User ID)和 SGID(Set Group ID)是一种特殊的权限设置,它们允许用户在执行特定程序时暂时拥有程序所有者或所属组的权限。这两种权限具有一些潜在的安全隐患,因为它们可能被滥用来进行特权升级或执行潜在的恶意操作。
以下是 SUID 和 SGID 权限的一些潜在隐患:
特权升级(Privilege Escalation):如果恶意用户能够利用 SUID 或 SGID 权限的程序中的漏洞,他们可能会以程序所有者或所属组的权限执行恶意操作,从而获取系统的更高权限。
安全漏洞风险:SUID 和 SGID 程序可能存在安全漏洞,可能会导致未经授权的访问或执行恶意代码。
不正确的文件设置:如果 SUID 或 SGID 权限被错误地应用于文件,可能会导致意外的安全风险。例如,如果 SUID 权限应用于一个不安全的脚本文件,恶意用户可能会利用该脚本执行任意命令。
权限混淆:SUID 和 SGID 权限可能会混淆系统管理员,使其认为某些程序具有比实际更高的权限。这可能导致安全风险,因为管理员可能会误以为系统的某些部分受到更强的保护,而实际上并非如此。
有一些需要特权的文件不要
调整权限:
以下是一些常见的需要具有 SUID 或 SGID 权限的文件或程序:
/bin/su:切换用户程序,允许用户以其他用户的身份登录。
/bin/ping:用于发送 ICMP 回显请求以测试网络连接。
/usr/bin/passwd:用于更改用户密码的命令。
/usr/bin/sudo:允许普通用户以超级用户权限执行命令。
/usr/bin/crontab:用于编辑和管理 cron 作业的命令。
/usr/bin/chsh:用于更改用户的登录 shell。
一般上存在suid特权需要处理
的文件:
/usr/bin/chage、/usr/bin/gpasswd、/usr/bin/chfn、/usr/bin/chsh、/usr/bin/newgrp、/usr/sbin/usernetctl、/bin/mount、/bin/umount
命令:
sudo chmod u-s /usr/bin/chage /usr/bin/gpasswd /usr/bin/chfn /usr/bin/chsh /usr/bin/newgrp /usr/sbin/usernetctl /bin/mount /bin/umount
存在sgid特权的文件:
/usr/bin/wall、/usr/bin/write、/sbin/netreport
命令:
sudo chmod g-s /usr/bin/wall /usr/bin/write /sbin/netreport
1、使用chmod u-s 【文件名】命令去除suid权限
2、使用chmod g-s 【文件名】去除sgid权限
此方案去除了重要文件的特殊权限,可以防止入侵者利用这些文件进行权限提升。
9.检查SSH密码修改最小间隔(选做)
1、【/etc/login.defs】 PASS_MIN_DAYS 应设置为大于等于7
2、PASS_MIN_DAYS 7 需同时执行命令设置root 密码失效时间 命令如下: chage --mindays 7 root
此方案是设置SSH登录密码修改后,多少天之内无法再次修改。
10.SSH 登录超时配置检测
将LoginGraceTime参数设置为一个较小的数字将最大限度地降低对SSH服务器成功进行暴力破解的风险。它还将限制并发的未经身份验证的连接数量。
设置 LoginGraceTime 的主要目的是提高系统的安全性。通过限制 SSH 会话的持续时间,系统可以减少未经授权的用户占用 SSH 连接的风险。即使用户忘记登出或网络连接出现问题,也能够在一定时间后自动断开连接,从而释放资源并防止潜在的安全风险。
在设置 LoginGraceTime 时,可以根据实际需求进行调整。一般来说,将其设置为较短的时间可以提高系统的安全性,但也需要考虑到用户体验。设置太短的时间可能导致用户在短时间内频繁地需要重新连接,而设置太长的时间可能增加系统被滥用的风险。
在【/etc/ssh/sshd_config】文件中设置【LoginGraceTime】为60
11.sudo文件存在NOPASSWD标记
风险描述
以下sudo文件存在NOPASSWD标记:
/etc/sudoers.d/90-cloud-init-users
解决方案
1、打开/etc/sudoers或是/etc/sudoers.d下的文件
2、删除或注释【NOPASSWD】标记所在行
3、或者使用一键修复处理安全风险
温馨提示
当sudo使用【NOPASSWD】标记时,允许用户使用sudo执行命令,而无需进行身份验证。这种不安全的配置可能导致黑客夺取服务器的高级权限。
12.未开启TCP-SYNcookie保护
解决方案
1、在【/etc/sysctl.conf】文件中添加net.ipv4.tcp_syncookies=1
2、然后执行命令sysctl -p生效配置
温馨提示
此方案可以缓解网络洪水攻击,增强服务器运行的稳定性。
13.其他待更新
版权属于: 三三世界-百宝箱
本文链接: http://33f.net/setup/centos7_safety_reinforce.html
本文最后更新于2024年03月31日 ,已超过293天没有更新,若内容或图片失效,请留言反馈。
本文允许转载,但请在转载时请以超链接或其它形式标明文章出处
@Doug Shume it's ok for me , you can post here.
Saved as a favorite, I like your website!
If some one wishes to be updated with hottest technologies after that he must be visit this site and be up to date daily.
Heello would you mind sharing which blog platform you're using? I'm planning to start my own blog in the near future but I'm having a tough time making a decision between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your layout seems different then moost blogs and I'm looking for something completely unique. P.S Apologies forr being off-topic butt I had to ask!
Thanks to my father who shared with me regarding this webpage, this website is genuinely amazing.
Hi, I have an overflow of customers that I'd like to send to you but I want to make sure you can handle more leads, let me know if you'd like me to send you more info.
zh.us.to 有效
kms.03k.org 有效
kms.chinancce.com
kms.shuax.com 有效
kms.dwhd.org 有效
kms.luody.info 有效
kms.digiboy.ir 有效
kms.lotro.cc 有效
www.zgbs.cc 有效
cy2617.jios.org 有效
@ 权限问题,试试sudo 再加命令。
你好提示Permission denied 怎么办啊