前言:
一般情况下,我们对于账号的安全是比较随意的,因为在生产环境里,基本都是使用堡垒机这样的带有安全审计功能的工具对各个主机进行监控,管理,并且结合prometheus,zabbix等等其它监控软件,会对主机的一个整体概况有一个直观的感受。
OK,如果堡垒机什么的任意一个点被持有恶意的人攻破,那么,无疑是会引发数据泄露的,因此,我们需要从根源上对主机做安全加固,比如,
- 操作系统内的所有用户的密码设定复杂度,例如,密码长度不低于8位,必须带有大小写和特殊符号至少一个,密码不得设定为常用字,例如,不得设置system,system32 这样的密码,以增加恶意人员的暴力破解难度;
- 限制ssh远程登陆的IP范围,防止恶意的试探性的ssh链接;
- 限制除root用户外的其它普通用户的权限(也就是su 和sudo这些)
- 定期强制更换密码
相信如果有以上这些措施,那么,主机的安全将会得到极大的保证。
OK,下面将就如何做好服务器安全加固做一个简单的介绍。
一,
服务器的初始状态
首先,我们应该清楚,一个裸服务器安装完任意一个操作系统后,如果安装的时候没有定制动作,那么,此服务器是可以使用弱密码的,并且,通常只有一个root用户设置了密码(一般为了省事,root密码通常是一个弱密码),那,ssh服务通常也是开启的,并且默认的ssh链接端口是22,只要是同网段的其它机器都可以通过ssh工具(ssh工具指的是xshell,putty,securtCRT等等运维工具)连接服务器的。
OK,这样的现状无疑是对安全的一个重大挑战,那么,我们应该做一些定制化的动作,来规避这些安全方面的问题。
现有的一个问题是,Linux的版本众多,安全加固的手法和版本密切相关,例如,ubuntu和centos的安全加固可能会有比较大的不同,下面将以Linux内的两大系统ubuntu和centos为例,讲解如何进行服务器的安全加固。
二,
sshd服务的安全加固
1,
修改sshd服务的端口
此方法是Linux操作系统通用的,不管是哪种版本都适用,这么做得目的是防止黑客端口嗅探,例如,将22端口修改为58463,即使黑客通过nmap,medusa,或者其它类嗅探工具检测到了58463,很大概率它也不会知道此端口开放的服务是什么,可能需要其它技术,例如指纹技术才可以确定,无疑的,这么一个小改动会大大的提升sshd服务的安全。
修改方法非常简单,打开/etc/ssh/sshd_config文件
#Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: ##########取消Port的注释,Port的值改为58463 Port 58463 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
重启sshd服务即可,ubuntu一般是service sshd restart centos一般是systemctl restart sshd,重新登陆后,可以看到端口是这样的:
[root@k8s-node1 ~]# netstat -antup |grep sshd tcp 0 0 192.168.123.12:58463 0.0.0.0:* LISTEN 24630/sshd
2,
sshd限制IP登陆策略
黑白名单策略
linux 服务器通过设置/etc/hosts.allow和/etc/hosts.deny这个两个文件,hosts.allow许可大于hosts.deny可以限制或者允许某个或者某段IP地址远程 SSH 登录服务器,方法比较简单,且设置后立即生效,不需要重启SSHD服务,具体如下:
/etc/hosts.allow添加 sshd:192.168.0.1:allow #允许 192.168.0.1 这个IP地址SSH登录 sshd:192.168.0.:allow #允许192.168.0.1/24这段IP地址的用户登录,多个网段可以以逗号隔开,比如192.168.0.,192.168.1.:allow /etc/hosts.allow添加 sshd:ALL #允许全部的ssh登录 /etc/hosts.deny添加 sshd:ALL #拒绝全部IP
那么,在实际操作中,一般策略是这样设置的:
口诀大体如下:拒绝所有,放行特定
拒绝策略,这个基本是不变的
/etc/hosts.deny添加 sshd:ALL #拒绝全部IP
放行特定,例如,我的是VMware虚拟机,网络是nat,sshd服务在192.168.123.12这个服务器上,网关是192.168.123.2,那么,接受同网段的其它服务器ssh连接即可:
# # hosts.allow This file contains access rules which are used to # allow or deny connections to network services that # either use the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers sshd:192.168.123.:allow
如果是使用xshell,那么,客户端IP应该是192.168.123.1,因此,使用精确IP定义:
# # hosts.allow This file contains access rules which are used to # allow or deny connections to network services that # either use the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers #sshd:192.168.123.:allow #整体网段放行 sshd:192.168.123.1 #单独IP放行
此时,如果要ssh登陆192.168.123.12这台服务器,那么,将只接受宿主机上安装的xshell,其它ssh登陆都会拒绝:
例如,在192.168.123.152上,登陆192.168.123.12,将会失败
root@k8s-node2:~# ssh -v -p 58463 192.168.123.12 OpenSSH_7.6p1 Ubuntu-4ubuntu0.5, OpenSSL 1.0.2n 7 Dec 2017 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 192.168.123.12 [192.168.123.12] port 58463. debug1: Connection established. debug1: permanently_set_uid: 0/0 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_rsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_dsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_dsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ed25519 type -1 debug1: key_load_public: No such file or directory debug1: identity file /root/.ssh/id_ed25519-cert type -1 debug1: Local version string SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5 ssh_exchange_identification: read: Connection reset by peer
当然了,还一种策略是allow文件内不写,deny内结合/var/log/secure这个安全审计日志,将恶意ssh登陆的IP封禁即可:
例如,封禁192.168.123这个网段,禁止其中所有IP使用ssh服务,此时,如果allow文件内有允许192.168.123网段,allow名单将会生效,deny名单失效。
[root@k8s-node1 ~]# cat /etc/hosts.deny # # hosts.deny This file contains access rules which are used to # deny connections to network services that either use # the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # The rules in this file can also be set up in # /etc/hosts.allow with a 'deny' option instead. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # #sshd:ALL #拒绝全部IP sshd:192.168.123.:deny
注:黑白名单一般用于云主机以及在服务器遭遇攻击的时候,进行服务器保护。
三,
Linux的用户登陆策略
这里的用户策略指的是细分普通用户,指定普通用户以及root用户是否可以登陆系统
1,
usermod命令 锁定账号和解除锁定账号
[root@k8s-node1 ~]# usermod -L root ##锁定账号,这里是root,可以替换为其它任意普通账号 [root@k8s-node1 ~]# usermod -U root ##解除锁定账号,这里是root,可以替换为其它任意普通账号
注:用户锁定期间,无论在输入正确还是错误的密码,都将视为错误密码,并以最后一次登录为锁定起始时间,若果用户解锁后输入密码的第一次依然为错误密码,则再次重新锁定。
2,
chsh命令
更改用户的登陆shell
本例仍然是以root用户为例
禁止root登陆
[root@k8s-node1 ~]# chsh -s /sbin/nologin root Changing shell for root. Shell changed.
恢复root用户登陆
这里需要注意,我们的可用shell有哪些,需要查询一下:
[root@k8s-node1 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin
选择以上的shell,重新设定一下即可,例如使用sh:
[root@k8s-node1 ~]# chsh -s /bin/sh root Changing shell for root. Shell changed. ###xshell登陆后,变成容器一般使用的shell了 WARNING! The remote SSH server rejected X11 forwarding request. Last login: Wed Mar 1 00:04:12 2023 from 192.168.123.1 -sh-4.2# ####恢复成bash shell [root@k8s-node1 ~]# chsh -s /usr/bin/bash root Changing shell for root. Shell changed. WARNING! The remote SSH server rejected X11 forwarding request. Last login: Wed Mar 1 00:07:55 2023 from 192.168.123.1 [root@k8s-node1 ~]#
四,
Linux 用户的密码策略
用户的密码策略具体包括:1,密码的强度 2,密码的时效 ,该策略的实施是借由Linux的内核模块PAM实现。
首先,需要说明的是,密码强度也可以称之为密码的复杂度,具体来说,就是设定密码的时候,密码至少需要几位的字符组成,字符里是否包含大小写字面,是否是常见单词,是否是字符和数字混合的密码,而默认的,例如新安装的操作系统,是没有任何的密码复杂度的,也就是密码没有任何要求,随意的密码都可以设置,这显然是不符合我们对于安全的需求的,因此,我们需要设置密码的复杂度。
附1:密码的等级划分
弱密码:简单的由纯数字或者字母组成的密码,并且密码长度小于6位,通常,我们就可以认为这个是弱密码,例如,支付宝的密码,银行卡的密码(这里说明一下,虽然银行卡密码比较短,但登陆次数有限制,例如,某个银行账户,密码错误3次,账户就锁定很长时间,这无疑给暴力破解增加了很大的难度),或者schoole321这样的由简单的单词加比较少的数字组成的密码,以及system135,admin,admin32,等等这样的由单词和少量数字组成的密码,我们都可以认为这个是弱密码。
强密码:由至少8位的字符,特殊符号和数字混合组成的,字符里有大小写,不包含常用单词,那么,这样的密码我们认为是一个强密码,例如,Ej@l)df1 这样的密码就是一个强密码,当然,这样的密码暴力破解通常是需要至少几个月的时间。
其次,默认的是新安装的操作系统任何密码都永不过期,如果密码不经常重设,那么,暴力破解密码就很有希望。例如,一个操作系统的root密码几年没有变化,那么,一个8位的由大小写和数字组成的密码,通常暴力破解也就是3 4个月的时间(如果字典是比较合适的情况下),如果是12位的强密码,那么,暴力破解的时间是几何增长的,几年十几年都有可能。因此,一个合适的密码强度可以完美的保护重要的服务器(自己泄露那种就没办法了,堡垒通常都是由内部攻克的)。
OK,密码的重要性不在这里废话了,那么,下面就讲述如何通过PAM模块自定义一个合适的密码策略。
附2:PAM模块是Linux内核的安全认证模块,说它是一个函数库也没什么问题,主要就是负责安全认证工作,例如,检查账号的登陆合法性,密码的合理性等等工作都是由这个PAM模块负责。
1 PAM的模块类型
Linux-PAM有四种模块类型,分别代表四种不同的任务,它们是:
- auth模块: 用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等,主要是认证管理
- account模块: 对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等,主要是账号管理
- session模块: 这个模块用来定义用户登录前的,及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等,主要是会话管理
- password模块: 使用用户信息来更新.如:修改用户密码,设定密码复杂度等等,主要是密码管理
那么,在centos和Debian系列里,分别是/etc/pam.d/system-auth(centos,Redhat)/etc/pam.d/common-password(Debian系列,ubuntu是包含在Debian的)这两个文件里的password模块内实现
在CentOS 7上实现密码复杂度策略设置,主要是由PAM pwquality模块完成
1、备份原有配置文件
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
2、设置复杂度策略
vim /etc/pam.d/system-auth
找到包含pam_pwquality.so模块的行,将原有行注释并修改为如下的新配置,密码长度最少12位,至少包含一个大写字母,一个小写字母,一个数字,一个特殊符号。
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
- minlen=12 密码最小长度为8个字符。
- lcredit=-1 密码应包含的小写字母的至少一个
- ucredit=-1 密码应包含的大写字母至少一个
- dcredit=-1 将密码包含的数字至少为一个
- ocredit=-1 设置特殊字符的最小数量,例如@,#、! $%等,至少要有一个
- enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略。
Ubunu设置密码规则
- 安装crackilib模块,注意,ubuntu的密码策略主要是由cracklib模块实现
sudo apt-get install libpam-cracklib
修改 /etc/pam.d/common-password文件
添加以下配置信息
# here are the per-package modules (the "Primary" block) password requisite pam_cracklib.so retry=3 minlen=8 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 enforce_for_root password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=5
- retry=3 允许重试次数
- minlen=8 密码最小长度
- difok=3 默认值是1,允许新旧密码中相同的字符数
- ucredit 新密码中至少有1个大写字符
- lcredit=-1 新密码中至少有1个小写字符
- dcredit=-1 新密码中至少有1个数字
- ocredit=-1 新密码中至少有1个特殊字符
- enforce_for_root 此规则对root生效
五,
Linux系统内的密码时效设置和登陆失败策略
####注,这一部分适用于centos7,redhat7 以及同centos7版本的欧拉操作系统
####注,所有操作建议使用root用户,权限够高,会省去很多麻烦,需要提前准备好原密码和一个新的高强度密码
作用:
密码时效策略是保证按期及时的修改重要用户的密码,防止发生密码泄露,而登陆失败策略则是破坏暴力破解方式的无限登陆,比如,某个用户的密码错误,则一段时间内禁止再次登陆,如果配合密码策略,设置一个强密码,那么,暴力破解的情况是可以完全杜绝的。
一,
正式修改用户密码策略和登录策略之前的备份以防止策略将自己拦在门外:
cp /etc/passwd{,.bak}
cp /etc/shadow{,.bak}
如果出现自己被拦在门外的情况,第一时间恢复这两个文件即可,恢复命令:
cp /etc/passwd.bak /etc/passwd 输入y确认覆盖
cp /etc/shadow.bak /etc/shadow 输入y确认覆盖
二,开始配置策略
1,全局策略,对以后得新建用户生效
惯例,先备份文件在操作
cp /etc/login.defs{,.bak}
开始编辑:
vim /etc/login.defs
该文件原文的密码相关模块如下:
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
修改为:
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 30
PASS_MIN_DAYS 0
PASS_MIN_LEN 8
PASS_WARN_AGE 7
以上配置表示,修改在30天内密码不会过期,可以随时修改密码,密码长度至少8位,密码过期前的7天开始提醒修改密码。
######注:该配置文件需要服务器重启才会生效!!!!!由于是针对新建用户,因此,重启与否可以自己定。
2,
定义密码复杂度
惯例,先备份文件在操作
cp /etc/pam.d/system-auth{,.bak}
vim /etc/pam.d/system-auth
找到包含pam_pwquality.so模块的行,将原有行注释并修改为如下的新配置,密码长度最少12位,至少包含一个大写字母,一个小写字母,一个数字,一个特殊符号。
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
含义如下:
minlen=12 密码最小长度为8个字符。
lcredit=-1 密码应包含的小写字母的至少一个
ucredit=-1 密码应包含的大写字母至少一个
dcredit=-1 密码包含的数字至少为一个
ocredit=-1 设置特殊字符的最小数量,例如@,#、! $%等,至少要有一个
enforce_for_root 确保即使是root用户设置密码,也应强制执行复杂性策略。
3,
设置密码过期策略并应用上面的密码复杂度策略
命令如下:
chage -m 5 -M 30 -I 30 -W 14 -d 0 root
###注:该命令无任何输出表示正确,下面查看密码期限策略
[root@centos1 ~]# chage -l root
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : Jun 30, 2023
Minimum number of days between password change : 5
Maximum number of days between password change : 30
Number of days of warning before password expires : 14
####注,以上表示密码必须立刻更改,sshd新开一个窗口,示例如下:
You are required to change your password immediately (root enforced)
Last login: Fri Jun 23 11:21:30 2023 from 192.168.123.1
cd ~
Changing password for root.
(current) UNIX password: (原密码)
New password: (新密码)
Retype new password: (新密码)
再次查看密码修改策略:
[root@centos1 ~]# chage -l root
Last password change : Jun 23, 2023
Password expires : Jul 23, 2023
Password inactive : Aug 22, 2023
Account expires : Jun 30, 2023
Minimum number of days between password change : 5
Maximum number of days between password change : 30
Number of days of warning before password expires : 14
###参数说明:
-m参数是强制修改密码的期限,单位为天,本例是5天
-M参数是强制修改密码的期限,单位为天,本例是90天
-l 参数是如果超过上述规定时间没有更改密码,账号将被锁定,本例锁定时间是30天
-W参数是警告时间,本例是14天,也就是在最终天数90天的14天前开始提醒修改密码
-d 0 表示重新登录的时候必须修改密码,仅修改一次
这里以一个刚安装完的centos7为例,现在查看root用户的密码策略:
[root@centos4 harbor]# chage -l root Last password change : never Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
OK,总共是7行输出,我们按行来一一设置:
A,
Last password change
这个是表示密码的更改时间记录,下面我做了一次密码更改,它立刻就反应出来并记录了
[root@centos4 harbor]# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@centos4 harbor]# chage -l root Last password change : Jun 30, 2023 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
B,
Password expires 密码过期时间的设定(相对当前日期来说的),本例我是2023年6月30设置的,10天后过期,参数是M因此,该行显示的是2023年7月10号过期
后果:注意,这个时间到了之后,会提示你修改密码,系统还是可以登录的,登录的时候必须重新设定密码,大概是这样的提示
You are required to change your password immediately (password aged)
Last login: Tue Feb 28 11:22:19 2023 from 10.10.10.xxx
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user oracle.
Changing password for oracle.
(current) UNIX password:
[root@centos4 harbor]# chage -M 10 root [root@centos4 harbor]# chage -l root Last password change : Jun 30, 2023 Password expires : Jul 10, 2023 Password inactive : never Account expires : Jul 05, 2023 Minimum number of days between password change : 0 Maximum number of days between password change : 10 Number of days of warning before password expires : 7
C,
Password inactive 密码失效的时间设定,这个时间的设定是根据上面的expires相对来说的
本例是设定在expires的一天后
后果:在时间到了之后,root彻底不可登陆,因此,时间是2023年7月11号,该服务器的root用户将不可登陆,如果登陆,将会出现联系系统管理员的提示。
[root@centos4 harbor]# chage -I 1 root [root@centos4 harbor]# chage -l root Last password change : Jun 30, 2023 Password expires : Jul 10, 2023 Password inactive : Jul 11, 2023 Account expires : Jul 03, 2023 Minimum number of days between password change : 10 Maximum number of days between password change : 10 Number of days of warning before password expires : 7
D,
Account expires 账户过期时间,设定时使用的参数是E,
本例是设定2023年7月3号账号过期
后果:本例中,将在23年7月3号,该服务器不可使用root登录,如果登陆,将会出现联系系统管理员的提示。
[root@centos4 harbor]# chage -E 2023-07-03 root [root@centos4 harbor]# chage -l root Last password change : Jun 30, 2023 Password expires : Jul 10, 2023 Password inactive : Jul 11, 2023 Account expires : Jul 03, 2023 Minimum number of days between password change : 10 Maximum number of days between password change : 10 Number of days of warning before password expires : 7
E,
Minimum number of days between password change 密码更新频率设定
[root@centos4 harbor]# chage -m 5 root [root@centos4 harbor]# chage -l root Last password change : Jun 30, 2023 Password expires : Jul 10, 2023 Password inactive : Jul 11, 2023 Account expires : Jul 03, 2023 Minimum number of days between password change : 5 Maximum number of days between password change : 10 Number of days of warning before password expires : 7
F,
Maximum number of days between password change 密码更新频率设定,该时间等于Password expires
可以看到,过期时间变更为了11月8号,Password inactive跟随变更为了11月9号,那么,如果到11月9号密码变更了,将会进入下一个密码更新周期,expires的日期也会自动变更。
[root@centos4 harbor]# chage -M 100 root [root@centos4 harbor]# chage -l root Last password change : Jun 30, 2023 Password expires : Oct 08, 2023 Password inactive : Oct 09, 2023 Account expires : Jul 03, 2023 Minimum number of days between password change : 5 Maximum number of days between password change : 100 Number of days of warning before password expires : 7
G,
Number of days of warning before password expires 在密码过期前的警告时间,使用的参数是W
那么,在本例中,在11月5号的时候登录将会提示密码即将过期,但不限制登陆。
[root@centos4 harbor]# chage -W 3 root [root@centos4 harbor]# chage -l root Last password change : Jun 30, 2023 Password expires : Oct 08, 2023 Password inactive : Oct 09, 2023 Account expires : Jul 03, 2023 Minimum number of days between password change : 5 Maximum number of days between password change : 100 Number of days of warning before password expires : 3
密码过期警告大概这样的:
Connecting to 192.168.123.11:22... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. WARNING! The remote SSH server rejected X11 forwarding request. Warning: your password will expire in 4 days
示例:
dchage -E 6/30/2023 -m 5 -M 30 -I 30 -W 14 -d 0 root
###参数说明:
-m参数是强制修改密码的期限,单位为天,本例是5天
-M参数是强制修改密码的期限,单位为天,本例是30天
-l 参数是如果超过上述规定时间没有更改密码,账号将被锁定,本例锁定时间是30天
-W参数是警告时间,本例是14天,也就是在最终天数90天的14天前开始提醒修改密码
-d 0 表示重新登录的时候必须修改密码,仅修改一次
这个策略表示的是2023年7月23日该系统的root密码将会失效,2023年8月22日用户将无法登陆,
如果在7月23修改了密码,过期时间将会刷新30天,Account expires 不会因为密码更新而更新。
因此,-E参数慎重使用,-I参数也是慎重使用,一般只使用-M和-m,-W参数即可(非常重要)
因此,-E参数慎重使用,-I参数也是慎重使用,一般只使用-M和-m,-W参数即可(非常重要)
因此,-E参数慎重使用,-I参数也是慎重使用,一般只使用-M和-m,-W参数即可(非常重要)
因此,-E参数慎重使用,-I参数也是慎重使用,一般只使用-M和-m,-W参数即可(非常重要)
因此,-E参数慎重使用,-I参数也是慎重使用,一般只使用-M和-m,-W参数即可(非常重要)
因此,-E参数慎重使用,-I参数也是慎重使用,一般只使用-M和-m,-W参数即可(非常重要)
小结:
chage命令是比较危险的,主要是-M参数,-E参数需要小心设定,并在设定后严格按照设定的策略及时修改密码,否则,账户有被禁止登录的风险。
如果出现禁止登录的情况,并且用户还是root的情况,那么,只有进安全模式修改/etc/shdown文件了
还是以本例为例子,倒数第一和第五点的内容去掉就可以了:
[root@centos4 harbor]# cat /etc/shadow |grep root root:$6$aemItfNk$WIIQpAZtCHUvdXLYBPKFhA5.ek6B.UphNZJo2j1jym9WYvoQLs2tHVIO9HiHiIBJ60tBeQTp7.JhhTtBbh59D/:19538:5:100:3:1:19541:
修改为(也就是把19538和19541删除掉):
[root@centos4 harbor]# cat /etc/shadow |grep root root:$6$aemItfNk$WIIQpAZtCHUvdXLYBPKFhA5.ek6B.UphNZJo2j1jym9WYvoQLs2tHVIO9HiHiIBJ60tBeQTp7.JhhTtBbh59D/::5:100:3:1::
账号状态如下:
[root@centos4 harbor]# chage -l root Last password change : never Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 5 Maximum number of days between password change : 100 Number of days of warning before password expires : 3
4,
用户登录策略
作用:限制用户登录次数,失败次数过多就锁定账号,以此降低黑客破解密码的效率
策略编写说明:
用户登录分为两个层次,第一个层次是本地登录,由/etc/pam.d/system-auth 配置管理,第二个层次是ssh远程登录,由/etc/pam.d/sshd 配置管理
修改 /etc/pam.d/system-auth 文件,添加下面配置(注意,这一行最好是加在第一行)
auth required pam_tally2.so deny=3 lock_time=10 unlock_time=300 even_deny_root root_unlock_time=60
修改/etc/pam.d/sshd文件,添加下面配置(注意,这一行最好是加在第一行)
auth required pam_tally2.so onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=30
参数说明:
deny=3 允许登录失败次数
lock_time=10 每次登录失败锁定时间,单位 秒
unlock_time=300 触发登录失败次数后锁定时间 单位 秒
root_unlock_time 触发登录失败次数后锁定时间 单位 秒
even_deny_root 针对所有用户生效,包括root
5,
登录超时策略
作用:如果某个用户登录了,在多少秒内没有任何操作,自动踢出该用户
设置策略:
编写环境变量配置文件,最末尾加以下内容:
vim /etc/profile
TMOUT=10
export TMOUT
激活变量:
source /etc/profile
注:我这里是为了快速看到效果,因此是10秒没有操作就自动踢出登录。实际操作一般是300秒也就是5分钟的设定
总结:
总计六个文件,在做策略前全部需要备份,这六个文件是
/etc/login.defs
/etc/passwd
/etc/shadow
/etc/pam.d/system-auth
/etc/pam.d/sshd
/etc/profile
原root密码和新的符合标准的root密码需要提前准备好,然后按照文档的顺序先后编辑,并最终测试好。