系统安全控制
系统账号清理
将非登录用户的shell设为/sbin/nologin
usermod -s /sbin/nologin
锁定长期不使用的账号
usermod -L 用户名 passwd -l 用户名
passwd -S 用户名
删除无用的账户
userdel [-r] 用户名 ###删除连带家目录-r
锁定账户文件passwd、shadow(锁定passwd文件就不能再更改添加用户等相关的操作)
chattr +i /etc/passwd /etc/shadow ###锁定文件
lsattr /etc/passwd /etc/shadow ###查看状态
chattr -i /etc/passwd /etc/shadow ###解锁文件
chattr +i /etc/passwd锁定用户目录
userdel li 无法删除用户
chattr +i /etc/shadow 锁定密码文件并修改密码
lsattr -i 解锁
账号密码安全控制
设置密码有效期
要求用户下次登录是修改密码
vi /etc/login.defs ###修改密码配置文件适用于新建用户
PASS_MAX_DAYS XX ###打开login.defs文件后修改密码有效期时间,xx表示天数
chage -M 30 用户名 ###适用于已有用户
cat /etc/shadow |grep lisi
chage -d 0 用户名 ###强制在下次登录是更改密码
###shadow文件中的第三个字段被自改为0
cat /etc/shadow |grep zhangsan
修改login.defs文件
命令历史限制
减少记录的命令条数(100-200历史信息足够日常使用)
可以使用ctrl+r
,然后敲关键字,联想之前的命令,要是当前联想的不对,可以继续按ctrl+r
翻滚命令
histor也可以查找到历史操作的命令
history显示历史命令以后可以加上
!+序号
可以再次执行命令
修改
vim /etc/profile
文件可以设置历史命令条数
登录时自动清空历史命令
history-c
临时清空当前系统的所有历史命令(并不能永久的清空)
为什么临时删除历史命令,重启以后还能找到?
系统中常用的四个配置文件
对所有的用户都有效
/etc/profile //系统环境变量配置文件(设置环境变量)
开机时用户首次登录会自动载入(只会加载1次)如果想重新加载profile可以使用source .
/etc/bashrc //
用户在切换 shell 环境时也会自动加载此文件中的配置
只针对当前用户有效
~/.bash_profile
~/.bashrc(切换环境时也会自动加载)
如果只想第一次次登录清空一次历史命令就把文件写入
.bash_profile
写入以后保存信息
此时检查历史命令还是存在的
重启以后历史命令就被自动的删除了
如果想切换一次 shell 环境就清空一次历史命令就写入
bashcr
终端自动注销
显示100秒后会自动注销
编辑30秒退出终端
su命令
用途及用法
用途:切换用户
用法:su -目标用户
su
有两种用法:
1.root超级管理员用户切换用户不要登录密码可以直接操作
普通用户切换到超级管理员用户必须输入密码验证才能使用root用户
2.加
-
让登录的用户加载shell环境
不加
-
默认登录的用户还是超级管理员用户
用su命令切换用户
将允许使用su命令的用户加入wheel
组
为什么要使用wheel
组成员?
也就是说如果你不是 wheel 组成员,那就没有 root 身上任何的特权。 也因为这样,使用 wheel 组成员用户的话,会尽量减少对系统 “摧毁性” 破坏的概率和风险。 如今大多数的 Linux 发行版本中,仍然保留了 wheel 这个组,虽然它已经不像当初设计出来的那样必要了,但是有些老玩家还是忠于这种旧式经典风格的,所以他们经常还是依旧让 wheel 组发挥着以往的作用。
添加组
/etc/pam.d/su
开启pam
服务
只要不在
wheel
组中有密码也无法登录
只要在
wheel
组中有密码就可以登录root
详情查看注释
pam_wheel
认证模块
PAM
的全称为“可插拔认证模块
(Pluggable Authentication Modules)”。设计的初衷是将不同的底层认证机制集中到一个高层次的API中,从而省去开发人员自己去设计和实现各种繁杂的认证机制的麻烦。如果没有 PAM ,认证功能只能写在各个应用程序中,一旦要修改某个认证方法,开发人员可能不得不重写程序,然后重新编译程序并安装;有了 PAM ,认证的工作都交给 PAM ,程序主体便可以不再关注认证问题了:“ PAM 允许你进来,那你就进来吧。”
PAM架构
pam 认证原理
PAM 认证一般遵循这样的顺序:
Service(服务) →PAM( 配置文件) →pam_*.so。
PAM 认证首先要确定那一项服务,然后加载相应的PAM的配置文件( 位于/etc/pam.d 下)
最后调用认证文件( 位于/lib/security 下) 进行安全认证。
pam认证过程
1.使用者执行/usr/bin/passwd程序,并输入密码。
2.passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的PAM 相关设定文件,
这个设定文件一般是在/etc/pam.d/里边的与程序同名的文件 ,即PAM 会搜寻/etc/pam.d/passwd这个设置文件
3.经由/etc/pam.d/passwd 设定文件的数据,取用PAM 所提供的相关模块来进行验证
4.将验证结果回传给passwd 这个程序,而passwd 这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
pam认证的构成
要查看某个程序是否支持pamr认证
,可以使用ls命令
查看
su
的pam
配置文件
每一行都是一个独立的认证过程
每一行可以区分为三个字段
认证类型
控制类型
pam模块及其参数
pam验证控制类型
验证控制类型也可以称做Control Flags,用于PAM验证类型的返回结果,具体有以下四种:
1、required:验证失败时仍然继续,但返回Fail(用户不会知道哪里失败)。
2、requisite:验证失败则立即结束整个验证过程,返回Fail。
3、sufficient:验证成功则立即返回,不再继续,否则忽略结果并继续。
4、optional:无论验证结果如何,均不会影响(通常用于session类型)。
sudo
提升权限
su
命令的缺点
在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用 su 切换为超级用户。 但是使用su的缺点之一在于必须要先告知超级用户的密码。 sudo使一般用户不需要知道超级用户的密码即可获得权限。
sudo命令
命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令
用法:sudo 授权命令
配置sudo
授权
visudo
或者`Vi /etc/sudoers
语法格式
用户 主机名=命令程序列表
用户 主机名=(用户)命令程序列表
用户:直接授权指定的用户名,或者采用(%组名)的形式(授权一个组的所有用户)
主机名:使用此规则的主机名,没有配置过主机名时可用localhost
有配过主机名则用实际的主机名,ALL
则代表所有主机
(用户):用户能够以何种身份来执行命令,此项可省略,缺省时以root
用户的身份来执行命令
命令程序列表:允许授权的用户通过sudo
方式执行的特权命令,需填写程序的完整路径,多个命令之间以,
号进行分割,ALL
则代表系统中的所有命令
举例: Tom ALL=/sbin/ifconfig
wang localhost=/sbin/*,!/sbin/reboot/,sbin/paweroff (通配符 * 代表所有 取反符号!表示排除
如果不再wheel
Z组里面也没有权限就无法使用一些命令
直接修改用户权限
更改权限以后就可以使用命令
启动sudo
操作日志
切换别的用户操作
日志会收集用户操作的所有细节
普通用户时无法查看日志的 没有权限
普通用户想知道自己可以使用的权限可以使用
sudo -l
来查看可用的权限
开关机安全控制
调整BIOS
引导设置
1.将第一引导设备设置为当前系统所在硬盘
2.禁止从其它设备(光盘,U盘,网络)引导系统
3.将安全级别设为setuo
并设置管理员密码
GRUB
限制
使用grub2-mkpasswd-pbkdf2
生成密钥
修改/etc/grub.d/00_header
文件,添加密钥记录
生成新的grub.cfg
配置文件
以pbkdf2
加密方式生成一个密码
/etc/grub.d
查看一下配置文件
进入配置文件添加一开始设置密码生成的密钥
复制一分文件出错了直接复制回源文件
使用
grub2-mkconfig -o
重新生成grub
配置文件
进入菜单界面按
E
进入后输入密码即可
终端登录安全控制
限制root只在安全终端登录
安全中端配置:/etc/securetty
需要限制哪一个运行级别直接加#
号注释吊即可
限制普通用户登录(可以防止维修时有人登录)
如果需要允许普通用户登录直接删掉建立的文件即可
系统弱口令监测
JR
简介 一款免费、开源的暴力密码破解器,它有多平台版本,支持目前大多数的加密算法,如DES、MD4、MD5等。该软件破解密码方式简单而粗暴,理论上只要时间上面允许,该软件可以破译绝大多数用户密码。John the Ripper免费的开源软件,支持目前大多数的加密算法,如DES、MD4、MD5等。它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和O…
安装JR工具
- 安装方法
make clean系统类型
- 主程序文件为
john
检测弱口令账号
- 获得Linux/Unix服务器的shadow文件
- 执行john程序,将shadow文件作为参数
密码文件的暴力破解
- 准备好密码字典文件,默认为password.lst
- 执行john程序,结合--wordlist=字典文件
直接安装软件即可
网络端口扫描
网络扫描——NMAP
- NMAP是一个强大的端口扫描类安全评测工具,支持 ping 扫描、多端口检测等多种技术。 -官方网站Nmap: the Network Mapper - Free Security Scanner
- CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
- 安装NMAP软件包
[root@localhost ~]# rpm -qa|grep nmap //查看nmap
[root@localhost ~]# yum install -y nmap //安装nmap
nmap命令常用格式
nmap [扫描类型] [选项] <扫描目标>
nmap命令常用的选项和扫描类型
扫描类型与选项 | 具体作用 |
---|---|
-P | 指定扫描的端口 |
-n | 禁用反向DNS解析(以加快扫描速度) |
-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通而放弃扫描。 |
[root@localhost run]#netstat -nltp //查看正处于监听状态的TCP协议的PID号与进程名
[root@localhost run]#netstat -natp //查看正在运行的使用TCP协议的网络状态信息
[root@localhost run]#netstat -naup //查看正在运行的使用UDP协议的网络状态信息
例子:
# 分别查看本机开放的TCP端口、UDP端口
[root@localhost ~]# nmap -sT 127.0.0.1
[root@localhost ~]# nmap -sU 127.0.0.1
# 检测192.168.80.0/24网段有哪些主机提供HTTP服务
[root@localhost ~]# nmap -p 80 192.168.80.0/24
[root@localhost ~]# nmap -p 80 192.168.91.100/24
# 检测192.168.80.0/24网段有哪些存活主机
[root@localhost ~]# nmap -n -sP 192.168.80.0/24
netstat
该 netstat 的命令用来显示网络状态
传统上,它用于问题确定而不是性能测量。但是,netstat 命令可用于确定网络上的流量,以确定性能问题是否是由于网络拥塞引起的。
在 netstat 的关于所配置的网络接口,诸如以下的流量命令显示信息:
- 与所有sockets关联的任何协议控制块的地址以及所有sockets的状态
- 通信子系统中接收,传输和丢弃的数据包数
- 每个接口的累积统计信息
- 路线及其状态
命令格式:
netstat [选项]
netstat
命令常用选项
选项 | 作用 |
---|---|
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。 |
-n | 拒绝显示别名,以数字的形式显示相关的主机地址、端口等信息。 |
-t | 查看TCP协议相关的信息 |
-u | 显示UDP协议相关的信息。 |
-p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
-r | 显示路由表信息 |
-l | 显示处于监听状态(Listen)的网络连接及端口信息。 |
常用的搭配:
netstat -a //列出所有端口
netstat -at //列出所有TCP端口
netstat -au //列出所有UDP端口
netstat -ax //列出所有unix端口
netstat -lt //列出处于监听状态的TCP端口
netstat -tnlp //直接使用ip地址列出所有处于监听状态的TCP端口,且加上程序名
[root@localhost run]#netstat -lt //列出处于监听状态的TCP端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 localhost.locald:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 0 0 localhost:6011 0.0.0.0:* LISTEN
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN
tcp6 0 0 localhost:6011 [::]:* LISTEN
[root@localhost run]#netstat -tnlp //直接使用ip地址列出所有处于监听状态的TCP端口,且加上程序名
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1445/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1224/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1225/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1381/master
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 3545/sshd: root@pts
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 4473/sshd: root@pts
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1224/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1225/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1381/master
tcp6 0 0 ::1:6010 :::* LISTEN 3545/sshd: root@pts
tcp6 0 0 ::1:6011 :::* LISTEN 4473/sshd: root@pts
[root@localhost run]#netstat -at //列出所有TCP端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 localhost.locald:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 localhos:x11-ssh-offset 0.0.0.0:* LISTEN
tcp 0 0 localhost:6011 0.0.0.0:* LISTEN
tcp 0 0 localhost.localdoma:ssh 192.168.85.1:55533 ESTABLISHED
tcp 0 52 localhost.localdoma:ssh 192.168.85.1:49317 ESTABLISHED
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 localhos:x11-ssh-offset [::]:* LISTEN
tcp6 0 0 localhost:6011 [::]:* LISTEN