文章目录
- 系统安全及应用
- 一、账号安全基本措施
- 1、系统账号清理
- 1.1 将用户设置为无法登录
- 1.2 锁定长期不使用的账号
- 1.3 删除无用的账户
- 1.4 清空一个账号密码
- 1.5 锁定账户文件passwd、shadow
- 2、密码安全控制
- 设置密码有效期
- 3、命令历史限制
- 3.1 减少命令记录条数
- 3.2 登录时自动清空历史命令
- 4、终端自动注销
- 二、使用su命令切换用户
- 1、切换用户
- 2、密码验证
- 3、限制使用su命令的用户
- 三、Linux中的PAM安全认证
- 1、su命令的安全隐患
- 2、PAM (Pluggable Authentication Modules)可插拔式认证模块
- 3、PAM相关文件夹
- 3、PAM认证原理
- 4、PAM认证的构成
- 5、PAM安全认证流程
- 6、limit
- ulimit命令(修改限制的实现方式)
- 四、使用sudo机制提升权限
- 1、sudo命令的特性
- 2、配置sudo授权
- 3、语法格式
- 4、设置别名
- 5、密码验证
- 6、查看sudo操作记录
- 7、查询授权的sudo操作
- 五、系统引导和登录控制
- 1、开关机安全控制
- 1.1 调整BIOS引导设置
- 1.2 GRUB限制
- 2、终端登录安全控制
- 2.1 限制root只在安全终端登录
- 2.2 禁止普通用户登录
- 六、弱口令检测
- 1、暴力破解工具-JR
- 2、安装JR工具
- 3、检测弱口令账号
- 4、密码文件的暴力破解
- 5、模拟暴破步骤
- 七、端口扫描
- 1、网络扫描工具-NMAP
- 2、安装NMAP软件包
- 3、nmap命令常用的选项和扫描类型
- 4、常规检测方式:netstat
- 5、netstat命令常用选项
系统安全及应用
一、账号安全基本措施
1、系统账号清理
1.1 将用户设置为无法登录
usermod -s /sbin/nologin #将非登录用户的Shell设为/sbin/nologin
1.2 锁定长期不使用的账号
usermod -L 用户名 #锁定用户账户passwd -l 用户名 #锁定账户密码passwd -S 用户名 #查看用户状态
1.3 删除无用的账户
userdel -r 用户名 #删除用户及其宿主目录
1.4 清空一个账号密码
passwd -d 用户名 #清空账户密码
1.5 锁定账户文件passwd、shadow
chattr +i /etc/passwd /etc/shadow #锁定文件lsattr /etc/passwd /etc/shadow #查看文件状态chattr -i /etc/passwd /etc/shadow #解锁文件
2、密码安全控制
设置密码有效期
-
对于新建用户,可以修改 /etc/login.defs 文件里的内容来设置密码规则
vim /etc/login.defs
- 对于已有用户可以使用chage命令
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码
-M:密码保持有效的最大天数
-w:用户密码到期前,提前收到警告信息的天数
-E:帐号到期的日期。过了这天,此帐号将不可用
-d:上一次更改的日期
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期
3、命令历史限制
3.1 减少命令记录条数
- 概述: /etc/profile 是系统全局变量配置文件,可以通过系统或者执行 source /etc/profile命令使文件被刷新重载
vim /etc/profile #编剧全局变量配置文件export HISTSIZE=x #输入需要的命令条数source /etc/profile #刷新重载
3.2 登录时自动清空历史命令
-
概述:~/.bashrc文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行
-
vim .bash_logout #退出后清除 echo " " >~/.bash_history #(一定要加空格)vim ~/.bashrc #开机后清除(自己对自己生效) echo " " > ~/.bashrc_history
4、终端自动注销
- 限制600秒后自动注销
vi /etc/profile #(对所有用户生效)export TMOUT=600 #设置超过600秒后自动退出登录source /etc/profile #刷新重载
二、使用su命令切换用户
1、切换用户
su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
- su 目标用户:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
- su - 目标用户:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
2、密码验证
- root ->任意用户,不验证密码
- 普通用户->其他用户,验证目标用户密码
su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
3、限制使用su命令的用户
- 将允许使用su命令的用户加入wheel组
- 在 /etc/pam.d/su 文件中设置禁止用户使用su命令
格式:vim /etc/pam.d/su
注:①、以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户使用su命令进行切换的
②、两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码
(pam_rootok.so模块的主要作用是使uid为0的用户,即 超级管理员用户能够直接通过认证而不用输入密码)
③、如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令。
④、如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
三、Linux中的PAM安全认证
1、su命令的安全隐患
- 默认情况下,任何用户都允许使用 su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
- 为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
2、PAM (Pluggable Authentication Modules)可插拔式认证模块
- 是一种高效而且灵活的用户级别的认证方式
- 也是当前Linux服务器普遍使用的认证方式
3、PAM相关文件夹
- /usr/lib64/security :存放功能模块
- /etc/pam.d/ :配置文件
- /etc/security :复杂的配置文件
3、PAM认证原理
当用户来访问某一程序的时候,如果这个程序启用了pam模块,会先去读取配置文件,然后按照配置文件调用模块,进行操作。
- PAM认证一般遵循的顺序:Service(服务)–>PAM(配置文件)–>pam_*.so
- PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
- 不同的应用程序所对应的PAM模块是不同的
4、PAM认证的构成
- 查看某个程序是否支持PAM认证,可以用ls命令
- 格式:ls /etc/pam.d | grep su
- 查看su的PAM配置文件:cat /etc/pam.d/su
5、PAM安全认证流程
控制类型也称作Control Flags,用于PAM验证类型的返回结果
- required:一票否决,如果失败,最后一定会失败,但是会继续验证
- requisite:一票否决,如果失败,会立即结束验证,反馈失败
- sufficient:验证成功则立即返回,不再继续,否则忽略结果并继续
- optional:不用于验证,只显示信息(通常用于session类型)
6、limit
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间
ulimit命令(修改限制的实现方式)
ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。
ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。
ulimit只影响shell进程及其子进程,用户登出后失效。
可以在profile中加入ulimit的设置,变相的做到永久生效
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制ab -c1025 -n 2000 http://192.168.10.11/ #使用压力测试工具进行测试 打开的文件数vim /etc/security/limits.conf #永久修改不用重启(软硬一起设置可以直接使用-)
四、使用sudo机制提升权限
1、sudo命令的特性
- sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
- sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
- sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
- sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
2、配置sudo授权
- visudo或vi /etc/sudoers #此文件的默认权限为440,保存退出时必须执行“wq!”,强制保存退出
3、语法格式
- 用户 主机名=命令程序列表
- 用户 主机名=(用户) 命令程序列表
-
用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
-
主机名:使用此规则的主机名。没配置过主机名时可用localhost(默认主机名),有配过主机名则用实际的主机名,ALL则代表所有主机
-
(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
-
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分割。ALL则代表系统中的所有命令
可使用通配符“ * ”表示所有,取反符号“!”表示排除
例如:Jerry localhost=/sbin/*,!/sbin/poweroff
表示jerry用户操作localhost主机可使用sbin目录下的除poweroff以外的所有命令
注:Jerry仍可使用init、shutdown等命令执行关机操作,因此限制命令需做到全面无漏,否则限制影响十分有限。
4、设置别名
别名格式:必须大写字母,数字可以使用但是不能放在开头
使用关键字User_Alias(用户)、Runas_Alias(代表用户)、Host_Alias(登录主机)、Cmds_Alias(命令)来进行设置别名
User_Alias USERS=Tom,Jerry,MikeHost_Alias HOSTS=localhost,bogonCmnd_Alias CMDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdelUSERS HOST=CMDSroot ALL=(ALL) ALL
用户 主机名ip= 命令
5、密码验证
-
正常情况下,第一次使用sudo命令需输入密码验证,有效期为五分钟,过期后使用sudo需再次输入密码验证。
-
可以设置特定用户无需密码验证
Mike ALL=(ROOT)NOPASSWD:/bin/kill,/usr/bin/killall
-
也可设置组用户无需密码验证
%wheel ALL=NOPASSWD:ALL
-
以及所有用户无需密码验证
USERS HOSTS=NOPASSWD:CMDS
6、查看sudo操作记录
- 需启用Defaults logfile配置
/var/log/sudo #默认日志文件visudo #进入sudo配置文件Defaults logfile="/var/log/sudo" #启动Defaults logfiletail /var/log/sudo #查看sudo末尾10行记录
7、查询授权的sudo操作
- 格式:sudo -l
五、系统引导和登录控制
1、开关机安全控制
1.1 调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码
1.2 GRUB限制
- 通常情况下,在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,也可进入急救模式修改用户密码,这对服务器是一个极大的安全威胁。为此,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
在/etc/grub.d/00_header文件中添加用户和PBKDF2加密口令的格式如下
-
使用grub2-mkpasswd-pbkdf2生成密钥
-
修改/etc/grub.d/00_header文件,添加密码记录
-
生成新的grub.cfg配置文件
grub2-mkpasswd-pbkdf2 #根据提示设置GRUB菜单的密码PBKDF2 hash of your password is grub.pbkdf2…… # 省略部分内容为加密生成的密码字符串cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak # 制作备份cp /etc/grub.d/00_header /etc/grub.d/00_header.bak # 制作备份vim /etc/grub.d/00_headercat << EOFset superusers="root" #设置登录用户为 rootpassword_pbkdf2 root grub.pbkdf2…… # 设置密码,省略部分内容为经过加密生成的密码字符串EOFgrub2-mkconfig -o /boot/grub2/grub.cfg # 生成新的grub.cfg配置文件完成配置修改工作,重启后进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。grub2-setpassword #直接设置密码
2、终端登录安全控制
2.1 限制root只在安全终端登录
-
安全终端配置
/etc/securetty
vi /etc/securetty
-
将tty5,tty6前加 “#” 将其注释,表示禁止root用户从终端tty5,tty6登录
2.2 禁止普通用户登录
-
建立/etc/nologin
touch /etc/nologin
-
删除nologin文件或重启后即恢复正常
rm -rf /etc/nologin
六、弱口令检测
1、暴力破解工具-JR
- John the Ripper是一款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解。通过对shadow文件的口令分析,可以检测密码强度。
- 官方网站:http://www.openwall.com/john/
2、安装JR工具
- 安装方法:make clean 系统类型
- 主程序文件为john
3、检测弱口令账号
- 获得Linux/Unix服务器的shadow文件
- 执行john程序,将shadow文件作为参数
4、密码文件的暴力破解
- 准备好密码子弹文件,默认为password.lst
- 执行john程序,结合–wordlist=字典文件
5、模拟暴破步骤
cd /opt
tar zxf john-1.8.0.tar.gz #解压工具包yum install -y gcc gcc-c++ make #安装软件编译工具cd /opt/john-1.8.0/src #切换到src子目录make clean linux-x86-64 #进行编译安装cp /etc/shadow /opt/shadow.txt #准备待暴破的密码文件cd /opt/john-1.8.0/run
./john /opt/shadow.txt #执行暴力破解./john --show /opt/shadow.txt #查看已破解出的账户列表> john.pot #使用密码字典文件,清空已破解出的账户列表以便重新分析./john --wordlist=./password.list /opt/shadow.txt #使用指定的字典文件进行破解
添加字典内容
- 若密码无法被暴力破解说明字典中没有该密码记录,可以进入字典文件(/opt/john-1.8.0/run/password.list)中手工输入添加,字典内容的丰富程度与破解能力成正比
七、端口扫描
1、网络扫描工具-NMAP
- NMAP是一个强大的端口扫描类安全评测工具,支持ping扫描、多端口检测等多种技术。
2、安装NMAP软件包
rpm -qa | grep nmap #检查是否已安装yum install -y namp #若未安装,进行yum安装
3、nmap命令常用的选项和扫描类型
常用选项/扫描类型 | 说明 |
---|---|
-p | 指定扫描的端口 |
-n | 禁用反向DNS解析(以加快扫描速度) ip转换成 域名 12222 2www.baidu.com |
-sS | TCP的SYN扫描 (半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放 |
-sT | TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放 |
-sF | TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性 |
-sU | UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢 |
-sP | ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描 |
-PO | 跳过ping检测, 这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描 |
4、常规检测方式:netstat
netstat -natp #查看正在运行的使用TCP协议的网络状态信息netstat -naup #查看正在运行的使用UDP协议的网络状态信息nmap -sT 127.0.0.1 #查看本机开放的TCP端口nmap -sU 127.0.0.1 #查看本机开放的UDP端口nmap -p 80 192.168.80.0/24 #检测192.168.80.0/24网段有哪些主机提供HTTP服务nmap -n -sP 192.168.80.0/24 #检测192.168.80.0/24网段有哪些存活主机
5、netstat命令常用选项
服务 | 端口号 |
---|---|
HTTP | 80 |
HTTPS | 443 |
Telnet | 23 |
FTP | 21 |
SSH(安全登录)、SCP(文件传输)、端口重定向 | 22 |
SMTP | 25 |
POP3 | 110 |
WebLogic | 7001 |
TOMCAT | 8080 |
WIN2003远程登录 | 3389 |
Oracle数据库 | 1521 |
MS SQL* SEVER数据库sever | 1433 |
23 | |
FTP | 21 |
SSH(安全登录)、SCP(文件传输)、端口重定向 | 22 |
SMTP | 25 |
POP3 | 110 |
WebLogic | 7001 |
TOMCAT | 8080 |
WIN2003远程登录 | 3389 |
Oracle数据库 | 1521 |
MS SQL* SEVER数据库sever | 1433 |
MySQL 数据库sever | 3306 |