文章目录
一、账号安全控制
1、系统账号清理
在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而产生的其他大量账号
除了root之外,其他大量账号只是用来维护系统运作,启动或保持服务进程,一般是不允许登录的,也称为非登录用户
常见的非登录用户包括bin,daemon,adm,lp,mail,nobody,apache,mysql,dbus,ftp,gdm,haldaemon等
为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动
#查看当前不可登录系统的用户
grep "/sbin/nologin" /etc/passwd
#也可以指定用户无法登录
usermod -s /sbin/nologin 用户名
1、1.账号锁住
usermod -L zhangsan #锁定账号
passwd -S zhangsan # 查看账号状态
passwd -l zhangsan 锁定用户账户
1、2.解锁账号
usermod -U zhangsan #解锁账号
passwd -u zhangsan #解锁账号
1、3.删除无用账号
userdel -r 用户名
1、4.锁定文件
如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方 法。使用 chattr 命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用 lsattr 命令可以查看文 件锁定情况
chattr +i /etc/passwd /etc/shadow #锁定文件
lsattr /etc/passwd /etc/shadow #查看为锁定的状
chattr -i /etc/passwd /etc/shadow #解锁文件
1、5.解锁文件
- 测试文件是否锁住
useradd lisi #查看结果
- 解锁文件
chattr -i /etc/passwd /etc/shadow #解锁文件
lsattr /etc/passwd /etc/shadow #查看为解锁的状态
二、密码安全控制
在不安全的网络环境中,为了降低密码被猜出或者被暴力破解的风险,用户应养成定期修改密码的习惯,避免长期使用同一个密码
管理员可以在服务器端限制用户密码的最大有效天数
对于密码已经过期的用户,登录时将被要求重新设置密码,否则拒绝登录
1.对于新建立的用户
vi /etc/login.defs #适用于新建的用户
#进入vi编辑器中设置密码有效期
PASS_MAX_DAYS 30 #设置密码有效期30天 默认99999
PASS_MIN_DAYS 0 #表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0
PASS_MIN_LEN 5 #密码最小长度,对于root无效
注解:指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。
PASS_WARN_AGE 7 #指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。
2.对于已有的用户使用 chage命令
chage -M 30 lisi #适用于已有的 lisi 用户
cat /etc/shadow | grep lisi
#执行以下操作可强制要求用户zhangsan下次登录时重设密码
chage -d 0 zhangsan
cat /etc/shadow | grep zhangsan
重新登录后,必须更改密码(重设的密码有密码复杂性要求,例如不可是连续的数字,连续的字母等)
三、命令历史限制
减少记录的命令条数:bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中 的所有用户
1.设置历史命令显示
例如:设置最多只记录200条历史命令
[root@localhost ~]# vi /etc/profile
将其中的HISTSIZE=1000,修改为HISTSIZE=200
[root@localhost ~]# source /etc/profile ##使用命令source /etc/profile或者换重启使之生效
2.历史命令清除
- 临时的清除
history -c
重启之后会重新出现
- 永久清空
#进入bash_history中编写
vim .bash_history
#追加清空历史命令
echo " " > .bash_history #清空记录
- 登录时自动清空
cd ~
vim .bashrc
echo '' > ~/.bash_history
如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,
.bash_history文件都会被删除.
四、终端自动注销
bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险
[root@localhost ~]# vi /etc/profile ##适用于新登录用户
export TMOUT=20 ##将闲置时间设为20S
[root@localhost ~]# source /etc/profile ##使设置生效
[root@localhost ~]# export TMOUT=30 ##对当前用户生效
五、用户切换命令 su
默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录密码,这样带来了安全风险
为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到 wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。
限制用户使用su命令
- 在/etc/pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/su
- 注释命令
#找以下命令
auth sufficient pam_ rootok.so
auth required pam_ wheel.so use_ _uid
#注释掉
#auth sufficient pam_ rootok.so
#auth required pam_ wheel.so use_ _uid
- 含义
-
以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
-
两行都注释也是运行所有用户都能使用su命令,但root’下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
-
如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
-
如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。
六、PAM安全认证
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险
为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
PAM(Pluggable Authentication Modules)可插拔式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式
- 也是当前Linux服务器普遍使用的认证方式
1.PAM认证原理
-
PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so
-
首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
-
用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
-
不同的应用程序所对应的PAM模块是不同的
2.PAM安全认证流程
-
required:验证失败时仍然继续,但返回Fail
-
requisite:验证失败则立即结束整个验证过程,返回Fail
-
sufficient:验证成功则立即返回,不再继续,否则忽略结果并继续
-
optional:不用于验证,只显示信息(通常用于session类型)
-
include : 表示在验证过程中,调用其他的PAM配置文件,比如很对应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
七、 使用sudo机制提升权限
1.sudo命令的用途及用法
- 用途:以其它的用户身份(如root)执行授权的命令
- 用法:sudo 授权命令
2.sudo命令
选项 | 作用 |
---|---|
-l | 列出用户在主机上可用的和被禁止的命令,一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的。 |
-v | 验证用户的时间戳,如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作,可以跟踪最新的时间戳 |
-u | 指定以用户执行特定操作 |
-k | 删除时间戳 |
3.用户组设置sudo提权
授权配置主要包括用户、主机、命令三个部分
-
用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
-
主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份sudoers 文件,一般设为 localhost 或者实际的主机名即可。
-
命令(COMMANDS):允许授权的用户通过 sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
例如
wangliu 用户可以使用useradd usermod
需求:wangliu root用户下的权限 useradd usermod
配置
visudo
wangliu ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod
如wangliu ALL=(root) NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/usermod #前面不需要输入密码 ,后面需要输入密码
八、用户别名案例
当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、 主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置
1.用户别名的语法格式
-
User_Alias 用户别名:包含用户、用户组(%组名(使用%引导))、还可以包含其他其他已经用户的别名
User_Alias OPERATORS=zhangsan,tom,lisi
-
Host_Alias
主机别名:主机名、IP、网络地址、其他主机别名 !取反Host_Alias MAILSVRS=smtp,pop
-
Cmnd_Alias
命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
例如,以下操作通过别名方式来添加授权记录,允许用户wangliu、 wangliu组、useradmin组 并且定义命令别名。
在主机 smtp、pop 中执行 rpm、yum 命令
User_Alias USERADMIN = wangliu,%wangliu ,%useradmin
Cmnd_Alias USERADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd,!/usr/bin/passwd root #取反的优先级最高
USERADMIN ALL=(root) NOPASSWD: USERADMINCMND
验证别名以及命令路径
注bug
sudo passwd root 测试
解决方法
Cmnd_Alias USERADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,! /usr/bin/passwd root
2.开关控制
1.调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘,U盘,网络)引导系统
- 安全级别设为setup,并设置管理员密码
2.限制更改GRUB引导参数
通常情况下载系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
命令操作
[root@kgc ~]# grub2-mkpasswd-pbkdf2 #根据提示设置GRUB菜单的密码
[root@kgc ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@kgc ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
[root@kgc ~]# vim /etc/grub.d/00_header
cat << EOF
set superusers="root" #设置密码,省略部分内容为经过加密生成的密码字符串
#使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。
[root@kgc ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的 grub.cfg 文件
重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。
一步到位
grub2-setpassword
3.终端登录安全控制
-
限制root只在安全终端登录
[root@localhost ~]# vi /etc/securetty #将tty2、tty3注释使root用户无法登录2、3终端 #tty2 #tty3
-
禁止普通用户登录
[root@localhost ~]# touch /etc/nologin ##创建此文件后其他用户已经无法登陆 [root@localhost ~]# rm -rf /etc/nologin ##删除此文件即可取消限制
九、网络端口扫描-nmap
1.namp
-
一款强大的网络扫描,安全检测工具
可以探测局域网中那些主机在线,或者某台主机中开了那些端口 -
NMAP的扫描语法
nmap [扫描类型] [选项] <扫描目标…> -
端口的取值范围是:0-65535
-
常用选项:-p、-n
- -p:分别用来指定扫描的端口
- n:禁用反向 DNS 解析(以加快扫描速度)
2.常用的几种扫描
选项 | 含义 |
---|---|
-sS | TCP SYN 扫描(半开扫描):只向目标发出 SYN 数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。 |
-sT | TCP 连接扫描:这是完整的 TCP 扫描方式,用来建立一个 TCP 连接,如果 成功则认为目标端口正在监听服务,否则认为目标端口并未开放。 |
-sF | TCP FIN 扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对 SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻 击包。这种类型的扫描可间接检测防火墙的健壮性。 |
-sU | UDP 扫描:探测目标主机提供哪些 UDP 服务,UDP扫描的速度会比较慢。 |
-sP | ICMP 扫描:类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。 |
-P0 | 跳过 ping 检测:这种方式认为所有的目标主机是存活的,当对方不响应 ICMP 请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。 |
3.操作
nmap -sT 127.0.0.1 //扫描常用的 TCP 端口
nmap -sU 127.0.0.1 //扫描常用的 UTP 端口
nmap -sP 127.0.0.1 //ICMP 扫描
nmap -P0 192.168.10.0/24
- 禁ping临时
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#启用ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- 永久禁 ping
#编辑配置
vim /etc/sysctl.conf
#设置禁ping(如果有此配置就无需重复添加,仅更新值即可)
net.ipv4.icmp_echo_ignore_all = 1
#刷新配置
sysctl -p
#启用ping
net.ipv4.icmp_echo_ignore_all = 0