Linux--系统安全及应用(su命令,sudo命令、密码安全控制、终端自动注销、端口扫描)

一、账号安全控制

1.1 账号安全基本措施

1.1.1 系统账号清理

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

  • 锁定长期不使用的账号

  • 删除无用的账号

  • 锁定账号文件passwd、shadow

查看非登录用户

[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd     ###查看非登录用户
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
... ...

查看当前可以登录的用户

[root@localhost ~]# grep "bash$" /etc/passwd     ### 查看当前可以登录的用户
root:x:0:0:root:/root:/bin/bash
yang:x:1000:1000:yang:/home/yang:/bin/bash
tom:x:1001:1000::/home/tom:/bin/bash
sam:x:1002:1002::/home/sam:/bin/bash
cheng:x:1003:1004::/home/cheng:/bin/bash
tom1:x:1004:1005::/home/tom1:/bin/bash
tom2:x:1005:1006::/home/tom2:/bin/bash

锁定长期不使用的账号

对于长期不用的用户账号,若无法确定是否删除,可以暂时将其锁定,(passwd,usermod命令都可以用来锁定和解锁账号)

方法一:
[root@localhost ~]# usermod -L yang    '###锁定账号'
[root@localhost ~]# passwd -S yang         '###查看账号状态'
yang LK 1969-12-31 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U yang   '###解锁账号'
[root@localhost ~]# passwd -S yang
yang PS 1969-12-31 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

方法二:
[root@localhost ~]# passwd -l yang    '###锁定账号'
锁定用户 yang 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S yang      '###查看账号状态'
yang LK 1969-12-31 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u yang     '###解锁账号'
解锁用户 yang 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -S yang
yang PS 1969-12-31 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方 法。使用chattr 命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用 lsattr 命令可以查看文件锁定情况。

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow     '锁定目标文件'
[root@localhost ~]# lsattr /etc/passwd /etc/shadow          '查看为锁定的状态'
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow          '解锁文件'
[root@localhost ~]# lsattr /etc/passwd /etc/shadow       '查看为解锁的状态'
---------------- /etc/passwd
---------------- /etc/shadow

在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加,删除账号,也不能更改用户的密码,登录shell,宿主目录等属性信息

[root@localhost ~]# useradd lalala           '尝试添加lalala用户'
useradd:无法打开 /etc/passwd          提示无法添加,文件已被锁定

1.1.2密码安全控制

设置密码有效期

  • 适用于新建用户
[root@localhost ~]# vi /etc/login.defs        适用于新建的用户
PASS_MAX_DAYS   30         原99999改为30

在这里插入图片描述

  • 对于已创建的用户,用这条命令
[root@localhost ~]# chage -M 30 yang

在这里插入图片描述
要求用户下次登录时修改密码

例如,
强制要求用户lisi下次登录时重设密码 '(重设的密码有密码复杂性要求,例如不可是连续的数字,连续的字母等)

[root@localhost ~]# chage -d 0 lisi		
[lisi@localhost root]$ su - lisi
密码:
您需要立即更改密码(root 强制)
为 lisi 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
无效的密码: 密码与原来的太相似
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
新的 密码:
无效的密码: 密码未通过字典检查 - 它基于字典单词
su: 已经超出服务重试的最多次数 

‘重设密码有很多限制,比较麻烦’

1.1.3 命令历史、自动注销

命令历史限制

  • 减少记录的命令条数

Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。

例如,可以设置最多只记录 200 条历史命令。

例如:设置最多只记录200条历史命令
[root@localhost ~]# vi /etc/profile			'对于未创建的用户,使用此命令修改配置文件'
...省略部分内容
将其中的HISTSIZE=1000,修改为HISTSIZE=200		

[root@localhost ~]# export HISTSIZE=200		'该命令适用于当前用户,及时成效'

'每当编辑完/etc/profile文件后,都需要使用命令source /etc/profile或者换重启使之生效'
  • 注销时自动清空命令历史

修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。即:当用户注销(退出已登录的bash环境)时,所记录的历史命令将自动清空

[root@localhost ~]# vi .bash_logout
history -c
clear
[root@localhost ~]# history 
source .bash_logout

或者
使用vi /etc/profile,将其中的history值改为0
但是将history值改为0后,↑ 无法显示刚刚输入的命令。

终端自动注销
bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置时间有变量TMOUT来控制,默认单位为秒

[root@localhost ~]# vi /etc/profile		'适用于新登录的用户'
...中间省略内容
export TMOUT=60			'闲置时间设置为60s'
[root@localhost ~]# source /etc/profile		'使设置生效'
[root@localhost ~]# export TMOUT=20		'适用于当前用户'

需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免 设置 TMOUT 变量。必要时可以执行“unset TMOUT”命令取消 TMOUT 变量设置。

1.2 用户切换与提权

大多数 Linux 服务器并不建议用户直接以 root 用户进行登录。一方面可以大大减少因误操作而导致的破坏,另一方面也降低了特权密码在不安全的网络中被泄露的风险。

1.2.1 su 命令 —— 切换用户

Substitute User

  • 使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限

  • 切换时需要对目标用户的密码进行验证(从root用户切换为其他用户不需要)

su - 目标用户

root➡任意用户,不验证密码

普通用户➡其他用户,验证目标用户的密码

[root@localhost ~]# su - lisi		'从root切换到其他用户不需要输入密码'
[lisi@localhost ~]$ su - root		'从其他用户切换到root用户需要输入密码'
密码:			'输入用户root的密码'
上一次登录:......
[root@localhost ~]# 		'验证成功后获得root权限'
  • 上述操作中,“-”等同于“–login”“-l”,表示切换后进入目标用户的登录shell环境。若缺少此选项则仅切换身份,不切换用户环境

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

1.将允许使用su命令的用户加入wheel组

[root@localhost ~]# id lisi		'查看lisi用户信息'
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi)		'发现不在wheel组中'
[root@localhost ~]# gpasswd -a lisi wheel		'将lisi用户添加到wheel组中'
正在将用户“lisi”加入到“wheel”组中
[root@localhost ~]# id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi),10(wheel)		'添加成功'

[root@localhost ~]# useradd wangwu
[root@localhost ~]# id wangwu
uid=1002(wangwu) gid=1002(wangwu) 组=1002(wangwu)

2.启用pam_wheel认证模块

[root@localhost ~]# vi /etc/pam.d/su		'启用pam-WHEEL认证模块'
...省略部分内容
#auth            required        pam_wheel.so use_uid		'进入编辑,将此行开头的#删除,随后wq退出即可'

启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令
尝试进行切换时将会按照“拒绝权限”来处理,从而将切换用户的权限控制在最小范围内
/pam.d 服务模块目录
使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要进行查看

[root@localhost ~]# su - wangwu		'之前添加了wangwu用户,但并未加入到wheel组中'
上一次登录:四 11月 14 16:39:40 CST 2019pts/0 上
[wangwu@localhost ~]$ su - lisi		'无法使用su命令'
密码:
su: 拒绝权限
[wangwu@localhost ~]$ su - lisi		'无法使用su命令'
密码:
su: 拒绝权限
[wangwu@localhost ~]$ exit		'返回root用户'
登出
[root@localhost ~]# su - lisi		'root切换到lisi用户不需要密码'
上一次登录:四 11月 14 16:39:17 CST 2019pts/0 上
[lisi@localhost ~]$ su - wangwu		'lisi切换到wangwu用户'
密码:
上一次登录:四 11月 14 16:41:57 CST 2019pts/0 上
[wangwu@localhost ~]$ exit		'返回lisi'
登出
[lisi@localhost ~]$ su - root		'切换为root'
密码:
上一次登录:四 11月 14 16:41:35 CST 2019pts/0 上
[root@localhost ~]# 

1.3 Linux中的PAM安全认证

1.3.1 su命令的安全隐患

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

1.3.2 PAM(Pluggable Authentication Modules)可插拔式认证模块

  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式

1.3.3 PAM认证原理

一般遵循的顺序

  • Server(服务)→ PAM(配置文件)→ pam_*.so

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

  • 用于访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证

  • 不同的应用程序所对应的PAM模块时不同的
    PAM认证的构成

  • 查看某个程序是否支持PAM认证,可以用ls命令进行查看

例如
查看su是否支持PAM模块认证

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

su 的 PAM 配置文件的具体内容如下所示。

[root@localhost ~]# 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 认证类型包括四种:

    • 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
    • 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
    • 密码管理(password management):主要是用来修改用户的密码;
    • 会话管理(session management):主要是提供对会话的管理和记账。

1.3.4 PAM安全认证流程

在这里插入图片描述

  • 控制类型也可以称作Control Flags,用于PAM验证类型的返回结果
    • 1.required验证失败时仍然继续,但返回Fail
    • 2.requisite验证失败则立即结束整个验证过程,返回Fail
    • 3.sufficient验证成功则立即返回,不在继续,否则忽略结果并继续
    • 4.optional不用于验证,只显示信息(通常用于session(会话)类型)

1.4 使用sudo机制提升执行权限

su命令的缺点

  • 用过su命令可以非常方便的切换为另一个用户,但前提条件是必须知道目标用户的登录密码

  • 对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分
    sudo命令的用途及用法

  • 用途:以其他用户身份(如root)执行授权的命令

  • 用法:
    sudo 授权命令

配置sudo授权

(1)在配置文件/etc/sudoers 中添加授权

  • sudo 机制的配置文件为/etc/sudoers,文件的默认权限为 440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则系统将提示为只读文件而拒绝保存。
  • 配置文件/etc/sudoers 中,授权记录的基本配置格式如下所示。
user MACHINE=COMMANDS
  • 授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命 令。各部分的具体含义如下。

    • 用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
    • 主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可。
    • 命令(COMMANDS):允许授权的用户通过 sudo 方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
  • 典型的 sudo 配置记录中,每行对应一个用户或组的 sudo 授权配置。例如,若要授权用户 jerry 能够执行 ifconfig 命令来修改 IP 地址,而 wheel 组的用户无需验证密码即可执行任何命令,可以执行以下操作。

[root@localhost ~]# visudo
…… //省略部分内容
jerry	localhost=/sbin/ifconfig
%wheel	ALL=NOPASSWD: ALL
  • 当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字 User_Alias、Host_Alias、Cmnd_Alias 来进行设置

例如
以下操作通过别名方式来添加授权记录,允许用户 jerry、tom、tsengyia 在主机 smtp、pop 中执行 rpm、yum 命令。

[root@localhost ~]# visudo
…… //省略部分内容
User_Alias	OPERATORS=jerry,tom,tsengyia Host_Alias	MAILSVRS=smtp,pop
Cmnd_Alias	PKGTOOLS=/bin/rpm,/usr/bin/yum OPERATORS		MAILSVRS=PKGTOOLS

sudo 配置记录的命令部分允许使用通配符“ * ”取反符号“ ! ”,当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。

例如
若要授权用户 yang 可以执行/sbin/目录下除 ifconfig、route 以外的其他所有命令程序,可以执行以下操作。

[root@localhost ~]# visudo
…… //省略部分内容
yang 	localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route
  • 默认情况下,通过 sudo 方式执行的操作并不记录。若要启用 sudo 日志记录以备管理员查看,应在/etc/sudoers 文件中增加“Defaults logfile”设置。
[root@localhost ~]# visudo	//查找 Defaults,在前面添加一行内容
…… //省略部分内容
Defaults logfile = "/var/log/sudo"

sudo实验

我们现在用wangwu和lisi这两个用户来做修改ip地址的sudo实验

[root@localhost ~]# id wangwu
uid=1002(wangwu) gid=1002(wangwu) 组=1002(wangwu)
[root@localhost ~]# id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi),10(wheel)
    
'1.我们先用lisi用户尝试修改IP地址'
[root@localhost ~]# su - lisi		'切换到lisi用户'
[lisi@localhost ~]$ ifconfig		'查看主机IP'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.197.141  netmask 255.255.255.0  broadcast 192.168.197.2
    ...省略部分信息
[lisi@localhost ~]$ sudo ifconfig ens33 12.12.12.12		'使用sudo命令修改IP地址'
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] lisi 的密码:

[lisi@localhost ~]$ ifconfig		'发现修改成功'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 12.12.12.12  netmask 255.0.0.0  broadcast 12.255.255.255
    ...此处省略部分信息

'2.我们用wangwu用户尝试修改IP地址'
[root@localhost ~]# su - wangwu
[wangwu@localhost ~]$ id wangwu
uid=1002(wangwu) gid=1002(wangwu) 组=1002(wangwu)
[wangwu@localhost ~]$ sudo ifconfig ens33 13.13.13.13

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

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] wangwu 的密码:
wangwu 不在 sudoers 文件中。此事将被报告。		'我们发现wangwu用户无法修改IP地址'
  • 总结
[root@localhost ~]# id wangwu
uid=1002(wangwu) gid=1002(wangwu) 组=1002(wangwu)
[root@localhost ~]# id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi),10(wheel)
'我们发现lisi用户在wheel组中,而wangwu用户不在'

[root@localhost ~]# visudo		'或者使用vi /etc/sudoers 命令进入sudo配置文件'
...此处省略部分信息
root    ALL=(ALL)       ALL		'发现root用户拥有所有权限'
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL		'发现wheel组中的用户也拥有所有权限'
...此处省略部分信息
'因此,在wheel组中的lisi用户拥有修改IP地址的权限'
' 不在wheel组中的wangwu用户没有权限修改IP地址'
  • 实现没有权限的wnagwu用户修改IP地址的方法
    1.将wangwu用户添加到wheel组中(方法简单,不赘述)
    2.在sudo配置文件中给wangwu用户提权

第二种方法步骤

[root@localhost ~]# which ifconfig		'查询ifconfig命令所在位置'
/usr/sbin/ifconfig
[root@localhost ~]# visudo		'修改sudo配置文件,将wngwu用户的ifconfig权限添加进去'
将这条命令添加进去
wangwu  localhost = /sbin/ifconfig		'用户wngwu的本地主机添加 /sbin/ifconfig 权限'
[root@localhost ~]# su - wangwu		'切换到wangwu用户'
上一次登录:四 11月 14 19:11:33 CST 2019pts/1 上
[wangwu@localhost ~]$ sudo ifconfig ens33 33.33.33.33		'修改ens33网卡IP地址'
[sudo] wangwu 的密码:
[wangwu@localhost ~]$ ifconfig		'修改成功'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 33.33.33.33  netmask 255.0.0.0  broadcast 33.255.255.255

实验成功

查看sudo操作记录

  • 查看sudo操作记录

  • 需启用Defaults logfile 配置

  • 默认日志文件:/var/log/sudo

[root@localhost ~]# visudo		'vi sudo配置文件'
在配置文件中添加
Defaults logfile = "/var/log/sudo"		'将之添加至配置文件中'

[root@localhost ~]# su - wangwu			'切换wangwu用户'
上一次登录:四 11月 14 19:34:45 CST 2019pts/1 上
[wangwu@localhost ~]$ sudo ifconfig ens33 22.22.22.22		'做一个操作,看日志文件是否会记录下来'
[sudo] wangwu 的密码:
[wangwu@localhost ~]$ exit		'因为wangwu用户没有权限查看,所以我们用root用户查看日志文件'
登出
[root@localhost ~]# cat /var/log/sudo			'查看日志文件'
Nov 14 19:44:17 : wangwu : TTY=pts/1 ; PWD=/home/wangwu ; USER=root ;
    COMMAND=/sbin/ifconfig ens33 22.22.22.22		'刚刚的操作已经显示在其中'

二、系统引导和登录控制

2.1 开关机安全控制

调整BIOS引导设置

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

GRUB限制

  • 使用grub2-mkpasswd-pbkdf2生成秘钥
  • 修改/etc/grub.d/00_header文件中,添加密码记录
  • 生成新的grub.cfg配置文件

实验过程

[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak		'将grub配置文件备份'
[root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak		'将/etc/grub.d/00_header文件也备份一下'
[root@localhost ~]# grub2-mkpasswd-pbkdf2		'开始加密自己的密码'
输入口令:		'例如输入 123123'
Reenter password: 		'重复输入123123'
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.E95B023DE28491A5F5A34B18C5C6CE9F74695A15FB17F48E04630B04DCB8E9A21EE3322C02311DEF3049654B5F64DD7A455BDF707FD304F4DB6ABC51A0F12321.08CF42CC9225D539DB130989F5445BDE2995B3691CE5806F075CBB51AD3084BA5E9B7C04EFC9D5BEEA8782CCDAA3105FA45AD9F534B5473FD91EB20556453EEB		'is 后面的内容就是通过加密算法将123123生成的加密密码'
[root@localhost ~]# vim /etc/grub.d/00_header		'编辑配置文件头文件'
'将以下内容输入进去,刚刚生成的加密密码也输入进去'
cat << EOF
set superusers="root"
passwd_pbkdf2 root grub.pbkdf2.sha512.10000.E95B023DE28491A5F5A34B18C5C6CE9F74695A15FB17F48E04630B04DCB8E9A21EE3322C02311DEF3049654B5F64DD7A455BDF707FD304F4DB6ABC51A0F12321.08CF42CC9225D539DB130989F5445BDE2995B3691CE5806F075CBB51AD3084BA5E9B7C04EFC9D5BEEA8782CCDAA3105FA45AD9F534B5473FD91EB20556453EEB
EOF

[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg		'将生成的配置文件覆盖掉原来的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-b02d514a7e824ce7b6ea15214bb43466
Found initrd image: /boot/initramfs-0-rescue-b02d514a7e824ce7b6ea15214bb43466.img
done
[root@localhost ~]# init 6		'重启'

通过上述配置,重新开机进入 GRUB 菜单时,按 E 键将无法修改引导参数。若要获得编辑权限,必须根据提示输入正确的 GRUB 密码
在这里插入图片描述
注意

  • 为 GRUB 设置密码时,“grub.pbkdf2.sha512…”部分可替换为明文的密码字符串,如“123456”,但安全性稍差。不建议使用明文的密码字符串。

2.2 终端登录安全控制

2.2.1 限制root只在安全终端登录

  • 安全终端配置:/etc/securetty
[root@localhost ~]# vim /etc/securetty		'进入终端配置'
...省略部分内容
vc/9
vc/10
vc/11
tty1
#tty2		'禁止终端tty2登录,在其前方输入#即可'
#tty3		'禁止终端tty3登录,在其前方输入#即可'
tty4
tty5
tty6
tty7
..省略部分内容

2.2.2 禁止普通用户登录

  • 建立/etc/nologin文件

  • 删除nologin文件或重启后即恢复正常

[root@localhost ~]# touch /etc/nologin		'禁止普通用户登录'
[root@localhost ~]# rm -rf /etc/nologin		'取消上述登录限制'
'一般做维护的时候使用(只有root用户可以登录,其他用户不可登录)'

例如

[root@localhost ~]# touch /etc/nologin
此时,再用其他用户登录,即便密码输入正确也会提示密码没有奏效,从而无法登录,只有root用户可以登录
[root@localhost ~]#rm -rf /etc/nologin
此时,将之前的登录限制取消之后,其他用户也可以正常登录了

三、弱口令检测

3.1 Joth the Ripper,简称为 JR

一款密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度
资源有需要可以私我
官方网站:http://openwall.com/john/
在这里插入图片描述

  • 安装JR工具
    • 安装方法 ###make clean 系统类型
    • 主程序文件为john
  • 检测弱口令账号
    • 获得Linux/Unix服务器的shadow文件
    • 执行john程序,将shadow文件作为参数
  • 密码文件的暴力破解
    • 准备号密码字典文件,默认为passwoed.lit
    • 执行john程序,结合–wordlist=字典文件

3.2 弱口令实验:

  • 通过john工具查看自己的密码

1、下载并安装 John the Ripper

[root@localhost ~]# mkdir /111		'创建挂载点'
[root@localhost ~]# mount.cifs //192.168.100.3/cccc /111	'挂载(cccc文件中有john压缩包)'
'对于如何将Windows中文件挂载到Linux中的,可以查看我的博客“Linux 安装及管理程序--理论和命令配置”https://blog.csdn.net/CN_TangZheng/article/details/102849246'
Password for root@//192.168.100.3/cccc:  
[root@localhost ~]# cd /111
[root@localhost 111]# ls
john-1.8.0.tar.gz		
[root@localhost 111]# tar zxvf john-1.8.0.tar.gz -C /opt	'将压缩包解压到/opt中'
[root@localhost 111]# cd /opt/john-1.8.0/	'进入压缩包'
[root@localhost john-1.8.0]# ls	'查看压缩包'
doc  README  run  src		'doc是说明文档,README是说明书,run是脚本,src是源码文件'

2、接下来是手工编译安装的过程

[root@localhost src]# yum install gcc gcc-c++ -y
    ...此处省略内容
[root@localhost src]# make linux-x86-64		'make编译'
    ...此处省略内容
[root@localhost src]# cd ..
[root@localhost john-1.8.0]# ls
doc  README  run  src
[root@localhost john-1.8.0]# cd run
[root@localhost run]# ls		'此时已经有john脚本'
ascii.chr   john       lm_ascii.chr  makechr       relbench  unique
digits.chr  john.conf  mailer        password.lst  unafs     unshadow
[root@localhost run]# ./john /etc/passwd /etc/shadow	'运行脚本查看/etc/passwd /etc/shadow文件'
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		'等待几分钟,若设置的密码在弱口令字典中,就会被识别出来密码,说明密码不够复杂,不太安全'
123123           (root)
123123           (lisi)
123123           (wangwu)
4g 0:00:01:14 100% 2/3 0.05368g/s 344.0p/s 363.4c/s 363.4C/s leslie..boston
Use the "--show" option to display all of the cracked passwords reliably
Session completed
[root@localhost run]# cat password.lst 		'查看弱口令字典'

四、网络扫描NMAP

  • NMAP是一个强大的端口扫描类安全评测工具
  • NMAP被设计为检测众多主机数量的巨大网络,支持ping扫描、多端口检测、OS识别等多种技术。使用NMAP定期扫描内部网络,可以找出网络中不可控的应用服务,即使关闭不安全的服务、减少安全风险。

常用的扫描类型

-sS,-sT,-sF,-sU,-sP,-P0

-sT:TCP端口

-sU:UDP端口

-sP:ping

nmap实验
1、安装 NMAP 软件包

[root@localhost run]# rpm -q nmap
未安装软件包 nmap 
[root@localhost run]# yum install nmap -y
...此处省略内容

2、扫描语法及类型
nmap [扫描类型] [选项] <扫描目标…>

常用的扫描类型

  • -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、扫描操作示例

  • 针对本机进行扫描,检查开放了哪些常用的 TCP 端口、UDP 端口。
[root@localhost ~]# nmap 127.0.0.1	//扫描常用的TCP 端口
Starting Nmap 6.40 ( http://nmap.org ) at 2017-09-14 21:59 EDT
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for localhost (127.0.0.1) Host is up (0.000014s latency).
Not shown: 995 closed ports PORT	STATE SERVICE
21/tcp  open  ftp 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.32 seconds
[root@localhost ~]# nmap -sU 127.0.0.1	//扫描常用的UDP 端口
Starting Nmap 6.40 ( http://nmap.org ) at 2017-09-14 21:59 EDT
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for localhost (127.0.0.1) Host is up (0.000022s latency).
Not shown: 997 closed ports
PORT	STATE	SERVICE
67/udp	open|filtered dhcps 69/udp	open|filtered tftp 5353/udp open|filtered zeroconf

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

在扫描结果中,STATE 列若为 open 则表示端口为开放状态,为 filtered 表示可能被防火墙过滤,为 closed 表示端口为关闭状态。

  • 检查 192.168.4.0/24 网段中有哪些主机提供 FTP 服务。
[root@localhost ~]# nmap -p 21 192.168.4.0/24
Starting Nmap 6.40 ( http://nmap.org ) at 2017-09-14 22:01 EDT
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.4.253 Host is up (0.00016s latency).
PORT	STATE SERVICE
21/tcp open ftp
MAC Address: 00:50:56:C0:00:03 (VMware)


Nmap scan report for 192.168.4.254 Host is up (-480s latency).
PORT	STATE SERVICE
21/tcp open ftp


Nmap done: 256 IP addresses (2 hosts up) scanned in 8.11 seconds
  • 快速检测 192.168.4.0/24 网段中有哪些存活主机(能 ping 通)。
[root@localhost ~]# nmap -n -sP 192.168.4.0/24
Starting Nmap 6.40 ( http://nmap.org ) at 2017-09-14 22:01 EDT Nmap scan report for 192.168.4.253
Host is up (0.00011s latency).
MAC Address: 00:50:56:C0:00:03 (VMware)
Nmap scan report for 192.168.4.254 Host is up.
Nmap done: 256 IP addresses (2 hosts up) scanned in 8.08 seconds
  • 检测 IP 地址位于 192.168.4.100~200 的主机是否开启文件共享服务。
[root@localhost ~]# nmap -p 139,445 192.168.4.100-200 Starting Nmap 6.40 ( http://nmap.org ) at 2017-09-14 22:03 EDT Nmap scan report for 192.168.4.110
Host is up (0.00028s latency). PORT	STATE SERVICE
139/tcp open netbios-ssn 445/tcp open microsoft-ds
MAC Address: 00:0C:29:99:01:07 (VMWare)
Nmap done: 101 IP addresses (1 host up) scanned in 12.163 seconds
[root@localhost run]# nmap -sP 192.168.197.0/24		'192.168.197.0/24是本台主机的网络号,此命令查看此网段中那些主机在线'

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-14 23:49 CST
Nmap scan report for 192.168.197.1
Host is up (0.00064s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.197.2
Host is up (0.000052s latency).
MAC Address: 00:50:56:EF:60:82 (VMware)
Nmap scan report for 192.168.197.254
Host is up (0.000077s latency).
MAC Address: 00:50:56:EA:BF:C1 (VMware)
Nmap scan report for 192.168.197.141
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 1.95 seconds

[root@localhost run]# nmap -sT 192.168.197.141

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-14 23:52 CST
Nmap scan report for 192.168.197.141		'查看主机192.168.197.141开了哪些TCP端口'
Host is up (0.00078s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

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

猜你喜欢

转载自blog.csdn.net/ycycyyc_/article/details/107106096