安全加固脚本+修改root密码->出现root始终无法登录问题
现象:据项目需要,要对系统进行安全加固,使用了安全加固脚本后,再修改root密码会无法进入系统的现象
初始加固脚本内容如下
#!/bin/bash
sed '4c greeter-show-manual-login=true' /usr/share/lightdm/lightdm.conf.d/60-kylin.conf
sed -i 's/^mesg.*$/tty -s \&\& mesg n/g' /root/.profile
echo "pulseaudio --start --log-target=syslog" >> /root/.profile
#cd /home/kylin/桌面
pwd=`pwd`
mkdir /opt/anquan/
cd "$pwd"
cp cracklib.tar.gz /opt/anquan/
cp netfilter-persistent.tar.gz /opt/anquan/
cd /opt/anquan/
tar -xf cracklib.tar.gz
dpkg -i libcrack2_2.9.2-1build2kord0k3_amd64.deb
dpkg -i wamerican_7.1-1kord_all.deb
dpkg -i cracklib-runtime_2.9.2-1build2kord0k3_amd64.deb
dpkg -i libpam-cracklib_1.1.8-3.2kord3k44_amd64.deb
sed -i "s/pam_cracklib.so/pam_cracklib.so minlen=8 minclass=3/g" /etc/pam.d/common-password
sed -i "1,/99999/{s/99999/15/}" /etc/login.defs
echo "请修改root密码"
#read -p "请输入密码" one
#read -p "请再次输入密码" two
#echo $one |passwd --stdin root >&
#if [ $? -eq 0 ];then
# echo "root的密码已经修改为$one"
# else
# echo "root的密码未修改成功"
#fi
mv /etc/ld.so.conf.d/JinCEarth.conf /opt/
/sbin/ldconfig
sed -i '15i auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800' /etc/pam.d/common-auth
chmod 600 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /var/log/syslog
mv /etc/init.d/install_cnts.properties /opt
mv /etc/init.d/ZzTimerS /opt
tar -xf netfilter-persistent.tar.gz
dpkg -i netfilter-persistent_1.0.4kord_all.deb
dpkg -i iptables-persistent_1.0.4kord_all.deb
mv /opt/install_cnts.properties /etc/init.d/
mv /opt/ZzTimerS /etc/init.d/
iptables -A INPUT -p tcp --dport 135 -j DROP
iptables -A INPUT -p tcp --dport 139 -j DROP
iptables -A INPUT -p tcp --dport 445 -j DROP
iptables -A INPUT -p tcp --dport 5800 -j DROP
iptables -A INPUT -p tcp --dport 539 -j DROP
iptables -A INPUT -p tcp --dport 593 -j DROP
iptables -A INPUT -p udp --dport 137 -j DROP
iptables -A INPUT -p udp --dport 138 -j DROP
iptables -A INPUT -p udp --dport 69 -j DROP
iptables -A INPUT -p udp --dport 1434 -j DROP
iptables -A INPUT -p udp --dport 539 -j DROP
/usr/sbin/netfilter-persistent save
iptables -L -n
echo "#!/bin/bash" >/etc/network/if-pre-up.d/iptables.sh
echo "/sbin/iptables-restore < /etc/iptables/rules.v4" >>/etc/network/if-pre-up.d/iptables.sh
sed -i '13i bash /etc/network/if-pre-up.d/iptables.sh' /etc/rc.local
以上脚本跑完之后,然后修改一下root密码,就会偶发无法登入系统的现象,不管你怎么输密码都会提示密码错误,该现象偶发,一旦发生重启系统也不可行
为什么我多跑了几次脚本呢?
因为28所软件的环境变量配的和这个安全加固的配置冲突了,导致开机后指纹验证等的几个画面出不来,所以就需要再跑一下脚本重新配置一下)
经过多次复现、回忆操作细节以及挂盘进小系统排查,最后查出来是重复配置产生的影响。脚本里边使用sed添加策略的时候没考虑多次执行所可能带来的改变,所以多次运行脚本后,有的配置文件会添加重复的配置,其中有两个配置文件(/etc/pam.d/common-auth和/etc/pam.d/common-password)由重复的策略配置改为仅配置一次,便可重新登入系统,为什么重复配置会导致无法登入系统暂不清楚,但改回确实可以解决
如果有的生产环境已经出现了root账户密码输对了始终无法进入,那么可以修改一下配置文件,把策略改回去
下面是我针对以上问题对脚本做的修改,以下脚本中一些配置前面加了判断
#!/bin/bash
# 脚本说明:该脚本已在Kylin-4.0.2-desktop-sp2-XYD.J1-18052209-x86_64版本上验证过可用,其他版本未知# 定义一个函数判断文本是否已经在文件中存在
function is_in_file(){# 接收第一个参数“内容”,接收第二个参数“文件路径”num=`cat $2 | grep "$1" | wc -l`if [ $num == 1 ]thenreturn 0elsereturn 1fi
}# 修改root可登录系统
sed -i '4c greeter-show-manual-login=true' /usr/share/lightdm/lightdm.conf.d/60-kylin.conf# 解决"弹窗提示/root/.profile读取报错问题"
sed -i 's/^mesg.*$/tty -s \&\& mesg n/g' /root/.profile
is_in_file "pulseaudio --start --log-target=syslog" /root/.profile
if [ $? == 1 ]
thenecho "pulseaudio --start --log-target=syslog" >> /root/.profile
fi# 修改特殊文件权限,提高安全性
chmod 600 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /var/log/syslog# 解压tar包到临时目录并安装deb
mkdir /opt/anquan/
cp cracklib.tar.gz /opt/anquan/
cp netfilter-persistent.tar.gz /opt/anquan/
cd /opt/anquan/
# 安全策略相关
tar -xf cracklib.tar.gz
dpkg -i libcrack2_2.9.2-1build2kord0k3_amd64.deb
dpkg -i wamerican_7.1-1kord_all.deb
dpkg -i cracklib-runtime_2.9.2-1build2kord0k3_amd64.deb
dpkg -i libpam-cracklib_1.1.8-3.2kord3k44_amd64.deb
# iptables相关
tar -xf netfilter-persistent.tar.gz
mv /etc/init.d/install_cnts.properties /opt/ # 避免安装netfilter-persistent时报错
mv /etc/init.d/ZzTimerS /opt/
dpkg -i netfilter-persistent_1.0.4kord_all.deb
dpkg -i iptables-persistent_1.0.4kord_all.deb
mv /opt/install_cnts.properties /etc/init.d/ # 为避免安装出错移走的文件移回原处
mv /opt/ZzTimerS /etc/init.d/# 移除28s软件部分冲突配置,避免开机"指纹登录等画面"不显示
mv /etc/ld.so.conf.d/JinCEarth.conf /opt/
/sbin/ldconfig# 设置密码复杂度含有"大写字母、小写字母、数字、特殊字符"其中的三种
# 设置密码使用期限不超过15天
# 设置无效次数过多锁定、锁定时间30分
is_in_file "pam_cracklib.so minlen=8 minclass=3" /etc/pam.d/common-password
if [ $? == 1 ]
thensed -i "s/pam_cracklib.so/pam_cracklib.so minlen=8 minclass=3/g" /etc/pam.d/common-password
fi
sed -i "1,/99999/{s/99999/15/}" /etc/login.defs
is_in_file 'auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800' /etc/pam.d/common-auth
if [ $? == 1 ]
thensed -i '15i auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800' /etc/pam.d/common-auth
fi# 设置iptables规则
rules=`iptables -L -n | grep DROP | grep 135 | wc -l` # 如果查询有135端口DROP的策略,则视作以下所有策略均已做过,不再进行添加
if [ $rules == 0 ]
theniptables -A INPUT -p tcp --dport 135 -j DROPiptables -A INPUT -p tcp --dport 139 -j DROPiptables -A INPUT -p tcp --dport 445 -j DROPiptables -A INPUT -p tcp --dport 5800 -j DROPiptables -A INPUT -p tcp --dport 539 -j DROPiptables -A INPUT -p tcp --dport 593 -j DROPiptables -A INPUT -p udp --dport 137 -j DROPiptables -A INPUT -p udp --dport 138 -j DROPiptables -A INPUT -p udp --dport 69 -j DROPiptables -A INPUT -p udp --dport 1434 -j DROPiptables -A INPUT -p udp --dport 539 -j DROP
fi
/usr/sbin/netfilter-persistent save
iptables -L -n# 创建iptables脚本,并配置rc.local使该脚本开机运行
echo "#!/bin/bash" > /etc/network/if-pre-up.d/iptables.sh
echo "/sbin/iptables-restore < /etc/iptables/rules.v4" >> /etc/network/if-pre-up.d/iptables.sh
is_in_file 'bash /etc/network/if-pre-up.d/iptables.sh' /etc/rc.local
if [ $? == 1 ]
thensed -i '13i bash /etc/network/if-pre-up.d/iptables.sh' /etc/rc.local
fi# 修改root密码
#read -p "请输入root密码" one
#read -p "请再次确认密码" two
#[ $one == $two ] && echo $one | passwd --stdin root >& /dev/null
#if [ $? -eq 0 ]
#then
# echo "root的密码已经修改为$one"
# else
# echo "root的密码未修改成功"
#fi
相应地,也对服务器系统的安全加固脚本做了修改,如下:
#!/bin/bash
# 脚本说明:该脚本已在Kylin-4.0.2-server-sp2-19121012.J1-x86_64、Kylin-4.0.2-server-sp4-20092117.J1-x86_64两个版本上验证过可用,其他版本未知# 定义一个函数判断文本是否已经在文件中存在
function is_in_file(){# 接收第一个参数“内容”,接收第二个参数“文件路径”num=`cat $2 | grep "$1" | wc -l`if [ $num == 1 ]thenreturn 0elsereturn 1fi
}# 修改root可登录系统
sed -i '4c greeter-show-manual-login=true' /usr/share/lightdm/lightdm.conf.d/60-kylin.conf# 解决"弹窗提示/root/.profile读取报错问题"
sed -i 's/^mesg.*$/tty -s \&\& mesg n/g' /root/.profile
is_in_file "pulseaudio --start --log-target=syslog" /root/.profile
if [ $? == 1 ]
thenecho "pulseaudio --start --log-target=syslog" >> /root/.profile
fi# 修改特殊文件权限,提高安全性
chmod 600 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /var/log/syslog# 解压tar包到临时目录并安装deb
mkdir /opt/anquan/
cp cracklib.tar.gz /opt/anquan/
cp netfilter-persistent.tar.gz /opt/anquan/
cd /opt/anquan/
# 安全策略相关
tar -xf cracklib.tar.gz
dpkg -i libcrack2_2.9.2-1build2kord0k3_amd64.deb
dpkg -i wamerican_7.1-1kord_all.deb
dpkg -i cracklib-runtime_2.9.2-1build2kord0k3_amd64.deb
dpkg -i libpam-cracklib_1.1.8-3.2kord3k44_amd64.deb
# iptables相关
tar -xf netfilter-persistent.tar.gz
dpkg -i netfilter-persistent_1.0.4kord_all.deb
dpkg -i iptables-persistent_1.0.4kord_all.deb# 设置密码复杂度含有"大写字母、小写字母、数字、特殊字符"其中的三种
# 设置密码使用期限不超过15天
# 设置无效次数过多锁定、锁定时间30分
sed -i "s/retry=3 minlen=8 difok=3/minlen=8 minclass=3/g" /etc/pam.d/common-password
sed -i "1,/99999/{s/99999/15/}" /etc/login.defs
is_in_file 'auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800' /etc/pam.d/common-auth
if [ $? == 1 ]
thensed -i '15i auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800' /etc/pam.d/common-auth
fi# 设置iptables规则
rules=`iptables -L -n | grep DROP | grep 135 | wc -l` # 如果查询有135端口DROP的策略,则视作以下所有策略均已做过,不再进行添加
if [ $rules == 0 ]
theniptables -Fiptables -A INPUT -p tcp --dport 135 -j DROPiptables -A INPUT -p tcp --dport 139 -j DROPiptables -A INPUT -p tcp --dport 445 -j DROPiptables -A INPUT -p tcp --dport 5800 -j DROPiptables -A INPUT -p tcp --dport 539 -j DROPiptables -A INPUT -p tcp --dport 593 -j DROPiptables -A INPUT -p udp --dport 137 -j DROPiptables -A INPUT -p udp --dport 138 -j DROPiptables -A INPUT -p udp --dport 69 -j DROPiptables -A INPUT -p udp --dport 1434 -j DROPiptables -A INPUT -p udp --dport 539 -j DROP
fi
/usr/sbin/netfilter-persistent save
iptables -L -n# 创建iptables脚本,并配置rc.local使该脚本开机运行
echo "#!/bin/bash" > /etc/network/if-pre-up.d/iptables.sh
echo "/sbin/iptables-restore < /etc/iptables/rules.v4" >> /etc/network/if-pre-up.d/iptables.sh
is_in_file 'bash /etc/network/if-pre-up.d/iptables.sh' /etc/rc.local
if [ $? == 1 ]
thensed -i '13i bash /etc/network/if-pre-up.d/iptables.sh' /etc/rc.local
fi# 修改root密码
#read -p "请输入root密码" one
#read -p "请再次确认密码" two
#[ $one == $two ] && echo $one | passwd --stdin root >& /dev/null
#if [ $? -eq 0 ]
#then
# echo "root的密码已经修改为$one"
# else
# echo "root的密码未修改成功"
#fi
编写shell脚本时,涉及到修改配置文件的操作,一定要注意对配置文件的影响,脚本通常会运行多次,那么sed、awk等的操作很可能会在配置文件中留下多次痕迹,所以需要做一下特别的判断和处理
安全加固脚本+修改root密码->出现root始终无法登录问题相关推荐
- NVIDIA Jetson TK1学习与开发(十一):TK1新装ubuntu如何修改用户密码和root密码
NVIDIA Jetson TK1学习与开发(十一):TK1新装ubuntu如何修改用户密码和root密码 1.修改用户密码 进入系统打开一个新终端 $passwd ubuntu $输入默认密码ubu ...
- MySQL初始化root密码以及root密码忘记解决方法
MySQL初始化root密码以及root密码忘记解决方法 参考文章: (1)MySQL初始化root密码以及root密码忘记解决方法 (2)https://www.cnblogs.com/liuyu2 ...
- SQL Server以windows验证登录之后,修改sa密码,不能用sa登录的解决方案
2019独角兽企业重金招聘Python工程师标准>>> SQL Server以windows验证登录之后,修改sa密码,不能用sa登录的解决方案 问题:SQL Server Mana ...
- 华为服务器修改root密码,服务器root密码修改
服务器root密码修改 内容精选 换一换 由于root用户拥有最高权限,直接使用root用户登录服务器可能会存在安全风险.建议您使用普通用户登录服务器后切换为root用户,再执行后续安装操作,并建议您 ...
- 如何修改服务器root密码,服务器root密码修改
服务器root密码修改 内容精选 换一换 本节操作介绍Linux云服务器切换密钥登录为密码登录的操作步骤.使用密钥登录Linux云服务器,设置root密码.sudo passwd root若密钥文件丢 ...
- 【Linux】通过 Shell 脚本修改用户密码
1. Linux 中修改用户密码 Linux 中要修改一个用户的密码通常是使用 passwd 命令来完成,命令格式如下. #一般使用格式 passwd [username] [注]:若其后不加任何 ...
- mysql忘记root密码与root帐号被删除处理方法
windows服务器如果使用西部数码的管理助手,重置方法请参考:管理助手重置mysql的root密码 -西部数码帮助中心 linux服务器如果使用WDCP系统,wdcp修改mysql密码.wdcp后台 ...
- MYSQL5.7 忘记ROOT密码/初始化ROOT密码
编辑my.cnf允许空密码登录 1 [root@7Core ~]# vi /etc/my.cnf 2 #在[mysqld]下加入一行 3 skip-grant-tables=1 重新启动Mysql服务 ...
- iis mysql密码_mysql忘记root密码与root帐号被删除处理方法
说明:请根据自己主机系统及问题选择对应步骤. 1.查找修改配置文件 修改my.ini(windows系统)或my.cnf(linux系统)文件, windows系统:my.ini在mysql的安装目录 ...
最新文章
- python高级网络编程_python高级编程——网络编程(二)
- canvas之三:绘制弧和圆
- java 枚举抽象方法_Java枚举抽象方法实战
- C++ Primer plus 第12章类和动态内存分配复习题参考答案
- Asp.Net_Mvc_IgnoreRoute
- JavaScript之自定义对象
- Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(
- 基于.NET的系统开发需要注意的问题总结
- django 视图-----视图函数
- (34)System Verilog引用包中定义的类(失败)
- linux flush 磁盘,linux 磁盘IO栈和优化思路
- 网站通用 敏感词列表
- link标签的real属性理解
- Qt导航栏 QListWidget
- 【总结】1298- 如何用油猴提升前端开发效率
- NOT EXISTS真的不走索引么?如何优化NOT EXISTS!
- 兼职跑网约车能赚钱吗?
- Java中相等的判断
- 软考前该怎样复习才能一次通过?
- 深入浅出 | 图像分类之数据增强全梳理