文章目录
账户文件的控制管理
查看哪些用户能登录到当前的服务器
[root@server2 ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
xwy:x:1000:1000:xwy:/home/xwy:/bin/bash
附加:Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
添加lisi用户来登录到当前服务器
[root@server2 ~]# useradd lisi
[root@server2 ~]# passwd lisi
[root@server2 ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
xwy:x:1000:1000:xwy:/home/xwy:/bin/bash
lisi:x:1001:1001::/home/lisi:/bin/bash
创建用户权限设置
[root@server2 ~]# lsattr /etc/passwd /etc/shadow //查看用户状态,此时文件状态为无锁状态,此时,只要要创建用户的权限,就可以随意创建
---------------- /etc/passwd
---------------- /etc/shadow
对账户文件进行加锁、解锁(加锁就是冻结该文件)
[root@server2 ~]# chattr +i /etc/passwd /etc/shadow //加锁
[root@server2 ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@server2 ~]# useradd wangwu
useradd:无法打开 /etc/passwd //此时无法创建用户
[root@server2 ~]# chattr -i /etc/passwd /etc/shadow //解锁
[root@server2 ~]# echo "123456" | passwd --stdin wangwu //免交互
chattr命令的用法
1、“+”:在原有参数设定基础上,追加参数;
2、“-”:在原有参数设定基础上,移除参数;
3、“=”;更新为指定参数设定。
“A”:文件或目录的atime(access time)不可被修改(modified),可以有效预防例如手提电脑,磁盘I/O错误的发生;
“S”:硬盘I/O同步选项,功能类似sync;
“a”:即append,设定参数后,只能向文件中添加数据,而不能删除,多用来服务器日志文件安全,只有root才能设定这个属性;
“c”,即compresse,设定文件是否经压缩后再存储,读取时需要经过自动解压操作;
“d”:即no dump 设定文件不能成为dump程序的备份目标;
“i”:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对文件系统的安全设置有很大帮助;
“j”:即journal,设定此参数使得当通过mount参数:data=ordered或者data=writeback挂载的文件系统,文件在写入时会被记录
(在journal中)。如果filesystem被设定参数为data=journal,则该参数自动失效;
“s”:保密性地删除文件或者目录,即硬盘空间被全部收回;
“u”:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。
各参数选项中常用到的是“a”和“i”。“a”选项强制只可添加不可删除,多用于日志系统的安全设定,而“i”是更为严格的安全设定,
只有superuser(root)或具有CAP_Linux_IMMUYABLE处理能力(标识)的进程能够施加该选项。
密码时效管理
查看账户密码文件:
[root@server1 ~]# vim /etc/shadow
例子:
xwy:$6$C6kZ14L60z5rBfpr$2MEOc9dCrUZt.8OqH/LgnPz3enSpPaFujvKfWHYhUXA9J./qDj3faqIWiBFOtBq.uON/grRf1gOcPXGAmJv7G1::0:99999:7:::
账户密码是通过哈希算法进行加密生成的
99999:表示密码最长有效期(相当于永久),这种属于已存在的用户
修改密码有效期文件:
[root@server1 ~]# vim /etc/login.defs
25 PASS_MAX_DAYS 99999 //密码最长有效期
26 PASS_MIN_DAYS 0 //密码最短有效期(表示可以随时修改密码)
27 PASS_MIN_LEN 5 //密码最小长度
28 PASS_WARN_AGE 7 //提前几天提醒
25 PASS_MAX_DAYS 99999 修改为30
此时,已存在用户不会发生变化,后创建的用户会发生改变
那么已创建的用户密码最长有效期该如何修改呢
输入以下命令:
[root@server1 ~]# chage -M 20 xwy
[root@server1 ~]# chage -d 0 xwy //修改用户下次登录时需要修改密码
去本地终端(xwy用户)去登陆:会出现以下结果
[xwy@server1 ~]$ passwd //进入系统之后修改
更改用户 xwy 的密码 。
为 xwy 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
无效的密码: 密码少于 8 个字符
先输入之前的密码,再输入新的密码(且与原来的密码不能一致,不允许使用连续的字符与阿拉伯数字,不能小于8位)(十分复杂)
历史命令记录(记载输入之前的所有命令)
[root@server1 ~]# history
系统环境变量的配置文件
[root@server1 ~]# vim /etc/profile
46 HISTSIZE=1000 //默认查看历史记录为1000,可以修改
将1000修改为10,发现没有发生变化,此时需要使修改的命令生效(或者重启)
[root@server1 ~]# history
1 vim /etc/shadow
2 vim /etc/login.defs
3 vim /etc/shadow
4 useradd lisi
5 passwd lisi
6 vim /etc/shadow
7 chage -M 20 xwy
8 vim /etc/shadow
9 chage -d 0 xwy
10 history
11 vim /etc/profile
12 history
[root@server1 ~]# source /etc/profile //使修改的配置文件生效
[root@server1 ~]# history //在次查看发现历史记录只能查看最新的10条
4 passwd lisi
5 vim /etc/shadow
6 chage -M 20 xwy
7 vim /etc/shadow
8 chage -d 0 xwy
9 history
10 vim /etc/profile
11 history
12 source /etc/profile
13 history
针对用户去操作(每个用户都有其对应的系统环境变量的配置文件)
[root@server1 ~]# cd /home/lisi/
[root@server1 lisi]# ls
[root@server1 lisi]# ls -a //查看隐藏文件
. .. .bash_logout .bash_profile .bashrc .mozilla
[root@server1 lisi]# vim .bash_logout //修改配置
# ~/.bash_logout
history -c
clear
显示的自动注销
[root@server1 ~]# vim /etc/profile 最后一行添加以下内容
77 export TMOUT=15 15:15秒会自动注销登录
[root@server1 ~]# source /etc/profile //使修改配置的文件生效
注销时自动清空历史命令。
vi ~/.bash_logout
history -c
clear
history –c
该命令可以清空本次登入的所有输出命令,但不清空.bash_history文件,所以下次登陆后,旧命令还将出现,
历史命令是存在于当前用户根目录下的./bash_history文件。
echo > $home./bash_history
每个用户根目录下都有一个.bash_history文件用于保存历史命令,当每次注销时,本次登陆所执行的命令将被写入该文件。
所以可以直接清空该文件,下次登录上次保存的命令将消失,清空效果将在下次登陆生效。
su切换用户
PAM认证
PAM认证独立的配置文件位置:
[root@server1 ~]# ls /etc/pam.d/
atd gdm-autologin login postlogin-ac smtp system-auth
chfn gdm-fingerprint other ppp smtp.postfix system-auth-ac
chsh gdm-launch-environment passwd remote sshd systemd-user
config-util gdm-password password-auth runuser sssd-shadowutils vlock
crond gdm-pin password-auth-ac runuser-l su vmtoolsd
cups gdm-smartcard pluto setup sudo xserver
fingerprint-auth ksu polkit-1 smartcard-auth sudo-i
fingerprint-auth-ac liveinst postlogin smartcard-auth-ac su-l
[root@server1 ~]# ls /etc/security/ //安全配置
access.conf console.handlers group.conf namespace.conf opasswd sepermit.conf
chroot.conf console.perms limits.conf namespace.d pam_env.conf time.conf
console.apps console.perms.d limits.d namespace.init pwquality.conf
[root@server1 ~]# grep "bash$" /etc/passwd //查看用户信息
root:x:0:0:root:/root:/bin/bash
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
xwy:x:1000:1000:xwy:/home/xwy:/bin/bash
[xwy@server1 root]$ su - root //切换用户
密码:
上一次登录:一 12月 14 15:54:34 CST 2020pts/0 上
创建用户,做验证
[root@server1 ~]# useradd lisi
[root@server1 ~]# passwd lisi
因为只有知道root密码就可以随意切换是一种危险的事情,需要对其进行控制(授权)
开启PAM认证模块
[root@server1 ~]# vim /etc/pam.d/su
6 auth required pam_wheel.so use_uid
设置安全组wheel,保证添加到安全组的用户才能进行账户的安全切换
[root@server1 ~]# vim /etc/group //查看安全组的位置
11 wheel:x:10:xwy //说明xwy账户默认添加到wheel组
[root@server1 ~]# id xwy
uid=1000(xwy) gid=1000(xwy) 组=1000(xwy),10(wheel)
[root@server1 ~]# id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi)
验证账户xwy与lisi是否能切换root用户
[root@server1 ~]# su - xwy
上一次登录:一 12月 14 16:00:02 CST 2020pts/0 上
[xwy@server1 ~]$ su - root
密码:
上一次登录:一 12月 14 16:00:21 CST 2020pts/0 上
[root@server1 ~]# su - lisi
上一次登录:一 12月 14 16:00:11 CST 2020pts/0 上
[lisi@server1 ~]$ su - root //发现lisi用户不能切换到root用户,因为开启了PAM认证模块
密码:
su: 拒绝权限
[lisi@server1 ~]$ exit
登出
[root@server1 ~]#
若想使lisi能切换到root用户,需要将lisi用户添加到安全组wheel中
[root@server1 ~]# gpasswd -a lisi wheel
正在将用户“lisi”加入到“wheel”组中
[root@server1 ~]# id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi),10(wheel)
[root@server1 ~]# su - lisi
上一次登录:一 12月 14 16:08:27 CST 2020pts/0 上
[lisi@server1 ~]$ su - root
密码:
上一次登录:一 12月 14 16:08:18 CST 2020pts/0 上
最后一次失败的登录:一 12月 14 16:09:10 CST 2020pts/0 上
最有一次成功登录后有 1 次失败的登录尝试。
若想使lisi能切换到root用户,需要将lisi用户移除到安全组wheel中
[root@server1 ~]# gpasswd -d lisi wheel
正在将用户“lisi”从“wheel”组中删除
[root@server1 ~]# id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi)
PAM安全认证流程
控制类型也称做Control Flags,用于PAM验证类型的返回结果。
1、required验证失败时仍然继续,但返回Fail;
2、requisite验证失败时立即结束整个验证过程,返回Fail;
3、sufficien验证成功则立即返回,不再继续,否则忽略结果并继续;
4、optional不用于验证,只显示信息(通常用于session类型)
PAM验证的构成
看某个程序是否支持PAM认证,可以用ls命令
[root@server1 ~]# ls /etc/pam.d | grep su
ksu
su
sudo
sudo-i
su-l
查看su的PAM配置文件
[root@server1 ~]# 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
1、每一行都是一个独立的认证过程;
2、每一行可以区分为三个字段
认证类型,控制类型,PAM模块及其参数
PAM认证类型包括四种:
认证管理(authentication management):接受用户名称和密码,进而对该用户的密码进行认证;
账号管理(account management):检查账户是否被允许登陆系统,账号是否已经过期,账号的登陆是否有时间段的限制等;
密码管理(password management):主要用来修改用户的密码;
会话管理(session management):主要是提供对会话的管理和记账。
PAM认证原理
1、一般遵循的顺序:
Service(服务)——PAM(配置文件)——pam_*.so
2、首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
3、用户访问服务器时,服务器的某一服务程序把用户的请求发送到PAM模块进行认证
4、不同的应用程序所对应的PAM模块是不同的
su命令的安全隐患
1、默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登陆密码,带来安全风险;
2、为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
PAM可插拔式认证模块
1、是一种高效而且灵活便利的用户级别的认证方式;
2、也是当前Linux服务器普遍使用的认证方式。
sudo提权
部分用户的指定提权
[root@server1 ~]# visudo 或 [root@server1 ~]# vim /etc/sudoers
此项验证中,我使用 [root@server1 ~]# vim /etc/sudoers进行测试,验证
创建wangwu用户做验证
[root@server1 ~]# useradd wangwu
[root@server1 ~]# passwd wangwu
[root@server1 ~]# id wangwu //此时wangwu不属于wheel组
uid=1002(wangwu) gid=1002(wangwu) 组=1002(wangwu)
在本地(不使用xshell)以wangwu用户登录,进行测试,验证
[wangwu@server1 ~]$ ifconfig //发现只能查看ip地址,无法修改ip地址
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.11 netmask 255.255.255.0 broadcast 20.0.0.255
wu@server1 ~]$ ifconfig ens33 20.0.0.20
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
上图表示wangwu用户没有在sudoers文件中进行授权,无法使用sudo命令提权。必须要在安全组wheel中
使用安全组中的用户lisi进行登录,进行验证,测试(发现可以修改ip地址)
[lisi@server1 ~]$ id lisi
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi),10(wheel)
[lisi@server1 ~]$ sudo ifconfig ens33 20.0.0.20
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] lisi 的密码:
[lisi@server1 ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.20 netmask 255.0.0.0 broadcast 20.255.255.255
[lisi@server1 ~]$ su - root //切换root用户,给予wangwu用户更换ip的权限
密码:
上一次登录:一 12月 14 16:12:45 CST 2020pts/0 上
[root@server1 ~]# visudo
15 wangwu server1=/sbin/ifconfig (用户 主机名 使用命令)空白处添加该行命令,授予权限
此时,再次让wangwu用户登录,验证授予修改ip权限后是否能修改ip地址
wangwu 的密码:
[wangwu@server1 ~]$ ifconfig //发现ip地址以修改成功
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.10 netmask 255.0.0.0 broadcast 20.255.255.255
附加:
99 %wheel ALL=(ALL) ALL ( 附加:wheel的权限:)
附加:查看命令在哪个目录下
[lisi@server1 ~]$ which ifconfig
/usr/sbin/ifconfig
sudo命令的用途及用法
用途:以其他身份(如root)执行授权的命令
用法:sudo 授权命令
配置sudo授权
libux的visudo的四个ALL分别代表什么?
%wheel ALL=(ALL) ALL
4个ALL代表的含义
(1)、从左到右第一个字段代表的是用户;
(2)、从左到右第二个字段代表的是机器;
(3)、从左到右第三个字段代表的是新用户身份(sun_as_user,如root);
(4)、从左到右第四个字段代表的是命令。
查看sudo操作记录
(1)、需启用Defaults logfile配置;
(2)、默认日志文件:/var/log/sudo
grub管理
可以通过grub菜单来更改grub配置
出现该页面时立刻按e,以下为整个grub菜单,可以任意修改grub的配置
(这样的操作其实并不安全,此时我们可以做一个关于修改管理配置就需要进行授权)
备份两份文件(防止验证失败,导致文件损坏)
[root@server2 ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@server2 ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak //头文件
[root@server2 ~]# grub2-mkpasswd-pbkdf2 (进行哈希的密码加密,生成密文)
输入口令:
Reenter password: (复制is以后的密码(即密文))
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.252A0C0B23B14303233A3C6B76BD44EA3A114E03C3707A69AA9FBF5B6B8F80A3A181CC7A7DFE94492380893CEF97972B2E01D86A5FF52417642D3766398EEADA.6FFB0D48B8CA2BE1A49593E4B9CF0BD04C2C3D36212E282A0702DC3F54559FC8F7E103AC5686EF3D0CF21440F89701535F53D2C0D3554326DC5CB705DFF40210
[root@server2 ~]# vim /etc/grub.d/00_header //最后一行添加以下命令
cat << EOF
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.252A0C0B23B14303233A3C6B76BD44EA3A114E03C3707A69AA9FBF5B6B8F80A3A181CC7A7DFE94492380893CEF97972B2E01D86A5FF52417642D3766398EEADA.6FFB0D48B8CA2BE1A49593E4B9CF0BD04C2C3D36212E282A0702DC3F54559FC8F7E103AC5686EF3D0CF21440F89701535F53D2C0D3554326DC5CB705DFF40210 (root后面接生成的密文)
创建grub中的配置
[root@server2 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //生成以下文件,表示配置成功
/etc/grub.d/00_header: line 361: warning: here-document at line 359 delimited by end-of-file (wanted `EOF')
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-3ceff706aa04429b9ccc70c241e30b45
Found initrd image: /boot/initramfs-0-rescue-3ceff706aa04429b9ccc70c241e30b45.img
done
[root@server2 ~]# init 6 //重启,并进行验证
此时发现,不能直接通过grub菜单进行修改,需要进行身份验证,验证通过后才能修改配置
弱口令
Joth the Ripper,简称JR
1、一款密码分析工具,,支持字典式的暴力破解;
2、通过对shadow文件的口令分析,可以检测密码强度;
3、官方网站:http://www.openwall.com/john/
作用:判断用呼 登录密码的安全,增强系统的安全性
需要用到该软件包:john-1.8.0.tar.gz
将软件包传到/opt目录下,并进行解压
[root@server2 ~]# cd /opt/
[root@server2 opt]# ll
总用量 5324
-rw-r--r--. 1 root root 5450412 12月 14 19:46 john-1.8.0.tar.gz
drwxr-xr-x. 2 root root
[root@server2 opt]#tar zxvf john-1.8.0.tar.gz
[root@server2 opt]# ls
john-1.8.0
[root@server2 opt]# cd john-1.8.0/
[root@server2 john-1.8.0]# ls
doc README(使用说明) run(运行工具,脚本) src(源码包)
[root@server2 john-1.8.0]# cd run/
[root@server2 run]# ls //查看此时未生成能够执行的文件,需要我们自己去配置
ascii.chr digits.chr john.conf lm_ascii.chr mailer makechr password.lst relbench
[root@server2 run]# cd ../
[root@server2 john-1.8.0]# cd src/
[root@server2 src]# ls //查看发现内部是C语言,因为linux内核是c语言开发的
此时需要装编译器:[root@server2 src]# yum install gcc gcc-c++ -y (此时在源码目录中)
进行编译[root@server2 src]# make linux-x86-64
[root@server2 src]# cd ../run/
[root@server2 run]# ls //此时在run目录中发现可执行的脚本(john)
ascii.chr john lm_ascii.chr makechr relbench unique
digits.chr john.conf mailer password.lst unafs unshadow
[root@server2 run]# ./john /etc/passwd /etc/shadow //执行脚本,使其分析passwd shadow(账户与密码文件)(需要等待以后)会筛选出能够登陆的密码,为什么会分析出以下账户密码,是因为run目录下有 password.lst字典,查看该字典发现内部全是密码
Loaded 2 password hashes with 2 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (xwy)
123456 (root)
2g 0:00:00:14 100% 2/3 0.1359g/s 402.3p/s 408.8c/s 408.8C/s 123456..pepper
Use the "--show" option to display all of the cracked passwords reliably
Session completed
网络扫描
rpm -ivh /mnt/Packages/nmap-****.rpm 安装nmap软件包
nmap -sT (tcp连接扫描) 127.0.0.1、192.168.4.0/24\192.168.4.100-200
-sU (UDP扫描) 127.0.0.1、192.168.4.0/24\192.168.4.100-200
-sP (icmp连接扫描) 127.0.0.1、192.168.4.0/24\192.168.4.100-200
-sS (tcp syn连接扫描) 127.0.0.1、192.168.4.0/24\192.168.4.100-200
-p (指定端口扫描) 127.0.0.1、192.168.4.0/24\192.168.4.100-200
nmap扫描工具
需要安装以下工具
[root@server2 ~]# yum install nmap -y
查看本地开放了哪些端口服务(对外提供哪些可以被连接的端口)
[root@server2 ~]# nmap -sT 127.0.0.1 (T:tcp的服务)
Starting Nmap 6.40 ( http://nmap.org ) at 2020-12-15 20:59 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00060s 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.06 seconds
安装并开启一个网站服务的端口进行验证(端口号80)
[root@server2 ~]# yum install httpd -y
[root@server2 ~]# systemctl restart httpd.service
[root@server2 ~]# nmap -sT 127.0.0.1 //此时会监测到有80号端口产生
Starting Nmap 6.40 ( http://nmap.org ) at 2020-12-15 21:02 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00044s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
631/tcp open ipp
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
[root@server2 ~]# nmap -sU 127.0.0.1 (U:udp服务)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000085s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
111/udp open rpcbind
657/udp open|filtered rmc
5353/udp open|filtered zeroconf
Nmap done: 1 IP address (1 host up) scanned in 48.88 seconds
探测网段的开启的服务
[root@server2 ~]# nmap -sP 192.168.100.0/24
探测其他ip开启的服务
Nmap scan report for 192.168.1.1
Host is up (0.0033s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
1900/tcp open upnp
Nmap done: 1 IP address (1 host up) scanned in 4.46 seconds