【Linux】系统安全及应用


一、账号安全基本措施

1.系统账号清理

禁止用户登录系统

  将禁止登陆的用户的Shell设置为/sbin/nologin

基本命令格式

usermod -s /sbin/nologin 用户名

基本使用方式

//设置zhagnsan用户禁止登录系统
[root@host ~]# usermod -s /sbin/nologin zhangsan

//查看文件中是否设置成功
[root@host ~]# grep "/sbin/nologin" /etc/passwd
zhangsan:x:1001:1001::/home/zhangsan:/sbin/nologin

锁定账户

基本命令格式

//锁定账号
usermod -L 用户名
passwd -l 用户名

//查看状态
passwd -S 用户名

基本使用方式

//锁定zhangsan用户
[root@host ~]# usermod -L zhangsan
[root@host ~]# passwd -l zhangsan
锁定用户 zhangsan 的密码 。
passwd: 操作成功

//查看zhangsan用户的状态
[root@host ~]# passwd -S zhangsan
zhangsan LK 2023-04-12 0 99999 7 -1 (密码已被锁定。)

//解锁zhangsan账号
[root@host ~]# passwd -u zhangsan
解锁用户 zhangsan 的密码。
passwd: 操作成功

删除账户

基本命令格式

userdel [-r] 用户名

  -r选项是连着用户的家目录一起删除

基本使用方式

[root@host ~]# useradd zhangsan
[root@host ~]# userdel -r zhangsan

锁定账户文件

基本命令格式

//锁定文件
chattr +i /etc/passwd /etc/shadow
//查看状态
lsattr /etc/passwd /etc/shadow
//解锁文件
chattr -i /etc/passwd /etc/shadow

  注意:一个文件无法被写入或修改的可能原因:用户权限不够,不具有对文件修改的权限;该文件被锁定,无法修改编辑lsattr [文件名],查看该文件是否被锁定。

基本使用方式

[root@host ~]# chattr +i /etc/passwd /etc/shadow
[root@host ~]# lsattr /etc/passwd /etc/shadow
//如果有i的话说明文件被锁住了
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@host ~]# echo 111 >> /etc/passwd
-bash: /etc/passwd: 权限不够
[root@host ~]# echo 123123 | passwd --stdin test
更改用户 test 的密码 。
passwd: 鉴定令牌操作错误

[root@host ~]# chattr -i /etc/passwd /etc/shadow
[root@host ~]# lsattr /etc/passwd /etc/shadow
如果没有i的话说明文件被解锁了
---------------- /etc/passwd
---------------- /etc/shadow
[root@host ~]# useradd lisi
[root@host ~]# userdel -r lisi 

如何判断文件是否被操作过——md5sum

基本命令格式

md5sum 文件

基本使用方式

[root@host ~]# md5sum /etc/passwd
6f578abf5dbb65d47ac06236dd896a48  /etc/passwd
[root@host ~]# userdel zhangsan
[root@host ~]# md5sum /etc/passwd
bb3832257e994b8256267c412da4cf00  /etc/passwd

2.密码安全控制

  密码安全控制主要就是设置账号的密码有效期,等到密码临近有效期,要求用户下次登陆时修改密码。

基本命令格式

//修改密码配置文件,适用于新建用户
vi /etc/login.defs
...
Pass_MAX_DAYS 天数

//设置用户密码有效期,适用于已有用户
chage -M 天数 用户   
 
//强制用户下次登陆时更改密码
chage -d 0 用户

基本使用方式

修改/etc/login.defs文件中的密码有效期

[root@host ~]# vim /etc/login.defs
PASS_MAX_DAYS  30
[root@host ~]# useradd zhangsan
[root@host ~]# grep "zhangsan" /etc/shadow
zhangsan:!!:19459:0:30:7:::

修改lisi已存在用户的密码有效期

[root@host ~]# grep "lisi" /etc/shadow
lisi:!!:19459:0:99999:7:::
[root@host ~]# chage -M 30 lisi 
[root@host ~]# grep "lisi" /etc/shadow
lisi:!!:19459:0:30:7:::

设置test用户下次登录改密码

//设置用户下次登陆时更改密码,密码要求大小写字母+数字
[root@host ~]# grep "test" /etc/shadow
test:$6$azaqdfxdkwB98/wd$Mc4vp.ESYFoVOj3NM08sXM8dH3tnFLNmOUlKKZ7cYxIsFFC62J2QaVOcEdpkRmU.SS43OWnvSh1yYqD2tFmv01:19459:0:99999:7:::
[root@host ~]# chage -d 0 test
[root@host ~]# grep "test" /etc/shadow
//shaow文件中第三个字段为0
test:$6$azaqdfxdkwB98/wd$Mc4vp.ESYFoVOj3NM08sXM8dH3tnFLNmOUlKKZ7cYxIsFFC62J2QaVOcEdpkRmU.SS43OWnvSh1yYqD2tFmv01:0:0:99999:7:::

  如果想要设置密码永不过期,可以将天数设置为99999

3.命令历史限制

基本命令格式

//设置记录历史命令的条数
vim /etc/profile
exprot HISTSIZE=[条数]

//在当前shell环境中加载文件,用.也是一样的效果
source /etc/profile

//设置登陆时自动清空历史命令
vim 全局变量配置文件
echo"" > ~/.bash_history

//临时清空历史命令
history -c

基本使用方式

修改显示历史命令条数

[root@host ~]#vim /etc/profile
HISTSIZE=1000

//修改HISTSIZE的值,export会将命令输出成全局变量
HISTSIZE=5
//或者直接添加条数
export HISTSIZE=5

//刷新文件然后查看记录条数
[root@host ~]# source /etc/profile
[root@host ~]# history 
   27  history 
   28  vim /etc/profile
   29  history 
   30  source /etc/profile
   31  history 
   

临时清空历史命令记录

[root@host ~]# history -c
[root@host ~]# history 
   28  history 

登录时自动清空历史命令记录,可以通过修改/etc/profile/etc/bashrc~/.bash_profile~/.bashrc配置文件

[root@host ~]# history
    5  reboot
    6  vim /etc/profile
    7  vim /etc/profile\
    8  vim /etc/profile
    9  history
[root@host ~]# vim /etc/profile
echo '' > ~/.bash_history
[root@host ~]# source /etc/profile
[root@host ~]# reboot
[root@host ~]# vim .bash_history
[root@host ~]# history 
    1  history

文件的读取顺序:

  用户登录——>加载~/.bash_profile——>bash_profile中的配置首先使~/.bashrc生效

  用户登出——>.bash_logout运行logout配置文件

4.终端自动注销

基本命令格式

//设置自动注销的时间数值
vim /etc/profile
echo TMOUT=时间数值

基本使用方式

[root@host ~]# vim /etc/profile
echo TMOUT=30

二、使用su命令切换用户

1.su命令用法

命令作用

  su命令的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。

基本命令格式

su - 目标用户

带-选项表示将使用目标用户的登录shell环境

基本使用方式

切换test用户

[root@host ~]# su - test
mount: 只有 root 能执行该操作
[test@host ~]$ exit
登出

用zhangsan用户切换lisi用户

//创建用户
[root@host ~]# useradd zhangsan
[root@host ~]# useradd lisi

//创建密码
[root@host ~]# echo 123456 | passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@host ~]# echo 123456 | passwd --stdin lisi
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。

//root用户切换zhangsan用户
[root@host ~]# su zhangsan
//zhangsan用户切换root用户
[zhangsan@host root]$ su root
密码:
[root@host ~]# exit
exit
//zhangsan用户切lisi用户
[zhangsan@host root]$ su lisi
密码:
[lisi@host root]$ exit
exit
[zhangsan@host root]$ exit
exit

由此可知:root——>任意用户,不需要密码;普通用户——>其他用户,需要密码。

查看登录用户

[zhangsan@host root]$ whoami
zhangsan

2.限制使用su命令的用户

  默认情况下,如何用户都允许使用su命令,从而与机会反复尝试其他用户的登录密码,这样带来了安全风险。为了加强su命令的使用控制,可以借助于pam_wheel认证模块只允许极个别用户使用 su 命令进行切换。

  实现过程如下:将授权使用 su 命令 的用户添加到 wheel ,通过修改/etc/pam.d/su 文件的配置以启用 pam_wheel 认证。

设置lisi可以使用su命令

//查看当前系统中的用户信息
[root@host ~]# tail /etc/passwd
...
test:x:1000:1000:test:/home/test:/bin/bash
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash
//将lisi添加到wheel组中
[root@host ~]# gpasswd  -a lisi wheel
正在将用户“lisi”加入到“wheel”组中
//查看lisi所属组
[root@host ~]# id lisi
uid=1002(lisi) gid=1002(lisi) 组=1002(lisi),10(wheel)

//修改配置文件中的以下两项,前面取消#
[root@host ~]# vim /etc/pam.d/su
#%PAM-1.0
//root用户免密登录
auth            sufficient      pam_rootok.so
...
//wheel组中的用户才允许认证通过
auth           required        pam_wheel.so use_uid

//测试zhangsan用户是否能是否su命令
[root@host ~]# su zhangsan
[zhangsan@host root]$ su root
密码:
su: 拒绝权限

//测试lisi用户是否能是否su命令
[root@host ~]# su lisi
[lisi@host root]$ su root
密码:
[root@host ~]#

删除lisi使用su命令权限,添加zhangsan使用su命令权限

[root@host ~]# gpasswd  -a zhangsan wheel
正在将用户“zhangsan”加入到“wheel”组中
[root@host ~]# gpasswd -d lisi wheel
正在将用户“lisi”从“wheel”组中删除
[root@host ~]# su zhangsan
[zhangsan@host root]$ su root
密码:
[root@host ~]# su lisi
[lisi@host root]$ su root
密码:
su: 拒绝权限
[lisi@host root]$ exit
exit
[root@host ~]# 

  如果将/etc/pam.d/su文件中的两行都注释掉,那么root用户与普通用户一样,切换用户都需要输入密码。

三、PAM安全认证

1.PAM模块

  Linux-PAM,是linux可插拔认证模块,是当前Linux服务器普遍使用的认证方式,这种方式高效而且厉害便利。

2.PAM认证原理

  PAM 认证一般遵循的顺序:Service (服务)–>PAM(配置文件)–> pam *.so;

   (1) PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security下)进行安全认证。

  (2) 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。

3.PAM认证的构成

在这里插入图片描述

如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/。

[root@host ~]# ls /etc/pam.d
atd                     gdm-pin           postlogin-ac       su
chfn                    gdm-smartcard     ppp                sudo
chsh                    ksu               remote             sudo-i
config-util             liveinst          runuser            su-l
crond                   login             runuser-l          system-auth
cups                    other             setup              system-auth-ac
fingerprint-auth        passwd            smartcard-auth     systemd-user
fingerprint-auth-ac     password-auth     smartcard-auth-ac  vlock
gdm-autologin           password-auth-ac  smtp               vmtoolsd
gdm-fingerprint         pluto             smtp.postfix       xserver
gdm-launch-environment  polkit-1          sshd
gdm-password            postlogin         sssd-shadowutils

例如想要查看su是否支持PAM模块认证可以用ls查看

[root@host ~]# ls /etc/pam.d | grep su
ksu
su
sudo
sudo-i
su-l

查看su的PAM配置文件

[root@host ~]# cat /etc/pam.d/su
#%PAM-1.0
auth		sufficient	pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth		sufficient	pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth		required	pam_wheel.so use_uid
auth		substack	system-auth
auth		include		postlogin
account		sufficient	pam_succeed_if.so uid = 0 use_uid quiet
account		include		system-auth
password	include		system-auth
session		include		system-auth
session		include		postlogin
session		optional	pam_xauth.so

PAM配置文件

  PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用

在这里插入图片描述

第一列代表PAM认证模块类型:

  • auth:对用户身份进行识别。如提示输入密码,判断是否为root。
  • account:对账号各项属性进行检查。如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
  • password:使用用户信息来更新数据。如修改用户密码。
  • session定义登录前以及退出后所要进行的会话操作管理。如登录连接信息,用户数据的打开和关闭,挂载文件系统。

第二列代表PAM控制标记:

  • required:表示需要返回一个成功值。如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败
  • requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败
  • sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值
  • optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型)。
  • include:表示在验证过程中调用其他的PAM配置文件。比如很多****应用通过完整调用/etc/pam .d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项

第三列代表PAW模块:

  • 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
  • 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

第四列代表PAM模块的参数:

  • 根据所使用的模块来添加。
  • 传递给模块的参数。参数可以有多个,之间用空格分隔开

4.PAM安全认证流程

控制类型也称做Control Flags,用于PAM验证类型的返回结果

  • required 验证失败时仍然继续,但返回Fail;
  • requisite 验证失败则立即结束整个验证过程,返回Fail;
  • sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续;
  • optional 不用于验证,只显示信息(通常用于session类型)。

在这里插入图片描述

PAM实例:

用户1用户2用户3用户4
authrequired模块1passfailpasspass
authsufficient模块2passpassfailpass
authrequired模块3passpasspassfail
结果passfailpasspass

四、使用sudo机制提升权限

1.su命令的缺点

  虽然限制了很多用户使用su命令,但是用户只要可以使用su命令并且知道root用户密码,就可以通过su root获取root用户权限,因为root用户拥有系统的最高权限,很容易误操作造成系统挂掉。

2.sudo命令的使用方法

命令作用

  通过sudo命令授权用户以其他用户(root用户)的身份去执行命令。

基本命令格式

sudo 授权命令

配置sudo授权

visudo 或者 vim /etc/sudoers

  两种方式实际上打开的是同一个文件,但是vim /etc/sudoers保存需要强制保存

配置别名

//配置用户别名
User_Alias 大写别名=用户1,用户2...

//配置主机别名
Host_Alias 大写别名=主机名1,主机名2...

//配置程序别名
Cmnd_Alias 大写别名=程序1,程序2...

用户/组授权

//用户或主机授权
用户名/用户别名 
主机名/主机别名/ALL=程序列表/程序别名/ALL

//组授权
%组名 主机名/主机别名/ALL=[(用户)NOPASSWD: ]程序列表/程序别名/ALL
组名 主机名=命令程序列表

  命令程序列表需要用绝对路径表示,每个命令用逗号相间隔

  设置NOPASSWD:提权时无需密码验证。如果没有设置,首次使用sudo时需要验证当前用户的密码,默认超时时长为5分钟,在此期间不再重复验证密码

基本使用方式

设置zhangsan用户ip地址进行提权

//切换zhangsan用户
[root@host ~]# su - zhangsan
上一次登录:三 4月 12 16:47:55 CST 2023pts/0 上
mount: 只有 root 能执行该操作
//查询网关
[zhangsan@host ~]$ ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.100  netmask 255.255.255.0  broadcast 192.168.223.255
        inet6 fe80::e60f:ae87:40b7:a144  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:20:88:32  txqueuelen 1000  (Ethernet)
        RX packets 4115  bytes 315907 (308.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1893  bytes 190060 (185.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
...
//用zhangsan用户添加ip地址
[zhangsan@host ~]$ sudo ifconfig ens32:0 192.168.223.10/24

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。
    
[sudo] zhangsan 的密码:
zhangsan 不在 sudoers 文件中。此事将被报告。
[zhangsan@host ~]$ exit
登出
//配置sudo权限进行提权
[root@host ~]# vim /etc/sudoers
....
//设置zhangsan的所有主机以root用户执行ficonfig命令
zhangsan ALL=(root) /usr/sbin/ifconfig
[root@host ~]# su - zhangsan
[zhangsan@host ~]$ sudo ifconfig ens32:0 192.168.223.10/24
[zhangsan@host ~]$ ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.100  netmask 255.255.255.0  broadcast 192.168.223.255
        inet6 fe80::e60f:ae87:40b7:a144  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:20:88:32  txqueuelen 1000  (Ethernet)
        RX packets 520149  bytes 730450434 (696.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 244280  bytes 14824403 (14.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens32:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.10  netmask 255.255.255.0  broadcast 192.168.223.255
        ether 00:0c:29:20:88:32  txqueuelen 1000  (Ethernet)
...

设置lisi无法执行rm命令

//切换lisi用户
[root@host ~]# su - lisi
mount: 只有 root 能执行该操作
[lisi@host ~]$ touch 123
[lisi@host ~]$ ls
123
//删除文件
[lisi@host ~]$ rm -f 123

//配置sudo权限进行提权
[root@host ~]# vim /etc/sudoers
...
//通过取反符号!进行设置lisi无法执行rm命令
lisi ALL=!/usr/bin/rm
//退出lisi用户
[lisi@host ~]$ exit
登出

//在opt目录下新建abc文件
[root@host ~]# cd /opt
[root@host opt]# touch abc
[root@host opt]# ls
abc  rh
//登录lisi用户,进入opt目录进行rm删除abc文件
[root@host ~]# su - lisi
上一次登录:三 4月 12 21:40:24 CST 2023pts/4 上
mount: 只有 root 能执行该操作
[lisi@host ~]$ cd /opt/
[lisi@host opt]$ rm -f abc
rm: 无法删除"abc": 权限不够

设置zhangsan、lisi用户可以使用/usr/sbin下所有命令,除了关机重启命令

//查询sbin目录下的关机重启命令
[root@host ~]# which reboot
/usr/sbin/reboot
[root@host ~]# which poweroff 
/usr/sbin/poweroff
[root@host ~]# which init 
/usr/sbin/init
[root@host ~]# which shutdown 
/usr/sbin/shutdown

[root@host ~]# vim /etc/sudoers
...
//设置用户别名
User_Alias USERS = zhangsan,lisi
//设置命令别名
Cmnd_Alias ADMIN = /sbin/*, !/usr/sbin/reboot, !/usr/sbin/poweroff, !/usr/sbin/init, !/usr/sbin/shutdown
//zhangsan和lisi用户在所有主机上使用sudo命令时无需密码验证
USERS ALL=NOPASSWD: ADMIN

//测试一下route命令是否成功,是否需要输入密码
[zhangsan@host ~]$ which route
/usr/sbin/route
[zhangsan@host ~]$ sudo route add -net 10.0.0.0/24 gw 192.168.223.1 dev ens32
[zhangsan@host ~]$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.223.2   0.0.0.0         UG    100    0        0 ens32
10.0.0.0        192.168.223.1   255.255.255.0   UG    0      0        0 ens32
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
192.168.223.0   0.0.0.0         255.255.255.0   U     100    0        0 ens32

//测试reboot命令是否成功
[zhangsan@host ~]$ sudo reboot
对不起,用户 zhangsan 无权以 root 的身份在 host 上执行 /sbin/reboot

查看用户所拥有的权限

[zhangsan@host ~]$ sudo -l
...
用户 zhangsan 可以在 host 上运行以下命令:
用户 zhangsan 可以在 host 上运行以下命令:
    (root) NOPASSWD: /sbin/*, !/usr/sbin/reboot, !/usr/sbin/poweroff, !/usr/sbin/init, !/usr/sbin/shutdown

启用sudo操作日志

//添加sudo操作日志
[root@host ~]# vim /etc/sudoers
....
Defaults logfile = "/var/log/sudo"

//执行命令
[zhangsan@host ~]$ sudo route add -net 10.0.0.0/24 gw 192.168.223.2 dev ens32
[zhangsan@host ~]$ sudo reboot
对不起,用户 zhangsan 无权以 root 的身份在 host 上执行 /sbin/reboot。

//查看日志文件中命令操作日志
[root@host ~]# cat /var/log/sudo
Apr 12 22:15:37 : zhangsan : TTY=pts/4 ; PWD=/home/zhangsan ; USER=root ;
    COMMAND=/sbin/route add -net 10.0.0.0/24 gw 192.168.223.2 dev ens32
Apr 12 22:16:00 : zhangsan : command not allowed ; TTY=pts/4 ;
    PWD=/home/zhangsan ; USER=root ; COMMAND=/sbin/reboot

五、Linux系统初始化步骤

   1. 不用root,添加普通用户,通过sudo授权管理

   2. 更改默认的远程连接SSH服务端口及禁止root用户远程连接

   3. 定时自动更新服务器时间

   4. 配置国内yum源

   5. 关闭selinux及iptables (iptables工作场景如果有外网IP一定要打开,高并发除外)

   6. 调整文件描述符的数量

   7. 精简开机启动服务 (crond rsyslog network sshd)

   8. 内核参数优化(/etc/sysctl.conf)

   9. 更改字符集,支持中文,但建议还是用英文字符集,防止乱码

   10. 锁定关键系统文件

   11. 清空/etc/issue,去除系统及内核版本登录前的屏幕显示

六、开关机安全控制

1.调整BIOS引导设置

  • 将第一引导设备设为当前系统所在硬盘
  • 禁止从其他设备(光盘、U盘、网络)引导系统
  • 将安全级别设为setup,并设置管理员密码

2.GRUB限制

  • 使用grub2-mkpasswd-pbkdf2生成密钥
  • 修改/etclgrub.d/00_header文件中,添加密码记录
  • 生成新的grub.cfg配置文件
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的
威胁。
 
//可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。   
[root@host ~]# grub2-mkpasswd-pbkdf2 		###根据提示设置GRUB菜单的密码
输入口令:
Reenter password: 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.0B63BA25BC67056508F4F54BA4F89154A9580326A0553EBC9308A4E46BA0C162E43AC13B5753AF9833FBA513CAB2A88BE2BC63F3658444D8C5F46F54A278D206.B454D43DD2F50B47255FCF53377C48FA12F9591C669FA90858CBC042912F1B219E6B20D101032AF2EE879F778E4489DAFE76B801F20468C809BC0E0FDD398549
//将密钥保存文件中,防止丢失
[root@host ~]# vi pass.txt

//设置备份文件
[root@host ~]# cp  /boot/grub2/grub.cfg  /boot/grub2/grub.cfg.bak
[root@host ~]# cp  /etc/grub.d/00_header /etc/grub.d/00_header.bak
 
 //添加密码记录
[root@host grub.d]# vim /etc/grub.d/00_header
cat << EOF
set superusers="root"  ###设置用户名为root
password_pbkdf2 root grub.pbkdf2.sha512.10000.0B63BA25BC67056508F4F54BA4F89154A9580326A0553EBC9308A4E46BA0C162E43AC13B5753AF9833FBA513CAB2A88BE2BC63F3658444D8C5F46F54A278D206.B454D43DD2F50B47255FCF53377C48FA12F9591C669FA90858CBC042912F1B219E6B20D101032AF2EE879F778E4489DAFE76B801F20468C809BC0E0FDD398549
EOF


//生成新的grub.cfg文件
[root@host grub.d]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-62002d65633644949ab3b96743d6820c
Found initrd image: /boot/initramfs-0-rescue-62002d65633644949ab3b96743d6820c.img
done 

//重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qM3Va6O6-1681398926314)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230413192731989.png)]

七、终端以及登录控制

1.限制root只在安全终端登录

安全终端配置文件在 /etc/securetty

[root@host ~]# vim /etc/securetty
...
tty4
#tty5
#tty6
...

2.禁止普通用户登录

  • 建立/etc/nologin文件
  • 删除nologin文件或重启后即恢复正常
[root@host ~]# touch /etc/nologin

[root@host ~]#rm -f /etc/nologin

八、弱口令检测

1.JOHN the Ripper,简称为JR

  • John the Ripper是一款开源的 密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解
  • 通过对shadow文件的口令分析,可以检测密码强度
  • 官方网站:http://www.openwall.com/john/

2.安装JR工具并尝试破解

安装软件编译工具

[root@host ~]yum -y install gcc gcc-c++ make

将下载的安装包解压

[root@host ~]# cd /opt/
[root@host opt]# rz -E
rz waiting to receive.
[root@host opt]# ls
john-1.8.0.tar.gz  rh
[root@host opt]# tar xf john-1.8.0.tar.gz 

进入解压缩的目录中的src目录下,进行编译安装

[root@host opt]# ls
john-1.8.0  john-1.8.0.tar.gz  rh
[root@host opt]# cd john-1.8.0/
[root@host john-1.8.0]# ls
doc  README  run  src
[root@host john-1.8.0]# cd src/
[root@host src]# make clean linux-x86-64

准备待破解的密码文件

[root@host src]# cd ..
[root@host john-1.8.0]# ls
doc  README  run  src
[root@host john-1.8.0]# cd run/
[root@host run]# cp /etc/shadow ./shadow.txt
[root@host run]# ls
ascii.chr   john       lm_ascii.chr  makechr       relbench    unafs   unshadow
digits.chr  john.conf  mailer        password.lst  shadow.txt  unique

执行暴力破解

[root@host run]# ./john shadow.txt 
Loaded 4 password hashes with 4 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (zhangsan)
123              (root)
123              (test)
123123           (lisi)
4g 0:00:00:34 100% 2/3 0.1176g/s 358.2p/s 366.7c/s 366.7C/s leslie..boston
Use the "--show" option to display all of the cracked passwords reliably
Session completed

查看已破解密码的用户信息

[root@host run]# ./john  --show shadow.txt 
root:123::0:99999:7:::
test:123::0:99999:7:::
zhangsan:123456:19460:0:99999:7:::
lisi:123123:19460:0:99999:7:::

4 password hashes cracked, 0 left

破解后的数据保存在john.txt

[root@host run]# ls
ascii.chr   john.conf  lm_ascii.chr  password.lst  unafs
digits.chr  john.log   mailer        relbench      unique
john        john.pot   makechr       shadow.txt    unshadow
[root@host run]# cat john.pot 
$6$kYbw69yD$gegsMQyqhthFv79/I/kb1KNzaUaO3hb86.7ayvcunpQooQOx3v6.Cs0xjFHstUrk3fmupsid6tp2iargFlnNB1:123456
$6$RWPpARo.wYlm0uvS$in37N24V4AMDDxOSeZBmYT8JiI9ZG.5zYpScyUn1PEb9drDlfdfGPlKUaibFvMNHentiCfq9riWlLRQx35sob1:123
$6$azaqdfxdkwB98/wd$Mc4vp.ESYFoVOj3NM08sXM8dH3tnFLNmOUlKKZ7cYxIsFFC62J2QaVOcEdpkRmU.SS43OWnvSh1yYqD2tFmv01:123
$6$HRNOkSdc$RznVTNSrxVJAig30nqtAqZQupEjLMgwa1Jn/hjM.Q8CkrsDLkhiqET3q9R4Z2HHU3QblyqyXHnLd0WunNJ.OW.:123123

  由此可知JR工具的工作原理其实就是查询解压包目录下的/john-1.8.0/run/passwd.lst密码词典文件,根据密码词典文件中的密码来逐一破解。默认的密码词典文件为passwdord.lst

  也可以通过以下命令指定密码字典文件:

[root@host run]# ./john --wordlist=./password.lst shadow.txt

清空已破解出的账户列表,以便重新分析

[root@host run]# > john.pot              

九、网络端口扫描

1.NMAP——端口扫描

  • —款强大的网络扫描、安全检测工具,支持ping扫描,多端口检测等多种技术。
  • 官方网站: http://nmap.org/
  • CentOS 7.3光盘中安装包,nmap-6.40-7.el7.x86_64.rpm

NMAP安装

rpm -qa | grep nmap    ###检查nmap是否安装
yum -y install nmap     ###yum安装nmap

NMAP命令格式

nmap [扫描类型] [选项] <扫描目标...>

常用的选项和扫描类型

选项含义
-p指定扫描的端口。
-n禁用反向DNS 解析 (以加快扫描速度)。
扫描类型含义
-sSTCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sTTCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sFTCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP attack 包。这种类型的扫描可间接检测防火墙的健壮性。
-sUUDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sPICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-P0跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping通而放弃扫描。

基本使用方式

查询本机开放的TCP端口

[root@host ~]# nmap -sT 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2023-04-13 23:14 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0010s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

查询本机开放的UDP端口

[root@host ~]# nmap -sU 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2023-04-13 23:14 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 998 closed ports
PORT     STATE         SERVICE
111/udp  open          rpcbind
5353/udp open|filtered zeroconf

Nmap done: 1 IP address (1 host up) scanned in 2.72 seconds

2.nestat——网络统计

基本命令格式

nestat [选项]

  选项可以多个组合使用

常用命令形式

//查看正在运行的使用TCP协议的网络状态信息
netstat -natp

//查看正在运行的使用UDP协议的网络状态信息
netstat -naup

常用选项及含义

选项含义
-a显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口)
-n以数字的形式显示相关的主机地址、端口等信息
-t查看 TCP相关的信息
-u显示 UDP协议相关的信息
-p显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限)
-r显示路由表信息
-l显示处于监听状态的网络连接及端口信息

基本使用方式

查询监听状态下的端口信息并以数字形式显示

[root@host ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      577/rpcbind         
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1367/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1006/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1003/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1296/master         
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      3249/sshd: root@pts 
tcp        0      0 127.0.0.1:6012          0.0.0.0:*               LISTEN      60564/sshd: root@pt 
tcp6       0      0 :::111                  :::*                    LISTEN      577/rpcbind         
tcp6       0      0 :::22                   :::*                    LISTEN      1006/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1003/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1296/master         
tcp6       0      0 ::1:6011                :::*                    LISTEN      3249/sshd: root@pts 
tcp6       0      0 ::1:6012                :::*                    LISTEN      60564/sshd: root@pt 

根据进程名确认监听状态的进程是否启用

[root@host ~]# netstat -nltp | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1006/sshd           
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      3249/sshd: root@pts 
tcp        0      0 127.0.0.1:6012          0.0.0.0:*               LISTEN      60564/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      1006/sshd           
tcp6       0      0 ::1:6011                :::*                    LISTEN      3249/sshd: root@pts 
tcp6       0      0 ::1:6012                :::*                    LISTEN      60564/sshd: root@pt 

根据协议号确认监听状态的进程是否启用

[root@host ~]# netstat -nltp | grep :22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1006/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      1006/sshd     

3.ss——网络统计

  ss是Socket Statistics的缩写。ss命令用来显示处于活动状态的套接字信息。它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

基本命令格式

ss [选项]

选项可以多个组合使用

常用选项及含义

选项含义
-a显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口)
-n以数字的形式显示相关的主机地址、端口等信息
-t查看 TCP相关的信息
-u显示 UDP协议相关的信息
-p显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限)
-r显示路由表信息
-l显示处于监听状态的网络连接及端口信息
-s列出当前socket详细信息

基本使用方式

查询当前主机网络使用情况

[root@host ~]# ss -s
Total: 1688 (kernel 2459)
TCP:   16 (estab 2, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*	  2459      -         -        
RAW	  1         0         1        
UDP	  10        7         3        
TCP	  15        9         6        
INET	  26        16        10       
FRAG	  0         0         0        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的宝贝大唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值