Linux 系统安全和相关应用(理论加实操,干货满满!)

一、 账号安全管理

用户账号是计算机使用者的身份凭证或标识,每个要访问系统资源的人,必须凭借其用 户账号才能进入计算机。在 Linux 系统中,提供了多种机制来确保用户账号的正当、安全使用。

1.1基本安全措施

1.1.1系统账号清除

在 Linux 系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户 root 之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允许登录的,因此也称为非登录用户账号。
常见的非登录用户账号包括 bin、daemon、adm、lp、mail 等。为了确保系统安全,这些用户账号的登录 Shell 通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动, 如下所示。

[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

锁定长期不使用的账户

[root@localhost ~]# id zhangsan                    //查看用户zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(zhangsan)
[root@localhost ~]# usermod -L zhangsan                 //锁定账号
[root@localhost ~]# passwd -S zhangsan                  //查看账号状态
zhangsan LK 2019-11-14 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U zhangsan                  //解锁账号
[root@localhost ~]# passwd -S zhangsan
zhangsan PS 2019-11-14 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

删除无用的账号

[root@localhost ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(zhangsan)
[root@localhost ~]# userdel zhangsan                  //删除账号
[root@localhost ~]# id zhangsan
id: zhangsan: no such user

锁定账号文件passwd、shadow

[root@localhost ~]# useradd zhangsan           //目前为操作锁定,可正常创建账户
[root@localhost ~]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) 组=1001(zhangsan)
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow         //锁定文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow           //查看状态
----i----------- /etc/passwd                                   //i  为锁定状态
----i----------- /etc/shadow                                  //i  为锁定状态
[root@localhost ~]# useradd lisi                             //尝试创建账号
useradd:无法打开 /etc/passwd                               //无法打开创建
[root@localhost ~]# id lisi                            //未创建成功
id: lisi: no such user
[root@localhost ~]# userdel -r zhangsan                      //锁定状态无法删除账号
userdel:无法打开 /etc/passwd
[root@localhost ~]# passwd zhangsan                     //锁定状态无法更改账号密码
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd: 鉴定令牌操作错误

[root@localhost ~]# chattr -i /etc/passwd /etc/shadow         //解锁文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow           //查看为解锁状态
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。                      //解锁后可以更改密码
[root@localhost ~]# userdel -r zhangsan                //接所有可以删除账号
[root@localhost ~]# id zhangsan
id: zhangsan: no such user

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

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

1.1.2密码安全控制

设置密码有效期:

已创建的用户设置密码有效期

 [root@localhost ~]# chage -M 30 lisi

未创建、准备创建的用户设置密码有效期 vim/etc/login.defs

[root@localhost ~]# vim/etc/login.defs

在这里插入图片描述
在这里插入图片描述

配置文件更改后,仅对后期创建的用户生效,不会影响到先前已创建的用户密码有效期

要求用户下次登陆时修改密码:将有效期设置为0,强制在下次登陆时修改密码(不建议使用,更改的密码不允许使用连续字母及数字)

[root@localhost ~]# chage -d 0 lisi

1.1.3命令历史、自动注销

减少记录的命令条数

[root@localhost ~]#vim /etc/profile
HISTSIZE=200 (默认是1000)
[root@localhost ~]#source vim /etc/profile

在这里插入图片描述

在这里插入图片描述
注销时自动清空命令历史

[root@localhost ~]#vim ~/.bash_logout
history -c
clear

在这里插入图片描述
闲置600秒后自动注销

[root@localhost ~]#vim ~/.bash_profile            //进入配置文件
…………
export TMOUT=60                                 //添加命令

在这里插入图片描述

在这里插入图片描述

1.2用户切换与提权

Linux 系统为我们提供了 su、sudo 两种命令,其中 su 命令主要用来切换用户,而 sudo
命令用来提升执行权限

1.2.1.su 命令 —— 切换用户

格式:su - 目标用户

1)su 命令用法

使用 su 命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。当然,切换时需要对目标用户的密码进行验证(从 root 用户切换为其他用户时除外)。例如,当前登录的用户为 jerry,若要切换为 root 用户,可以执行以下操作。

[jerry@localhost ~]$ su - root
密码:	//输入用户root 的口令
[root@localhost ~]#	//验证成功后获得root 权限

上述命令操作中,选项“-”等同于“–login”或“-l”,表示切换用户后进入目标用户的登录Shell 环境,若缺少此选项则仅切换身份、不切换用户环境。对于切换为 root 用户的情况,“root”可以省略。
默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令的用户添加到 wheel 组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。

[root@localhost ~]# gpasswd -a tsengyia wheel	//添加授权用户tsengyia
正在将用户“tsengyia”加入到“wheel”组中
[root@localhost ~]# grep wheel /etc/group	//确认wheel 组成员
wheel:x:10:tsengyia
[root@localhost ~]# vi /etc/pam.d/su
#%PAM-1.0
auth	sufficient pam_rootok.so
…… //省略部分内容
auth	required	pam_wheel.so use_uid	//去掉此行开头的 # 号
…… //省略部分内容

启用 pam_wheel 认证以后,未加入到 wheel 组内的其他用户将无法使用 su 命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。

[jerry@localhost ~]$ su – root	//尝试切换为root
密码:
su: 拒绝权限
[jerry@localhost ~]$	//切换失败,仍为原用户

使用su 命令切换用户的操作将会记录到安全日志/var/log/secure 文件中,可以根据需要进行查看。
2)PAM 安全认证
PAM(Pluggable Authentication Modules),是 Linux 系统可插拔认证模块,是一种高效而且灵活便利的用户级别的认证方式,它也是当前 Linux 服务器普遍使用的认证方式 。
◆ PAM 认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so;
◆ PAM 认证首先要确定哪一项服务,然后加载相应的 PAM 的配置文件(位于/etc/pam.d 下),最后调用认证文件(位于/lib/security 下)进行安全认证;
◆ 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到 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):主要是提供对会话的管理和记账。
控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail 3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续4)optional 不用于验证,只是显示信息(通常用于 session 类型)
在这里插入图片描述

1.2.2.sudo 命令 —— 提升执行权限

sudo命令的用途及用法

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

用法:

sudo  授权命令

配置sudo授权

visudo 或者 vi /etc/sudoers
记录格式:用户 主机名列表=命令程序列表
在这里插入图片描述
% 代表设定的组,所有用户具备的权限,%wheel代表wheel组所有用户具备的权限

jerry 用户 localhost 主机名 命令程序列表 绝对路径

Cmnd_Alias 固定格式 PK… (自定义名字) /bin/rpm……具备权限

[lisi@localhost ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
…………省略部分内容
[lisi@localhost root]$ sudo ifconfig ens33 10.10.10.10    //因为并没有为lisi添加权限,所以提权失败,无法更改ip
[sudo] lisi 的密码:
lisi 不在 sudoers 文件中。此事将被报告。
[root@localhost ~]# visudo            //进入添加权限

进入后为lisi添加权限:
在这里插入图片描述

[lisi@localhost ~]$ sudo -l                   //查看lisi可执行权限
[sudo] lisi 的密码:
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY
    HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG
    LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
    LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 lisi 可以在 localhost 上运行以下命令:
    (root) /sbin/ifconfig

[lisi@localhost ~]$ sudo ifconfig ens33 10.10.10.10          //提权修改ip地址
[lisi@localhost ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.10.10  netmask 255.0.0.0  broadcast 10.255.255.255
………省略部分内容


[lisi@localhost ~]$ yum install httpd -y       //仅开启了ifconfig权限,无法操作磁盘管理
已加载插件:fastestmirror, langpacks
您需要 root 权限执行此命令。
[lisi@localhost ~]$ fdisk -l         
fdisk: 打不开 /dev/sda: 权限不够
fdisk: 打不开 /dev/sdb: 权限不够
fdisk: 打不开 /dev/sr0: 权限不够

查看sudo操作记录:

◆ 需启用Defaults logfile配置

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

[lisi@localhost ~]$ visudo
…………
Defaults logfile=”/var/log/sudo“

◆ 查看:tail /var/log/sudo

[lisi@localhost ~]$ visudo
…………
Defaults logfile="/var/log/sudo"                //启用Defaults logfile配置
lisi loaclhost=/sbin/ifconfig
[lisi@localhost ~]$ sudo ifconfig ens33 30.30.30.30     //提权更改ip地址
[root@localhost ~]# tail /var/log/sudo                 //查看日志记录
Nov 14 19:19:10 : lisi : 3 incorrect password attempts ; TTY=pts/2 ;
    PWD=/home/lisi ; USER=root ; COMMAND=/sbin/ifconfig ens33 30.30.30.30
Nov 14 19:19:47 : lisi : TTY=pts/2 ; PWD=/home/lisi ; USER=root ;
    COMMAND=/sbin/ifconfig ens33 30.30.30.30

二、系统引导和登录控制

◆ 在互联网环境中,大部分服务器是通过远程登录的方式来进行管理的,而本地引导和终端登录过程往往容易被忽视,从而留下安全隐患。特别是当服务器所在的机房环境缺乏严格、 安全的管控制度时,如何防止其他用户的非授权介入就成为必须重视的问题。

2.1开关机安全控制

◆ 对于服务器主机,其物理环境的安全防护是非常重要的,不仅要保持机箱完好、机柜锁闭,还要严格控制机房的人员进出、硬件设备的现场接触等过程。在开关机安全控制方面, 除了要做好物理安全防护以外,还要做好系统本身的一些安全措施。

2.1.1调整BIOS引导设置

(1)将第一优先引导设备(First Boot Device)设为当前系统所在磁盘。
(2)禁止从其他设备(如光盘、U 盘、网络等)引导系统,对应的项设为“Disabled”。
(3)将 BIOS 的安全级别改为“setup”,并设置好管理密码,以防止未授权的修改。

2.1.2.限制更改 GRUB 引导参数

修改grub2-mkpasswd-pbkdf2生成密钥

[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    //先做备份,养成良好习惯
[root@localhost ~]# grub2-mkpasswd-pbkdf2
输入口令:
Reenter password: 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.AAE465CD073BAE7E3874448869114FA51381F1E626BE1B47A486D2933AE78425257688006DB750E959D43D490ADDD3DD75A7189A205AC2CCA85342E50A9D080A.966FAB9C2B29678665BA2E7723A3CCDE11A00D75B6E47B9A6BB99D3487DEF8D14A3ECB2FFA8512278902E9D2C85AD3C5B930E8E78770011D1D44C50A882BCB02              //password is 后面内后为生成的密钥

修改/etc/grub.d/00_header文件中,添加密码记录
在这里插入图片描述
生成新的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-314397859c974c4aafdd0762e61b9f15
Found initrd image: /boot/initramfs-0-rescue-314397859c974c4aafdd0762e61b9f15.img
done
[root@localhost ~]# init 6          //重启

在这里插入图片描述
配置完成后,重新开机进入GRUB菜单时,按e键将无法直接修改引导参数,需要输入用户及密码才能编辑指定的引导参数

2.2终端及登录控制

2.2.1限制root只在安全终端的登陆

◆ 安全终端配置:/etc/securetty
禁止普通用户登陆

◆ 建立/etc/nologin文件

◆ 删除/etc/nologin文件或重启后即可恢复正常
在这里插入图片描述

2.3 弱口令检测、端口扫描

2.3.1弱口令检测——JR(John the Ripper)

◆ 一款密码分析工具,支持字典式的暴力破解
◆ 通过对shadow文件的口令分析,可以检测密码强度
◆ 官方网站:http://www.openwall.com/john/
实验:
首先需要有一个弱口令包并挂载到系统中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.2网络扫描— NMAP

◆ 一款网络扫描、安全检测工具
◆ 官方网站:http://nmap.org/
◆ 可以从Centos镜像中安装nmap包

NMAP的扫描语法

nmap [扫描类型] [选项] <扫描目标…>

常用的扫描类型
-sP:ICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-sT:TCP连接扫描:这是完整的TCP扫描方式,用来建立一个TCP连接, 如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sU: UDP扫描:探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sS: TCP SYN扫描(半开扫描):只向目标发出SYN数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sF:TCP FIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST 数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的 TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-P0:跳过ping检测:这种方式认为所有的目标主机是存活的,当对方不响 应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。
实验:
检查是否有nmap包,安装nmap
1、针对本机进行扫描,检查开放了哪些常用的TCP端口、UDP端口

[root@localhost ~]# nmap -sT 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-15 11:50 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00035s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh               
25/tcp  open  smtp
80/tcp  open  http                 //安装httpd  打开80端口
111/tcp open  rpcbind
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
[root@localhost ~]# nmap -sU 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-15 11:50 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000046s latency).
Not shown: 997 closed ports
PORT     STATE         SERVICE
68/udp   open|filtered dhcpc
111/udp  open          rpcbind
5353/udp open|filtered zeroconf

Nmap done: 1 IP address (1 host up) scanned in 51.51 seconds
[root@localhost ~]# netstat -ntap |grep 80        //过滤查看80端口
tcp        0      0 192.168.17.129:38952    192.168.10.180:445      ESTABLISHED -                   
tcp6       0      0 :::80                   :::*                    LISTEN      52184/httpd   

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

2、快速检测192.168.17.0/24网段中有哪些存活主机(能ping通)

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.17.129  netmask 255.255.255.0  broadcast 192.168.17.255
        …………省略部分内容
[root@localhost ~]# nmap -sP 192.168.17.0/24

[root@localhost ~]# nmap -sP 192.168.17.0/24

Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-15 12:07 CST
Nmap scan report for 192.168.17.1
Host is up (0.0010s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.17.2
Host is up (0.000048s latency).
MAC Address: 00:50:56:FF:5A:DB (VMware)
Nmap scan report for 192.168.17.128                  //另一台IP
Host is up (0.000098s latency).
MAC Address: 00:0C:29:70:C7:ED (VMware)
Nmap scan report for 192.168.17.254
Host is up (0.000066s latency).
MAC Address: 00:50:56:F2:13:2A (VMware)
Nmap scan report for 192.168.17.129                       //本机IP
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 1.88 seconds

[root@localhost ~]# ping 192.168.17.128          //ping 192.168.17.128
PING 192.168.17.128 (192.168.17.128) 56(84) bytes of data.
64 bytes from 192.168.17.128: icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from 192.168.17.128: icmp_seq=2 ttl=64 time=0.193 ms
64 bytes from 192.168.17.128: icmp_seq=3 ttl=64 time=0.213 ms
^C
--- 192.168.17.128 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.193/0.201/0.213/0.018 ms

探测工具,查看对方是否在线,开了哪些tcp udp端口

总结

◆ 系统账号清理、密码安全控制、命令历史清理、自动注销
◆ 使用su命令,可以切换为其他用户身份,并拥有该用户的所有权限。切换时以目标用户的密码进行验证
◆ 使用sudo命令,可以以其他用户的权限执行已授权的命令,初次执行时以使用者自己的密码进行验证
◆ PAM(Pluggable Authentication Modules),是Linux系统可插拔认证模块
◆ GRUB菜单设置密码,可以防止未经授权的修改
◆ 对于远程管理的Linux服务器,可减少开放的本地终端数量
◆ John the Ripper 是一款密码破解工具,可用来检测系统账号的密码安全性
◆ NMAP是一款端口扫描类工具,可用来检查目标主机、网络所开放的端口/服务等信息

猜你喜欢

转载自blog.csdn.net/weixin_47219818/article/details/107107988
今日推荐