账号安全和引导登录控制

464 阅读16分钟

账号安全基本措施

将非登录用户的Shell设为/sbin/nologin

查看/etc/passwd 文件,可以看到多个程序用户 image.png

使用usermod命令修改登录shell

 usermod -s /sbin/nologin 用户名

示例

将用户的登录shell修改为/sbin/nologin,修改后user02无法登录系统

[root@localhost ~]# grep "jlx" /etc/passwd     //查看用户的登录shell,为bash
jlx:x:1000:1000:jlx:/home/jlx:/bin/bash
[root@localhost ~]# usermod -s /sbin/nologin jlx   //将的登录shell修改为/sbin/nologin
[root@localhost ~]# grep "jlx" /etc/passwd
jlx:x:1000:1000:jlx:/home/jlx:/sbin/nologin

锁定长期不使用的账号

命令

 方法一:
 passwd -l 用户名      //锁定用户
 passwd -u 用户名      //解锁用户
 
 方法二:
 usermod -L 用户名     //锁定用户
 usermod -U 用户名     //解锁用户

示例

passwd -l 用户名,锁定用户。锁定后用户无法登录。

[root@localhost ~]# passwd -l 111      //锁定用户111的密码
锁定用户 111 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S 111        //查看111状态
111 LK 2022-07-31 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u 111       //解锁用户111的密码
解锁用户 111 的密码。         //由于用户111密码为空
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)

image.png

usermod -L 用户名,锁定用户。锁定后用户无法登录

[root@localhost ~]# usermod -L 222        //锁定用户222
[root@localhost ~]# passwd -S 222        //查看用户222的状态
222 LK 2022-08-12 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U 222        //解锁用户222
[root@localhost ~]# passwd -S 222        //查看用户222的状态
222 PS 2022-08-12 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

image.png

删除无用的账号

命令

 userdel 用户名        //删除用户,但不删除用户的家目录
 userdel -r 用户名     //删除用户的同时,删除他的家目录

示例

userdel 用户名。删除用户,但不删除用户的家目录。

用户被删除后,他的家目录会变成无主文件,文件的属主和属组位显示的是原主人的UID和GID。

[root@localhost ~]# userdel 222
[root@localhost ~]# ls /home/
222  333  444  apache  jlx  pp
[root@localhost ~]# ls -d1 /home/222
/home/222

image.png userdel -r 用户名。删除用户的同时删除他的家目录。

[root@localhost ~]# ls /home/
222  333  444  apache  jlx  pp
[root@localhost ~]# userdel -r 333
[root@localhost ~]# ls /home/
222  444  apache  jlx  pp

image.png

密码安全控制——设置密码规则

一般通过设置密码规则来控制密码安全,主要设置以下两点:

  • 设置密码有效期
  • 要求用户下次登录时修改密码

对于新建用户——修改/etc/login.defs文件

对于新建用户,可以修改/etc/login.defs文件里的内容来设置密码规则。

查看/etc/login.defs文件:

image.png 参数说明:

  • PASS_MAX_DAYS #密码最大有效期
  • PASS_MIN_DAYS #两次修改密码的最小间隔时间
  • PASS_MIN_LEN #密码最小长度,对于root无效
  • PASS_WARN_AGE #密码过期前多少天开始提醒 示例:

修改/etc/login.defs文件,将密码最大有效期修改为30天。

 [root@localhost ~]# vim /etc/login.defs    //修改配置文件
 ----------------------------
 PASS_MAX_DAYS   30    //将密码最大有效期修改为30天
 PASS_MIN_DAYS   0
 PASS_MIN_LEN    5
 PASS_WARN_AGE   7
 
 [root@localhost ~]# useradd 111   //创建新用户111
 [root@localhost ~]# grep "111" /etc/shadow
 lucy:!!:19056:0:30:7:::         //密码有效期默认30天

image.png

image.png

对于现有用户——chage命令

命令格式:

 chage  [选项]  用户名

选项:

-m:密码可更改的最小天数。为0时代表任何时候都可以更改密码。

-M:密码保持有效的最大天数。

-W:用户密码到期前,提前收到警告信息的天数。

-E:帐号到期的日期。过了这天,此帐号将不可用。

-d:设置”最后一次修改密码的日期“。设置为 0 有特殊意思,表示用户应该在下次登录系统时更改密码。

-i:停滞时期。允许密码过期后多少天内仍能使用,如果一个密码已过期这些天,那么此帐号将不可用。

-l:例出当前的设置。

示例:

chage -M ,设置用户密码的有效期。

[root@localhost ~]# chage -M 50 111          //将111用户的密码有效期设置为50天
[root@localhost ~]# grep "111" /etc/shadow
111:!!:19216:0:50:7:::
[root@localhost ~]# cha
chacl       chardetect  chat        
chage       charmap     chattr      
[root@localhost ~]# chage -l 111     //查看当前设置
最近一次密码修改时间					:812, 2022
密码过期时间					:1001, 2022
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:50
在密码过期之前警告的天数	:7

image.png

chage -d 0,强制要求用户下次登录时必须修改密码。

[root@localhost ~]# grep 111 /etc/shadow
111:$6$mJKLFrP7$jdRINgVEAs66WL6XPSQf5jN7OT0Dv9WedRso2xkTHhrmqLadOy0ypa2Q0DXbVaLbLHyjlxEZlop.k13ByOmXQ/:19216:0:50:7:::
[root@localhost ~]# chage -d 0 111    //强制要求用户下次登录时修改密码
[root@localhost ~]# grep 111 /etc/shadow
111:$6$mJKLFrP7$jdRINgVEAs66WL6XPSQf5jN7OT0Dv9WedRso2xkTHhrmqLadOy0ypa2Q0DXbVaLbLHyjlxEZlop.k13ByOmXQ/:0:0:50:7:::
[root@localhost ~]# chage -l 111
最近一次密码修改时间					:密码必须更改
密码过期时间					:密码必须更改
密码失效时间					:密码必须更改
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:50
在密码过期之前警告的天数	:7

image.png

命令历史限制

一般使用两种方式控制命令历史:

  • 减少记录的命令条数。
  • 注销时自动清空命令历史,或登录时自动清空命令历史。

家目录下有 .bash_history 文件,用于记录历史命令。清空该文件即清空了命令历史。

命令:

 1. 临时修改历史命令条数。只针对当前用户,退出登录后失效。
 [root@localhost ~]# export HISTSIZE=200
 
 2. 永久修改历史命令条数。编辑配置文件,设置历史命令条数。
 [root@localhost ~]# vim /etc/profile        //设置历史命令条数记录为200条
     HISTSIZE=200 
 [root@localhost ~]# source /etc/profile     //刷新配置文件,使文件立即生效
 
 3. 注销时自动清空历史命令 
 [root@localhost ~]# vim ~/.bash_logout
 echo "" > ~/.bash_history
 
 4. 登录时自动清空历史命令
 [root@localhost ~]# vim ~/.bashrc
 echo "" > ~/.bash_history

示例:

临时修改历史命令条数。注销后失效。

image.png 永久修改历史命令条数。编辑/etc/profile 文件,设置命令记录为200条。

image.png

image.png 编辑 ~/.bashrc 文件,在登录时清空命令历史。

image.png

用户切换和提权

su(用户切换)

查看su操作记录:

系统安全日志/var/log/secure,是记录ssh登陆服务器的日志文件。

命令格式:

 su [options...] [-] [user [args...]]
复制代码

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。

即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

密码验证:

  • root 切换到任意用户,不验证密码。
  • 普通用户切换到其他用户,需要验证目标用户的密码。

注意:

su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

[root@localhost ~]# su 444
[444@localhost root]$ pwd
/root
[444@localhost root]$ exit
exit
[root@localhost ~]# su - 444
上一次登录:六 813 14:48:54 CST 2022pts/1 上
[444@localhost ~]$ pwd
/home/444
[444@localhost ~]$ whoami 
444

image.png 普通用户切换到其他用户,需要验证目标用户的密码。

[root@localhost ~]# su - 111
[111@localhost ~]$ su - 222
密码:

image.png

限制使用su命令的用户

su 命令的安全隐患

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

限制使用su命令的用户(通过修改/etc/pam.d/su 文件):

  • 将允许使用su命令的用户加入wheel组。
  • 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户。

查看 /etc/pam.d/su 文件:

image.png

  • 以上两行现在是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
  • 两行都注释是允许所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。
  • 如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令。
  • 如果注释第二行,开启第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。

示例:

编辑 /etc/pam.d/su 文件,将第二行和第六行都开启,则只有root和wheel组内的用户才能使用 su 命令。

 [root@localhost ~]# vim /etc/pam.d/su      //开启第二行和第六行
 .................................
 2 auth sufficient pam_ rootok.so
 6 auth required pam_ wheel.so use_ _uid

image.png 用户不在wheel组内,使用su命令时拒绝权限。

uid=2007(111) gid=2007(111) 组=2007(111)
[111@localhost ~]$ su 222
密码:
su: 拒绝权限

image.png 将用户加入wheel组内,则可以成功使用su 命令。

正在将用户“111”加入到“wheel”组中
[root@localhost ~]# su - 111
上一次登录:六 8月 13 15:14:08 CST 2022pts/1 上
[111@localhost ~]$ whoami 
111
[111@localhost ~]$ su - 222
密码:
上一次登录:六 8月 13 15:00:24 CST 2022pts/1 上
最后一次失败的登录:六 8月 13 15:14:54 CST 2022pts/1 上
最有一次成功登录后有 1 次失败的登录尝试。

image.png

sudo(用户提权)

查看sudo操作记录:

  • 需要启用 Default logfile 配置
  • 默认日志文件:/var/log/sudo.log

sudo特性:

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,权限必须为0440。

使用visudo命令,可编辑配置文件/etc/sudoers:

 #用户    登入主机 = (代表用户)     命令
 #user     host=(username)       command
   root       ALL=(ALL)          ALL
  %wheel      ALL=(ALL)         NOPASSWD:ALL
  
 #root表示允许哪个用户。%wheel表示wheel组。
 #第一个ALL表示通过哪些主机登入。
 #第二个ALL表示以哪个用户身份。
 #最后一个ALL表示允许运行哪些命令。
 #NOPASSWD表示使用sudo命令不需要验证密码。
 ​
 举例说明:
 1.111    ALL=(root)   /bin/mount
 #表示111用户通过任何主机登入系统后,可以以root的身份运行mount命令(命令前必须加sudo)。
 ​
 2.%wheel    ALL=(ALL)   ALL
 #表示wheel组内的成员通过任何主机登入系统后,可以以任何用户的身份运行所有命令(命令前必须加sudo)。
 ​
 ​
 字段填写说明:
 1.user:可以写用户名或UID。
 2.group:可以写组名或GID。
 3.host:可以写ip或hostname(IP地址或主机名)。
 4.command:
  command name  (命令)
  directory     (文件夹里的命令)
  sudoedit      (可以编辑sudoers这个文件,变相变成管理员)
  Cmnd_Alias    (命令别名)
  
 注:配置文件内支持使用通配符,例如"/sbin/*"表示/sbin/目录下的所有命令。

sudo基本语法:

 sudo  [-u username]  [command]     //-u:以哪个用户的身份运行命令
 ​
 sudo -V    //查看相关配置信息          
复制代码

示例:

1)允许 yuji 用户以任何用户的身份运行所有命令。

允许nancy用户以root用户的身份运行mount命令。

# 1.普通用户nancy不允许使用mount命令。
 [111@localhost ~]$ whoami
 111
 [111@localhost ~]$ mount /dev/sr0 /mnt
 mount: 只有 root 能执行该操作
 ​
 # 2.编辑配置文件,将yuji用户和nancy用户加入文件。
 [root@localhost ~]# visudo            //编辑配置文件/etc/sudoers
 ---------------------------
 222    ALL=(ALL)       ALL
 111   ALL=(root)      /bin/mount
 ​
 # 3.允许111用户以roo身份运行mount命令。
 [111@localhost ~]$ whoami
 nancy
 [111@localhost ~]$ sudo mount /dev/sr0 /mnt
 [sudo] nancy 的密码:
 mount: /dev/sr0 写保护,将以只读方式挂载
 ​
 # 4.222用户以root身份创建文件,文件属主是root。
 [222@localhost ~]$ whoami
 222
 [222@localhost ~]$ sudo touch 1.txt
 [sudo] 222 的密码:
 [222@localhost ~]$ ll 1.txt
 -rw-r--r-- 1 root root 0 3月   7 16:52 1.txt

sudo别名

sudo别名有四种类型:

  • User_Alias(用户)
  • Runas_Alias(代表用户)
  • Host_Alias(登录主机)
  • Cmnd_Alias(命令)

示例:

创建用户别名MYUSERS=lucy,mike。允许这两个用户使用/sbin/下的所有命令,除了reboot、poweroff、init、rm这四个命令。 (! 表示取反。! /sbin/reboot 表示不允许使用reboot命令。)

 [root@localhost ~]# visudo
 ----------------------------------
 User_Alias MYUSERS = lucy,mike
 Host_Alias MYHOSTS = localhost
 Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm
 ​
 MYUSERS  MYHOSTS=(root)  NOPASSWD:MYCMNDS
 ​

1646645205950.png

注意:

如果配置文件内有语法错误,visudo命令会进行提示。

1646645350675.png

sudo子目录

如果对所有用户进行提权都放在/etc/sudoers 一个文件中,非常不便于管理。这时可以在/etc/sudoers.d/ 下创建子目录。例如针对 测试部门的员工进行授权,可以创建/etc/sudoers.d/test;针对hr部门的员工进行授权,可以创建/etc/sudoers.d/hr。便于分类管理。

 [root@localhost ~]# vim /etc/sudoers.d/test          //创建子目录
 zhangsan  ALL=(root)  /bin/mount
 [root@localhost ~]# chmod 440 /etc/sudoers.d/test    //设置权限,加固安全
 [root@localhost ~]# ll /etc/sudoers.d/test
 -r--r----- 1 root root 33 3月   7 17:51 /etc/sudoers.d/test

1646646664289.png

注:

如果允许用户使用sudoedit命令,则该用户能够修改配置文件/etc/sudoers。变相变成管理员,十分危险,建议不要设置该命令。

 [root@localhost sudoers.d]#vim /etc/sudoers.d/hr
 lisi ALL=(root)  sudoedit
 [root@localhost ~]#su lisi
 [lisi@localhost root]$ sudoedit /etc/sudoers   //sudoedit可以修改配置文件,十分危险

查看sudo操作记录

  • 需要启用 Default logfile 配置
  • 默认日志文件:/var/log/sudo
[root@localhost log]# visudo          //修改配置文件
-----------------------------
Default logfile="/var/log/sudo"       //在最后一行添加 Default logfile 配置

微信图片_20220312230926.png

测试查看日志是否正常记录:

[root@localhost ~]# sudo -u nancy touch /tmp/f2.txt     //以nancy用户的身份创建文件
[root@localhost ~]# tail -4 /var/log/sudo               //日志成功记录sudo操作
Mar 12 23:12:06 : root : TTY=pts/0 ; PWD=/root ; USER=nancy ; COMMAND=/bin/touch
    /tmp/f1.txt
Mar 12 23:13:49 : root : TTY=pts/0 ; PWD=/root ; USER=nancy ; COMMAND=/bin/touch
    /tmp/f2.txt

微信图片_20220312231711.png

PAM安全认证

 [root@localhost ~]#rpm -qi pam     //查看当前系统pam
 [root@localhost ~]#rpm -ql pam     //查看模块
 ​
 [root@localhost ~]#ls /usr/lib64/security/*.so|wc -l   //60个模块是二进制文件,不会直接修改
 60
 ​
 [root@localhost ~]#ls /etc/security/    //和上面的模块配合使用,有些比较简单的模块没有配置文件
 access.conf       console.perms.d  namespace.d     sepermit.conf
 chroot.conf       group.conf       namespace.init  time.conf
 console.apps      limits.conf      opasswd
 console.handlers  limits.d         pam_env.conf
 console.perms     namespace.conf   pwquality.conf
 
 #我们去修改配置文件
 /etc/security
 /etc/pam.d/*
 ​
 ​
 [root@localhost ~]#cd /etc/pam.d/   //这里的文件是应用程序怎么调用模块的
 [root@localhost pam.d]#ls
 atd                     login              smtp
 chfn                    other              smtp.postfix
 chsh                    passwd             sshd
 config-util             password-auth      sssd-shadowutils
 crond                   password-auth-ac   su
 cups                    pluto              sudo
 fingerprint-auth        polkit-1           sudo-i
 fingerprint-auth-ac     postlogin          su-l
 gdm-autologin           postlogin-ac       system-auth
 gdm-fingerprint         ppp                system-auth-ac
 gdm-launch-environment  remote             systemd-user
 gdm-password            runuser            vlock
 gdm-pin                 runuser-l          vmtoolsd
 gdm-smartcard           setup              vsftpd
 ksu                     smartcard-auth     xserver
 liveinst                smartcard-auth-ac
 ​
 [root@localhost pam.d]#cat /etc/pam.d/sshd    //文件类型
 #%PAM-1.0
 auth       required pam_sepermit.so
 auth       substack     password-auth
 auth       include      postlogin
 # Used with polkit to reauthorize users in remote sessions
 -auth      optional     pam_reauthorize.so prepare
 account    required     pam_nologin.so
 account    include      password-auth
 password   include      password-auth
 # pam_selinux.so close should be the first session rule
 session    required     pam_selinux.so close
 session    required     pam_loginuid.so
 # pam_selinux.so open should only be followed by sessions to be executed in the user context
 session    required     pam_selinux.so open env_params
 session    required     pam_namespace.so
 session    optional     pam_keyinit.so force revoke
 session    include      password-auth
 session    include      postlogin
 # Used with polkit to reauthorize users in remote sessions
 -session   optional     pam_reauthorize.so prepare

PAM相关文件

  • 包名: pam
  • 模块文件目录:/lib64/security/*.so
  • 特定模块相关的设置文件:/etc/security/
  • 应用程序调用PAM模块的配置文件
  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效

PAM工作原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

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

系统引导和登录控制

开关机安全控制

调整BIOS引导设置原则

  • 将第一引导设备设为当前系统所在硬盘;

  • 禁止从其他设备(光盘、 U盘、网络)引导启动系统;

  • 将安全级别设为setup,并设置管理员密码。

    禁用重启热键:Ctrl+Alt+Delete,避免因用户误操作重启。

GRUB限制

  • 未经授权禁止修改启动参数
  • 未经授权禁止进入指定系统

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

GRUB菜单加密的实现

定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首先被读取。

文件描述
00_header设置grub默认参数
10_linux系统中存在多个linux版本
20_ppc_terminfo设置tty控制台
30_os_prober设置其他分区中的系统(硬盘中有多个操作系统时设置)
40_custom和41_custom用户自定义的配置
设置GRUB 2加密

由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。

在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。

GRUB 2密码支持以下两种格式:

  • 明文密码:密码数据没有经过加密,安全性差。
  • PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。

为GRUB菜单设置密码的两种方式:

  • CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码;
  • CentOS 6系统中,先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配 置文件。(/etc/grub.d/00_header是开机时第一个启动的文件)

方法一:

CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码

 [root@localhost ~]# grub2-setpassword    //使用命令直接设置GRUB密码
 Enter password:                          //输入密码
 Confirm password:                        //确认密码

image.png

image.png 方法二:

CentOS 6系统中,

先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,

然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,

最后使用grub2-mkconfig命令生成grub配置文件。

 # 步骤1.备份两个配置文件
 [root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
 [root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
 ​
 # 步骤2.生成PBKDF2加密口令
 [root@localhost ~]# grub2-mkpasswd-pbkdf2   //使用哈希算法生成密码
 输入口令:
 Reenter password: 
 PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.D9BDDD44312FD353436E03F2F73F643A0DD6FB59D989ECAAADB911E95846A477137A73DCEA248BFD6FF02BE2D52052E3790AEE175B10AA7634C6B66D1D9173C7.B15B5DC77367D1960086506C3E39A718477F1D326B6548577D992BB383DBA0E3AF7EFD3E67DD768E33B391C6AC1FAC1C6BB4CFF492D2046A651DF5986ACAE35A
 ​
 # 步骤3.编辑配置文件/etc/grub.d/00_header,将加密口令添加进文件。注意复制口令时不要有空格。
 [root@localhost ~]# vim /etc/grub.d/00_header
 -------------------------------
 cat <<EOF
 set superusers="root"       //设置登录用户
 password_pbkdf2 root grub.pbkdf2.sha512.10000.D9BDDD44312FD353436E03F2F73F643A0DD6FB59D989ECAAADB911E95846A477137A73DCEA248BFD6FF02BE2D52052E3790AEE175B10AA7634C6B66D1D9173C7.B15B5DC77367D1960086506C3E39A718477F1D326B6548577D992BB383DBA0E3AF7EFD3E67DD768E33B391C6AC1FAC1C6BB4CFF492D2046A651DF5986ACAE35A
 EOF
 ​
 # 步骤4.使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。
 [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
 Generating grub configuration file ...
 Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
 Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
 Found linux image: /boot/vmlinuz-0-rescue-869778d6675742a5968d2ea8c0e087b2
 Found initrd image: /boot/initramfs-0-rescue-869778d6675742a5968d2ea8c0e087b2.img
 done

微信图片_20220309005738.png

微信图片_20220309010331.png

微信图片_20220309012632.png

微信图片_20220309012227.png

1646760824645.png

微信图片_20220309014343.png

终端登录安全控制

限制root只在安全终端登录

安全终端配置:/etc/securetty

示例:

将终端tty5、tty6注释掉,禁止root用户从这两个终端登录。

 [root@localhost ~]# vi /etc/securetty   //编辑配置文件,将终端tty5、tty6注释掉
 ----------------------
 #tty5
 #tty6

image.png

禁止普通用户登录

  • 建立/etc/nologin文件
  • 删除nologin文件或者重启后即恢复正常
 [root@localhost ~]# touch /etc/nologin     //禁止普通用户登录
 ​
 [root@localhost ~]# rm -rf /etc/nologin    //取消普通用户登录限制

image.png

nmap工具(网络端口扫描)

网络端口扫描:

控制位描述
SYN建立链接
ACK确认
FIN结束断开
PSH传送 0 数据缓存,上层应用协议
RST重置
URG紧急

服务和端口号:

服务端口号
HTTP80
HTTPS443
Telnet23
FTP21
SSH(安全登录)、SCP(文件传输)、端口重定向22
SMTP25
POP3110
WebLogic7001
TOMCAT8080
WIN2003远程登录3389
Oracle数据库1521
MS SQL* SEVER数据库sever1433
MySQL 数据库sever3306

安装nmap:

 [root@localhost ~]# rpm -qa|grep nmap      //查看nmap
 [root@localhost ~]# yum install -y nmap    //安装nmap
复制代码

nmap命令常用格式

 nmap [扫描类型]  [选项]  <扫描目标>
复制代码

常用选项和扫描类型

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

netstat命令

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

命令格式:

 netstat  [选项]

常用选项

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

常用搭配:

 netstat -a       //列出所有端口
 ​
 netstat -at      //列出所有TCP端口
 ​
 netstat -au      //列出所有UDP端口
 ​
 netstat -ax      //列出所有unix端口
 ​
 netstat -lt      //列出处于监听状态的TCP端口
 ​
 netstat -tnlp    //直接使用ip地址列出所有处于监听状态的TCP端口,且加上程序名