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

    技术2023-08-02  106

    文章目录

    一、账号安全控制1.1 账号安全基本措施1.1.1 系统账号清理1.1.2密码安全控制1.1.3 命令历史、自动注销 1.2 用户切换与提权1.2.1 su 命令 —— 切换用户 1.3 Linux中的PAM安全认证1.3.1 su命令的安全隐患1.3.2 PAM(Pluggable Authentication Modules)可插拔式认证模块1.3.3 PAM认证原理1.3.4 PAM安全认证流程 1.4 使用sudo机制提升执行权限配置sudo授权sudo实验查看sudo操作记录 二、系统引导和登录控制2.1 开关机安全控制2.2 终端登录安全控制2.2.1 限制root只在安全终端登录2.2.2 禁止普通用户登录 三、弱口令检测3.1 Joth the Ripper,简称为 JR3.2 弱口令实验: 四、网络扫描NMAP

    一、账号安全控制

    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验证失败时仍然继续,但返回Fail2.requisite验证失败则立即结束整个验证过程,返回Fail3.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
    Processed: 0.010, SQL: 9