您的需求已经提交,我们将在48小时内联系您
全国服务热线:400-1000-221
确定
免费享受企业级云安全服务
获取手机验证码
{{message}}
免费试用

如何对linux服务器进行安全加固

作者:
发布时间:2020-08-12

  linux是一套免费使用的操作系统,并且使用者可以自身的需求来修改和完善linux系统,使得linux系统受到广大用户的喜爱。但是如果服务器搭载着linux操作系统的话,除了实现功能之外,还需要考虑系统安全方面的问题,那么如何对linux服务器进行安全加固呢?我们一起来了解下吧。

如何对linux服务器进行安全加固

如何对linux服务器进行安全加固

 

  如何对linux服务器进行安全加固?对未经过安全认证的RPM包进行安全检查

  rpm -qp xxx.rpm --scripts 查看rpm包中的脚本信息

  Linux用户方面的加固

  设定密码策略

  修改 /etc/login.defs 配置文件

  PASS_MAX_DAYS 90 密码最长有效期

  PASS_MIN_DAYS 10 密码修改之间最小的天数

  PASS_MIN_LEN 8 密码长度

  PASS_WARN_AGE 7 口令失效前多少天开始通知用户修改密码

  脚本实现设定密码策略

  #! /bin/bash# Author:谢公子# Date: 2018-10-12# Function: 实现对用户密码策略的设定,如密码最长有效期等read -p "设置密码最多可多少天不修改:" Aread -p "设置密码修改之间最小的天数:" Bread -p "设置密码最短的长度:" Cread -p "设置密码失效前多少天通知用户:" Dsed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS '$A'' /etc/login.defssed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS '$B'' /etc/login.defssed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN '$C'' /etc/login.defssed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE '$D'' /etc/login.defsecho "已设置好密码策略......"

  对用户密码强度的设定

  打开 /etc/pam.d/sysetm-auth 文件 ,修改如下。我们设置新密码不能和旧密码相同,同时新密码至少8位,还要同时包含大字母、小写字母和数字

  password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1

  difok= :此选项用来定义新密码中必须要有几个字符和旧密码不同

  minlen=:此选项用来设置新密码的最小长度

  ucredit= :此选项用来设定新密码中可以包含的大写字母的最大数目。-1 至少一个

  lcredit=:此选项用来设定新密码中可以包含的小写字母的最大数目

  dcredit=:此选项用来设定新密码中可以包含的数字的最大数目

  注:这个密码强度的设定只对普通用户有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功

  脚本实现对用户密码强度的设定

  #! /bin/bash# Author:谢公子# Date: 2018-10-12# Function: 对用户密码强度的设定,新密码不能和旧密码相同,同时新密码至少8位,还要同时包含大字母、小写字母和数字sed -i '/pam_pwquality.so/c\password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1' /etc/pam.d/system-auth

  对用户的登录次数进行限制

  有一些攻击性的软件是专门采用暴力破解密码的形式反复进行登录尝试,对于这种情况,我们可以调整用户登录次数限制,使其密码输入3次后自动锁定,并且设置锁定时间,在锁定时间内即使密码输入正确也无法登录

  打开 /etc/pam.d/sshd 文件,在 #%PAM-1.0 的下面,加入下面的内容,表示当密码输入错误达到3次,就锁定用户150秒,如果root用户输入密码错误达到3次,锁定300秒。锁定的意思是即使密码正确了也登录不了

  auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300

  当输入3次密码错误时

  pam_tally2 查看被锁定的用户

  pam_tally2 --reset -u username 将被锁定的用户解锁

  脚本设置对用户的登录次数做限制

  #! /bin/bash# Author:谢公子# Date: 2018-10-12# Function: 对用户登录输入错误密码次数做限制n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`if [ $n -eq 0 ];thensed -i '/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300' /etc/pam.d/sshdfi

  禁止ROOT用户远程登录

  禁止ROOT用户远程登录 。打开 /etc/ssh/sshd_config

  脚本设置禁止ROOT用户远程登录

  #! /bin/bash# Author:谢公子# Date: 2018-10-12# Function: 禁止ROOT用户远程登录sed -i '/PermitRootLogin/c\PermitRootLogin no' /etc/ssh/sshd_config

  设置历史命令保存条数和账户超时时间

  设置账户保存历史命令条数,超时时间 。打开 /etc/profile ,修改如下

  使用脚本修改配置文件

  #! /bin/bash# Author:谢公子# Date: 2018-10-12# Function: 修改配置文件,设置历史命令保存条数和账户自动注销时间read -p "设置历史命令保存条数:" Eread -p "设置账户自动注销时间:" Fsed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profilesed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile

  设置只有指定用户组才能使用su命令切换到root用户

  在linux中,有一个默认的管理组 wheel。在实际生产环境中,即使我们有系统管理员root的权限,也不推荐用root用户登录。一般情况下用普通用户登录就可以了,在需要root权限执行一些操作时,再su登录成为root用户。但是,任何人只要知道了root的密码,就都可以通过su命令来登录为root用户,这无疑为系统带来了安全隐患。所以,将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户。然后设置只有wheel组内的成员可以使用su命令切换到root用户。

  比如,我们将普通用户xie加入wheel组。 usermod -G wheel xie

  然后,我们修改配置文件 /etc/pam.d/su ,将这行的注释给去掉

  然后去 /etc/login.defs 末尾加入 SU_WHEEL_ONLY yes 即可。

  当 tom 用户使用su命令切换到root用户时,会提示拒绝权限

  使用脚本设置配置文件

  #! /bin/bash# Author:谢公子# Date: 2018-10-12# Function: 修改配置文件,使得只有wheel组的用户可以使用 su 权限sed -i '/pam_wheel.so use_uid/c\auth required pam_wheel.so use_uid ' /etc/pam.d/sun=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`if [ $n -eq 0 ];thenecho SU_WHEEL_ONLY yes >> /etc/login.defsfi

  对Linux账户进行管理

  使用命令 userdel -r 用户名 删除不必要的账号

  使用命令 passwd -l 用户名 锁定不必要的账号

  使用命令 awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd 查看具有登录权限的用户

  使用命令 awk -F: '($3==0)' /etc/passwd 查看UID为0的账号,UID为0的用户会自动切换到root用户,所以危害很大

  使用命令 awk -F: '($2=="")' /etc/shadow 查看空口令账号,如果存在空口令用户的话必须设置密码

  使用脚本对账户进行管理

  #! /bin/bash# Author:谢公子# Date:2018-10-11# Function: 对系统中的用户做检查,加固系统echo "系统中有登录权限的用户有:"awk -F: '($7=="/bin/bash"){print $1}' /etc/passwdecho "********************************************"echo "系统中UID=0的用户有:"awk -F: '($3=="0"){print $1}' /etc/passwdecho "********************************************"N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`echo "系统中空密码用户有:$N"if [ $N -eq 0 ];then echo "恭喜你,系统中无空密码用户!!" echo "********************************************"else i=1 while [ $N -gt 0 ] do None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'` echo "------------------------" echo $None echo "必须为空用户设置密码!!" passwd $None let N-- done M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l` if [ $M -eq 0 ];then echo "恭喜,系统中已经没有空密码用户了!" elseecho "系统中还存在空密码用户:$M" fifi

  对重要的文件进行锁定,即使ROOT用户也无法删除

  chattr 改变文件或目录的扩展属性

  lsattr 查看文件目录的扩展属性

  chattr +i /etc/passwd /etc/shadow //增加属性

  chattr -i /etc/passwd /etc/shadow //移除属性

  lsattr /etc/passwd /etc/shadow

  使用脚本对重要文件进行锁定

  #! /bin/bash# Author: 谢公子# Date:2018-10-10# Function: 锁定创建用户和组的文件,使之无法对用户和组进行操作!read -p "警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:" icase $i in [Y,y]) chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/group chattr +i /etc/gshadow echo "锁定成功!";; [N,n]) chattr -i /etc/passwd chattr -i /etc/shadow chattr -i /etc/group chattr -i /etc/gshadow echo "取消锁定成功!!";; *) echo "请输入Y/y or N/n"esac

  一个脚本对上面所有的合并了

  #! /bin/bash# Author:谢公子# Date:2018-10-11# Function:对账户的密码的一些加固read -p "设置密码最多可多少天不修改:" Aread -p "设置密码修改之间最小的天数:" Bread -p "设置密码最短的长度:" Cread -p "设置密码失效前多少天通知用户:" Dsed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS '$A'' /etc/login.defssed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS '$B'' /etc/login.defssed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN '$C'' /etc/login.defssed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE '$D'' /etc/login.defs echo "已对密码进行加固,新用户不得和旧密码相同,且新密码必须同时包含数字、小写字母,大写字母!!"sed -i '/pam_pwquality.so/c\password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1' /etc/pam.d/system-auth echo "已对密码进行加固,如果输入错误密码超过3次,则锁定账户!!"n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`if [ $n -eq 0 ];thensed -i '/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300' /etc/pam.d/sshdfi echo "已设置禁止root用户远程登录!!"sed -i '/PermitRootLogin/c\PermitRootLogin no' /etc/ssh/sshd_config read -p "设置历史命令保存条数:" Eread -p "设置账户自动注销时间:" Fsed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profilesed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile echo "已设置只允许wheel组的用户可以使用su命令切换到root用户!"sed -i '/pam_wheel.so use_uid/c\auth required pam_wheel.so use_uid ' /etc/pam.d/sun=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`if [ $n -eq 0 ];thenecho SU_WHEEL_ONLY yes >> /etc/login.defsfi echo "即将对系统中的账户进行检查...."echo "系统中有登录权限的用户有:"awk -F: '($7=="/bin/bash"){print $1}' /etc/passwdecho "********************************************"echo "系统中UID=0的用户有:"awk -F: '($3=="0"){print $1}' /etc/passwdecho "********************************************"N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`echo "系统中空密码用户有:$N"if [ $N -eq 0 ];then echo "恭喜你,系统中无空密码用户!!" echo "********************************************"else i=1 while [ $N -gt 0 ] do None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'` echo "------------------------" echo $None echo "必须为空用户设置密码!!" passwd $None let N-- done M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l` if [ $M -eq 0 ];then echo "恭喜,系统中已经没有空密码用户了!" elseecho "系统中还存在空密码用户:$M" fifi echo "即将对系统中重要文件进行锁定,锁定后将无法添加删除用户和组"read -p "警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:" icase $i in [Y,y]) chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/group chattr +i /etc/gshadow echo "锁定成功!";; [N,n]) chattr -i /etc/passwd chattr -i /etc/shadow chattr -i /etc/group chattr -i /etc/gshadow echo "取消锁定成功!!";; *) echo "请输入Y/y or N/n"esac

  建立日志服务器

  日志服务器的好处在于,每个工作服务器将自己的日志信息发送给日志服务器进行集中管理,即使有人入侵了服务器并将自己的登录信息悄悄删除,但由于日志信息实时与日志服务器同步,保证了日志的完整性。以备工作人员根据日志服务器信息对服务器安全进行评测。

  客户端的配置:

  打开 /etc/rsyslog.conf 配置文件

  你想把哪种类型的日志文件发送给服务端,你就把他原来的对应的目录改成: @192.168.10.20

  如果你想吧所有的日志文件都发送给服务器的话,你可以在文件最后加上: *.* @@192.168.10.20:514

  然后重启rsyslog服务: systemctl restart rsyslog

  服务器端的配置:

  打开 /etc/rsyslog.conf 配置文件,将这里的注释给去掉

  然后重启rsyslog服务:systemctl restart rsyslog

  开启防火墙: firewall-cmd --add-port=514/tcp

  这样客户端的相应的日志文件就会保存在服务器端的相应的文件中。

  

如何对linux服务器进行安全加固

 

  如何对linux服务器进行安全加固,这里提供对公司网站服务器安全加固的一些想法及思路:

  一、修改密码和ssh登录端口,并且尽可能的用密钥对登录,禁止用密码登录(主要针对Linux)

  二、修改/etc/hosts.allow 设置仅仅允许某几台去ssh

  sshd:45.195.

  修改/etc/hosts.deny

  sshd:ALL

  in.telnet:ALL

  三、把系统中的一些不必要的用户和组可以直接注释掉,例如mail,postfix这些邮件相关的可以注释掉,可以减小黑客通过这样的账户进入系统进行提权操作。

  四、开机自动启动的服务尽可能减少,除了nginx(apache)、mysql、宝塔、php等相关的,其余的尽可能的减少

  五、关闭无用的端口,同上。

  六、所有重要文件的权限需要尽可能的严格设置(这下面的内容有点多)

  chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/services

  chattr +a .bash_history #避免删除.bash_history或者重定向到/dev/null

  修改系统重要执行命令的权限

  chmod 700 /usr/bin

  chmod 700 /bin/ping

  chmod 700 /usr/bin/vim

  chmod 700 /bin/netstat

  chmod 700 /usr/bin/tail

  chmod 700 /usr/bin/less

  chmod 700 /usr/bin/head

  chmod 700 /bin/cat

  chmod 700 /bin/uname

  chmod 700 /bin/ps

  chmod -R 700 /etc/rc.d/init.d/*

  chmod 700 /usr/bin/chmod

  chmod 700 /usr/bin/chown

  七.网站和数据库做到定期备份,目录和文件的权限要严格设置,不能让其提权

  八.要适当利用Linux的特殊权限作出针对性的设置,合理利用sticky权限位提高安全性,网站目录给定的权限需要给定1755

  chmod 1755 目录名

  chmod o+t 目录名

  九.ssh登录的方式尽量采取证书登录而非密码登录 (所有Linux服务器已经全部支持证书登录了,目标已完成)

  十:禁用系统用户权限

  十一:修改默认命令记录历史(vim /etc/bashrc)

  export HISTSIZE=1000000 #修改命令记录条数

  export HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S `whoami` "     #记录操作时间、操作用户

  source /etc/bashrc

  十二:关闭Centos7的111端口

  由于111端口是有系统1号进程服务systemd启动,其上面跑的是rpcbind服务,停止的方法不能用kill,具体方法如下

  # 停止进程

  $ systemctl stop rpcbind.socket

  $ systemctl stop rpcbind

  # 禁止随开机启动

  $ systemctl disable rpcbind.socket

  $ systemctl disable rpcbind

  

如何对linux服务器进行安全加固

 

  关于如何对linux服务器进行安全加固的方法就讲解到这里,因为linux操作系统的扩展性非常强,所以每个人的操作方式可能都有些差异,因此在对linux服务器进行安全加固的时候,最好先提前对系统进行备份处理,以免因为误操作而导致linux系统出现问题。

标签: