将非登录用户的Shell设为/sbin/nologin
锁定长期不使用的账号
删除无用的账号
●锁定账号文件passwd、shadow,用以控制用户(包括root)无法创建删除修改账户
[root@localhost ~]# useradd -s /sbin/nologin mysql
[root@localhost ~]# vi /etc/passwd
+i进行锁定 -i解锁
lsattr 查看是否锁定
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow #锁定文件
[root@localhost ~]# Isattr /etc/passwd /etc/shadow #查看状态
---------- /etc/passwd 锁定
------------ /etc/shadow 锁定
案例:
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow ##进行文件锁定
[root@localhost ~]# lsattr /etc/passwd /etc/shadow ##查看一下锁定的状态
----i----------- /etc/passwd ##有“i"是锁定状态
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow ##现在进行文件解锁
[root@localhost ~]# lsattr /etc/passwd /etc/shadow ##查看一下文件的状态
---------------- /etc/passwd ##解锁成功
---------------- /etc/shadow
---------------- /etc/shadow
[root@localhost ~]# id tom ##检测账户存在否
id: tom: no such user ##这里显示没有
[root@localhost ~]# useradd hua ##下面进行创建hua用户
[root@localhost ~]# passwd hua ##设置账户密码
更改用户 hua 的密码 。
新的 密码: ##输入账户密码
重新输入新的 密码:
抱歉,密码不匹配。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码: ##再次输入密码
passwd:所有的身份验证令牌已经成功更新。
[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
[root@localhost ~]# userdel hua ##删除hua账户
[root@localhost ~]# id hua ##检测账户
id: hua: no such user ##删除成功
[root@localhost ~]# useradd hua1 ##创建hua1账户
[root@localhost ~]# passwd hua1 ##设置hua1密码
更改用户 hua1 的密码 。
新的 密码: ##输入密码
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# useradd hua2 ##创建hua2账户
[root@localhost ~]# passwd hua2 ##设置hua2密码
更改用户 hua2 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# usermod -L hua1 ##锁定hua1账号
[root@localhost ~]# passwd -S hua1 ##查看账号状态
hua1 LK 2020-06-22 0 99999 7 -1 (密码已被锁定。) ##已经锁定
[root@localhost ~]# usermod -U hua1 ##解锁账号
[root@localhost ~]# passwd -S hua1 ##查看账号状态
hua1 PS 2020-06-22 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]# usermod -L hua2
[root@localhost ~]# passwd -S hua2
hua2 LK 2020-06-22 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U hua2
[root@localhost ~]# passwd -S hua2
hua2 PS 2020-06-22 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
设置密码有效期
要求用户下次登录时修改密码
[root@localhost ~]# vi /etc/login.defs ##配置etc的文件 对于未创建的用户使用此命令
[root@localhost ~]# chage -M 30 lisi ##30天需要更改密码 对于已创建的用户
[root@localhost ~]##chage -d 0 list ##强制下次list用户重设密码
案列:
:wq ##保存退出
[root@localhost ~]# cat /etc/passwd ##查看linux所有用户
[root@localhost ~]##chage -d 0 hua1 ##强制下次hua1用户重设密码
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
更改用户 hua1 的密码 。
为 hua1 更改 STRESS 密码。
(当前)UNIX 密码: ##这边要设置hua1用户的登录密码
减少记录的命令条数
[root@localhost ~]# vim /etc/profile '进入/etc/profile'
HISTSIZE=200
[root@localhost ~]#vi~/.bash_logout
history
clear
修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。即:当用户注销(退出已登录的bash环境)时,所记录的历史命令将自动清空
[root@localhost ~]# vi .bash_logout ## 编辑宿主目录的bash_logout文件
history -c
clear
[root@localhost ~]#history
source .bash_logout
bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置时间有变量TMOUT来控制,默认单位为秒
[root@localhost ~]# vim ~/.bash_profile #编辑root家目录的环境变量
export TMOUT=60 '闲置时间设置为60s'
2.1用途及用法
用途: Substitute User,切换用户 su命令用于变更为其他使用者的身份
格式 su-目标用户
从一般用户切换root用户
su -root
从一般用户切换到root用户需要输入密码
从root用户切换一般用户
su -test
从root用户切换到一般用户,不需要输入test用户的密码,直接从su test命令即可进入test用户
[root@localhost /]# su - hua1 '带-选项标识将使用目标用户的登录shell环境'
上一次登录:一 6月 22 15:16:48 CST 2019pts/0 上
[gsy@localhost ~]$ su - root
密码:
上一次登录:一 6月 22 15:28:57 CST 2019pts/0 上
[root@localhost ~]# whoami
root
[root@localhost ~]#
将允许使用su命令的用户加入wheel组,在wheel组内的用户才可以使用su切换用户命令
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)
的登录密码,这样带来了安全风险。为了加强su命令的使用控制,可以借助于pam wheel
认证模块,只允许极个别用户使用
su命令进行切换。实现过程如下:将授权使用su命令
的用户添加到wheel 组,修改/etc/pam.d/su 认证配置以启用pam_ wheel 认证.
[root@localhost ~]# gpasswd -a hua1 wheel
正在将用户“hua1”加入到“wheel”组中
[root@localhost ~]# grep wheel /etc/group
wheel:x:10:hua1
[root@localhost ~]# vi /etc/pam.d/su
[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 - hua1 '之前添加了hua1用户,但并未加入到wheel组中'
上一次登录:一 6月 22 15:51:40 CST 2020pts/0 上
[hua2alhost ~]$ su - hua2 '无法使用su命令'
密码:
su: 拒绝权限
[hua2alhost ~]$ su - hua2 '无法使用su命令'
密码:
su: 拒绝权限
[hua2alhost ~]$ exit '返回root用户'
登出
[root@localhost ~]# su - hua2 'root切换到lisi用户不需要密码'
上一次登录:一 6月 14 16:02:17 CST 2020pts/0 上
[hua2@localhost ~]$ su - hua2 'lisi切换到wangwu用户'
密码:
上一次登录:一 6月 22 16:03:57 CST 2020pts/0 上
[hua1@localhost ~]$ exit '返回lisi'
登出
[hua2localhost ~]$ su - root '切换为root'
密码:
上一次登录:一 6月 22 16:05:35 CST 2020pts/0 上
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户的登录密码,带来风险
借助pam_wheel认证模块,可以实现指定允许的用户使用su命令
PAM(Pluggable Authentication Modules)可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式
PAM认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so(.so 后缀代表模块文件)
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
用户访问服务器的时候,服务器的某一个服务程序把用户的不同请求发送到PAM模块进行认证
不同的应用程序所对应的PAM模块也是不同的
查看某个程序是否支持PAM认证,可以用ls命令进行查看,例如查看su是否支持PAM模块认证
[root@localhost ~]# ls /etc/pam.d | grep su
查看su的PAM配置文件:cat /etc/pam.d/su
每一行都是一个独立的认证过程
每一行可以区分为三个字段(认证类型,控制类型,PAM模块及其参数)
控制类型也可以乘坐Control Flags,用于PAM验证类型的返回结果
1.required验证失败时仍然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回fail(最重要的一步)
3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4.optional不用于验证,只显示信息(通常用session类型)
如图所示:
默认情况下,任何用户都允许使用su命令,从而恶意用户有机会反复尝试其他用户(如root)的登录密码,带来安全风险
用途:已其他用户身份(如root)执行授权的命令
用法 sudo 授权命令
visudo命令 或者 vim /etc/sudoers
记录格式: 用户 主机名列表 = 命令程序列表
授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令。
各部分的具体含义如下。
➢用户 (user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有
用户)。
➢主机 (MACHINE): 使用此配置 文件的主机名称。此部分主要是方便在多个主机
间共用同一-份sudoers 文件,一 般设为localhost 或者实际的主机名即可。
➢命令(COMMANDS):允许授权的用户通过sudo方式执行的特权命令,需填写
命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
典型的sudo配置记录中,每行对应-一个用户或组的sudo 授权配置。例如,若要授权.
用户jerry能够执行ifconfig命令来修改IP地址,而wheel组的用户无需验证密码即可执行
任何命令
[root@localhost log]# visudo
......
用户 主机名列表 = 命令程序列表
%wheel ALL = NOPASSWD:ALL
jerry localhost = /sbin/ifconfig
syrianer localhost = /sbin/*,!/sbin/ifconfig,!/sbin/route
'可以使用通配符号*和取反符号!'
Cmnd_Alias PKGTOOLS = /bin/rpm,/usr/bin/yum
mike localhost = PKGTOOLS
这里的”*“的是通配符”!“表示取反符号
用户与主机名列表间用制表符隔开,=号左右有空格,命令程序列表中若是有两个及以上命令,命令与命令之间用逗号隔开
案列:
[root@localhost ~]# id hua1 ##查看hua1账户
uid=1001(hua1) gid=1001(hua1) 组=1001(hua1),10(wheel)
[root@localhost ~]# id hua2 ##查看hua2账户
uid=1002(hua2) gid=1002(hua2) 组=1002(hua2)
[hua1@localhost ~]$ sudo ifconfig ens33:0 192.168.1.11/24 ##修改hua1临时ip
[hua1@localhost ~]$ ifconfig 查看ip信息
ens33:0: flags=4163 mtu 1500
inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:84:c1:e3 txqueuelen 1000 (Ethernet)
[hua1@localhost ~]$ sudo ifconfig ens33:3 192.168.100.10/24 ##使用sudo修改ip
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大
需要启用Defaults logfile配置
默认日志文件:/var/log/sudo
[root@localhost ~]# visudo '或者 vim /etc/sudoers也可以'
......
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lisi localhost = /usr/sbin/ifconfig
Defaults logfile = "/var/log/sudo" '输入设置'
## Allows members of the 'sys' group to run networking, software,
将第- - -弓|导设备设为当前系统所在硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setup,并设置管理员密码
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/0O_ header文件中,添加密码记录
生成新的grub.cfg配置文件
案列:
使用方向键来改变选择。按“e”来编辑选择的项目,或“c”作为命令提示符。所选条目将在4s中自动启动
[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.ba ##将grup配置文件备份
[root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/ead.bak ##将/etc/grup.d/00_header文件也备份
[root@localhost ~]# grub2-mkpasswd-pbkdf2
输入口令: 例如:123123
Reenter password: 再次输入
pbkdf2.sha512.10000.922002DE94E4EDF1D03221BE3F3ACC9E02328F28293CBBB8A4507B7840D28F79DCF5171191F9826267195C1255621EAF3E8FC908C8AC0C73665105C048A6E21A.C3A4350CF5B5A8F53B5215569C5A3055670C439B1A244717A80F61C45E915685D7BD7F1874677F5E8D779F21374B6B70EAD109D5C111814D3B05D7DE5EB85A59 #编辑文件头信息
cat << EOF
set superusers="root"
pbkdf2.sha512.10000.922002DE94E4EDF1D03221BE3F3ACC9E02328F28293CBBB8A4507B7840D28F79DCF5171191F9826267195C1255621EAF3E8FC908C8AC0C73665105C048A6E21A.C3A4350CF5B5A8F53B5215569C5A3055670C439B1A244717A80F61C45E915685D7BD7F1874677F5E8D779F21374B6B70EAD109D5C111814D3B05D7DE5EB85A59
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg ##配置新新成的文件
init 6 重启
安全终端配置:/etc/securetty
[root@localhost etc]# vim /etc/securetty
#console
vc/1
vc/2
vc/3
:wq 最后保存退出
[root@localhost ~]# touch /etc/nologin '禁止普通用户登录'
[root@localhost etc]# find -name "nologin"
./nologin
[root@localhost etc]# rm -rf /etc/nologin '删除掉/etc/nologin文件即可恢复正常
暴力密码破解工具-John the Ripper开源密码破解器下载
下载john-1.8.0.tar.gz
wget http://www.openwall.com/john/j/john-1.8.0.tar.gz
...
正在保存至: “john-1.8.0.tar.gz”
100%[+++++++++++++++++++++++++++++++++++++++++++++++++++======================================>] 5,450,412 8.47KB/s 用时 8m 5s
2020-07-05 15:43:33 (4.70 KB/s) - 已保存 “john-1.8.0.tar.gz” [5450412/5450412])
安装完成查看一下
[root@localhost ~]# ll
总用量 5880
-rw-------. 1 root root 2057 6月 17 23:17 anaconda-ks.cfg
-rw-r--r--. 1 root root 2105 6月 17 23:17 initial-setup-ks.cfg
-rw-r--r--. 1 root root 558260 7月 6 11:12 john-1.8.0.tar.gz
-rw-r--r--. 1 root root 5450412 7月 7 2014 john-1.8.0.tar.gz.0
drwxr-xr-x. 2 root root 6 6月 17 23:18 公共
drwxr-xr-x. 2 root root 6 6月 17 23:18 模板
进行解压编译
[root@localhost ~]# tar zxvf john-1.8.0.tar.gz -C /opt/ ##把安装包解压编译到opt目录
john-1.8.0/README
john-1.8.0/doc/CHANGES
john-1.8.0/doc/CONFIG
john-1.8.0/doc/CONTACT
john-1.8.0/doc/COPYING
john-1.8.0/doc/CREDITS
john-1.8.0/doc/EXAMPLES
john-1.8.0/doc/EXTERNAL
john-1.8.0/doc/FAQ
john-1.8.0/doc/INSTALL
john-1.8.0/doc/LICENSE
john-1.8.0/doc/MODES
john-1.8.0/doc/OPTIONS
john-1.8.0/doc/README
john-1.8.0/doc/RULES
john-1.8.0/run/ascii.chr
[root@localhost ~]# cd /opt ##进入opt目录
[root@localhost opt]# ls ##已经在目录底下了
john-1.8.0 rh
[root@localhost opt]# cd john-1.8.0/ ##进入目录
[root@localhost john-1.8.0]# ls
doc README run src
说明文档 使用说明 运行的 源码包
[root@localhost john-1.8.0]# ls run
ascii.chr john.conf mailer password.lst
digits.chr lm_ascii.chr makechr relbench
[root@localhost john-1.8.0]# cd src ##进入src目录 会发现目录里面的文件都是.c结尾 这是C语言的文件 linux内核是c语言开发的
[root@localhost src]# ls
AFS_fmt.c crc32.c john.h os.h status.c
alpha.h crc32.h list.c params.c status.h
alpha.S DES_bs_b.c list.h params.h symlink.c
batch.c DES_bs.c LM_fmt.c pa-risc.h times.h
batch.h DES_bs.h loader.c path.c trip_fmt.c
bench.c DES_fmt.c loader.h path.h tty.c
bench.h DES_std.c logger.c ppc32alt.h tty.h
best.c DES_std.h logger.h ppc32.h unafs.c
best.sh detect.c Makefile ppc64alt.h unique.c
BF_fmt.c dummy.c Makefile.dep ppc64.h unshadow.c
BF_std.c external.c math.c recovery.c vax.h
BF_std.h external.h math.h recovery.h wordlist.c
BSDI_fmt.c formats.c MD5_fmt.c rpp.c wordlist.h
c3_fmt.c formats.h MD5_std.c rpp.h x86-64.h
charset.c getopt.c MD5_std.h rules.c x86-64.S
charset.h getopt.h memory.c rules.h x86-any.h
common.c ia64.h memory.h sboxes.c x86-mmx.h
common.h idle.c mips32.h sboxes-s.c x86-mmx.S
compiler.c idle.h mips64.h signals.c x86.S
compiler.h inc.c misc.c signals.h x86-sse.h
config.c inc.h misc.h single.c x86-sse.S
config.h john.asm nonstd.c single.h
cracker.c john.c options.c sparc32.h
cracker.h john.com options.h sparc64.h
下面进行手工编译安装
[root@localhost src]# yum install gcc gcc-c++ -y
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.163.com
* extras: mirrors.nju.edu.cn
* updates: mirrors.nju.edu.cn
base | 3.6 kB 00:00
extras | 2.9 kB 00:00
updates | 2.9 kB 00:00
(1/4): base/7/x86_64/group_gz | 153 kB 00:00
(2/4): extras/7/x86_64/primary_db | 194 kB 00:00
(3/4): updates/7/x86_64/primary_db | 3.0 MB 00:03
[root@localhost john-1.8.0]# cd src
[root@localhost src]# make linux-x86-64 'make编译'
[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 (tom2)
123123 (tom)
破解完成
[root@localhost ~]# rpm -q nmap ##查看一下nmap有没有安装
未安装软件包 nmap
[root@localhost ~]# yum -y install nmap ##用yum安装一下
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.nju.edu.cn
* updates: mirrors.nju.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 nmap.x86_64.2.6.40-19.el7 将被 安装
--> 正在处理依赖关系 nmap-ncat = 2:6.40-19.el7,它被软件包 2:nmap-6.40-19.el7.x86_64 需要
...此处省略
[root@localhost ~]# nmap -sP 20.0.0.0/24 20.0.0.0/24是本机的网络号 查看此网段中哪些主机
Starting Nmap 6.40 ( http://nmap.org ) at 2020-07-06 12:04 CST
Nmap scan report for 20.0.0.2
Host is up (0.00019s latency).
MAC Address: 00:50:56:F6:2D:F5 (VMware)
Nmap scan report for 20.0.0.3
Host is up (0.00034s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 20.0.0.254
Host is up (0.00010s latency).
MAC Address: 00:50:56:EC:A5:D1 (VMware)
Nmap scan report for 20.0.0.41
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.37 seconds
[root@localhost ~]# nmap -sT 20.0.0.41
Starting Nmap 6.40 ( http://nmap.org ) at 2020-07-06 12:08 CST
Nmap scan report for 20.0.0.41 ##查看主机20.0.0.41开了哪些TCP端口
Host is up (0.0014s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
6000/tcp open X11
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
本次实验结束感谢观看