Linux系统安全与应用

Linux系统安全与应用,第1张

系统安全与应用
  • 前言
  • 一、账号安全控制
    • 1.1基本安全措施
      • 1.1.1系统账号清理
      • 1.1.2密码安全控制
      • 1.1.3 命令历史限制
      • 1.1.4终端自动注销
  • 二、使用su命令切换用户
    • 2.1用途及用法
    • 2.2密码验证
    • 2.3限制用户使用su命令
      • 2.3.1su命令具有安全隐患
      • 2.3.2限制使用su命令的用户
      • 2.3.3 *** 作步骤
  • 三、使用sudo机制提权
    • 3.1su命令的缺点
    • 3.2使用权限
    • 3.3记录格式
      • 3.3.1单用户提升权限
      • 3.3.2多用户同时提升权限(创建别名)
    • 3.4启动sudo *** 作日志
  • 四、Linux中的PAM安全认证
    • 4.1什么是PAM
    • 4.2PAM认证的过程
    • 4.3PAM认证原理
    • 4.4PAM安全认证流程
  • 五、开关机安全控制
    • 5.1BIOS引导设置
    • 5.2GRUB限制
    • 5.3GRUB限制的实现
      • 5.3.1方法一
      • 5.3.2方法二
    • 5.4禁止 root 用户登录
    • 5.5禁止普通用户登录
  • 六、弱口令检测
    • 6.1弱口令检测—Joth the Ripper
    • 6.2Joth the Ripper实例
  • 七、网络端口扫描NMAP
  • 总结

前言

系统安全问题一直存在着,当系统往往出现安全漏洞的时候会对我们的系统运行有一定程度的影响,严重的话还会造成系统瘫痪等问题。

一、账号安全控制 1.1基本安全措施

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

1.1.1系统账号清理
  • 将非登录用户的Shell设为/sbin/nolgin或者/bin/falsh
    例子:usermod -s /sbin/nologin 用户名

    如果想要他继续可以登录就可以将其改为/bin/bash
  • 锁定长期不使用的账号
    例子:
usermod -L 用户名           #锁定用户账户 
usermod -U 用户名           #解锁用户账户
 
passwd -u 用户名            #解锁用户账户     
passwd -l 用户名            #锁定用户密码
passwd -S 用户名            #查看用户状态
 
 
passwd和usermod可以互相解锁和锁定
passwd锁定密码前有两个!,usermod有一个!


  • 删除无用的账号
    例子:
 userdel -r 用户名           删除用户及其宿主目录


在生产环境中可以使用:分别进/home 和/var/spool/mail 强行删除用户,最后userdel 的时候 -rf ,强制加递归删除

[root@localhost ~]# cd /home
[root@localhost home]# ll
[root@localhost home]#rm -rf zhangsan   #进/home强行删除用户“zhangsan”
[root@localhost home]#cd /var/spool/mail   #进/var/spool/mail 强行删除用户
[root@localhost mail]# userdel -rf zhangsan  #强行删除zhangsan
[root@localhost ~]#id zhangsan
id: guzhang: no such user
  • 清空一个账号密码
 passwd -d 用户名            清空账户密码
  • 锁定账号文件passwd、shadow
 chattr +i /etc/passwd /etc/shadow      锁定文件,包括root也无法修改
lsattr /etc/passwd /etc/shadow         查看文件状态
chattr -i /etc/passwd /etc/shadow      解锁文件


当锁定文件 /etc/passwd时无法创建新用户
当锁定文件 /etc/shadow时无法修改密码

1.1.2密码安全控制
chage -M 日期 用户               #设置用户密码有效期
cat /etc/shadow | grep 用户     #来查看是否设置成功
chage -l 用户                   #也可以查看
例子:
[root@localhost ~]# chage -M 60 zhangsan   #这种方法适合修改已经存在的用户

[root@localhost ~]# vim /etc/login.defs   #这种适合以后添加新用户  
   PASS_MAX_DAYS   30     有效期为30天

chage -E xxxx-xx-xx             #设置过期日期
chage -d 0 用户                    强制在下次登陆时更改密码               


1.1.3 命令历史限制
  • 减少记录的命令条数
适用于新用户-----
[root@localhost ~]# vi /etc/profile    ## 进入配置文件修改限制命令条数。适合新用户
export HISTSIZE=200            ##修改限制命令为200条,系统默认是1000条profile
[root@localhost ~]# source /etc/profile         ## 刷新配置文件,使文件立即生效
适用于当前用户-----
[root@localhost ~]# export HISTSIZE=200  适用于当前用户
[root@localhost ~]# source /etc/profile 
[root@localhost ~]# source /etc/profile 刷新配置文件,使文件立即生效
[root@localhost ~]#echo $HISTSZE ##查看历史记录保留条数数量
  • 注销时自动清空命令历史
[root@localhost ~]#echo " " > ~/.bash_history
 

永久清除

[root@localhost ~]# vim ~/.bashrc ##进入vim编辑器
echo " " > ~/.bash_history ##以空白文件覆盖历史记录(相当于清空历史记录)


临时清除

[root@localhost ~]#vim ~/.bash_logout
history -c
clear
1.1.4终端自动注销

闲置600秒后自动注销

[root@localhost ~]#vim .bash_profile  #进入配置文件
    export TMOUT=600  #全局声明超过600秒闲置后自动注销终端
[root@localhost ~]# source .bash_profile #刷新一下也可以刷新 /etc/profile
[root@localhost ~]# echo $TMOUT

如果不在配置文件输入这条命令,那么是对当前用户生效

[root@localhost ~]# export TMOUT=600   
二、使用su命令切换用户 2.1用途及用法
  • 用途:Substitute User,切换用户
  • 格式:su - 目标用户
2.2密码验证

root——>任意用户,不验证密码
普通用户——>其他用户,验证目标用户的密码

[song@localhost ~]$ su - root
##带`-`选项表示将使用目标用户的登录Shell环境

口令:
[root@localhost ~]# whoami ##查看当前所在用户
root

su命令和su -命令区别:

su只是切换了root身份,但Shell环境仍然是普通用户的Shell;而su - 连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误。

查看su *** 作记录
安全日志文件:

2.3限制用户使用su命令 2.3.1su命令具有安全隐患
  • 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险
  • 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
2.3.2限制使用su命令的用户
  • 将允许使用su命令的用户加入wheel组
  • 启用pam_wheel认证模块
2.3.3 *** 作步骤
  1. vim /etc/pam.d/su ##进入编辑器编辑启动PAM模块


- 以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
- 两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码:如果第一行不注释,则root使用su切换普通用户就不需要输入密码( pam_ rootok.so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
- 如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令。
- 如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。

  1. [root@localhost ~]# gpasswd -a zhangsan wheel
    将用户“zhangsan”加入到wheel组中

  2. grep wheel /etc/group ##查看wheel组成员

    使用pam_wheel认证之后,没有加到wheel的用户将不能再使用su
    将zhangsan加入到wheel之后,kiro就有了使用su命令的权限

三、使用sudo机制提权

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

3.1su命令的缺点

通过su命令可以非常方便切换到另一个用户,但前提条件是必须知道用户登录密码。对于生产环境中的Linux服务器,每多一个人知道特权密码,安全风险就多一分。于是就多了一种折中的办法,使用sudo命令提升执行权限,不过需要由管理员预先进行授权, 指定用户使用某些命令

3.2使用权限

在 /etc/sudoers 中有出现的使用者。
vi /etc/sudoers或者 visudo (此文件的默认权限为440,保存退出时必须执行":wq!“命令来强制 *** 作)

3.3记录格式

用户 主机名=命令程序列表
用户 主机名=(用户) 命令程序列表

用户直接授权指定的用户名,或采用“%组名"的形式(授权一个组的所有用户)。
主机名使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机
(用户)用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。
命令程序列表允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号","进行分隔。ALL则代表系统中的所有命令

可以使用通配符“ * ”号任意值和“ !”号进行取反 *** 作。
权限生效后,输入密码后5分钟可以不用重新输入密码。

配置/etc/sudoers文件,可以授权用户较多的时使用

admin ALL=/sbin/ifconfig      #说明admin在所有主机上拥有ifconfig权限
admin1 localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff    
#通配符“*”表示所有、取反符号“!”表示排除   #说明admin1拥有除了重启和关机的所有权限
 
%wheel ALL=NOPASSWD: ALL      #表示wheel组成员无需验证密码即可使用sudo执行任何命令
 
admin2 ALL=(root)NOPASSWD: /bin/kill, /usr/bin/killall   
#说明admin2用户不需要输入密码即可执行kill和killall命令

3.3.1单用户提升权限

普通用户没用很多权力,比如创建用户的权力
所以给用户提升权限让他拥有创建用户的权限
步骤一、进入visudo
或vi /etc/sudoers(此文件的默认权限为440,保存并退出时必须执行":wq!"命令来强制 *** 作)

步骤二、添加配置
在最后一行添加
lisi ALL=/sbin/useradd,/bin/passwd
说明lisi在所有主机上拥有useradd和passwd权限
步骤三 切换到lisi用户下
执行sudo useradd sss
可以说明权限设置成功
步骤四 可以查看一下用户创建成功没
cat /etc/passwd | grep sss



3.3.2多用户同时提升权限(创建别名)
  • User_Alias 用户别名:包含用户、用户组(%组名(使用引导))、还可以包含其他其他已经用户的别名

User_Alias OPERATORS=zhangsan,tom,lisi

  • Host_Alias 主机别名:主机名、IP、网络地址、其他主机别名!取反

Host_Alias MAILSVRS=smtp,pop

  • Cmnd_Alias命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名

示例:
配置/etc/sudoers文件,可以授权用户较多的时使用

Host_Alias MYHOST= localhost 主机名
User_Alias MYUSER = yxp,zhangsan,lisi 需要授权的用户
Cmnd_Alias MYCMD = /sbin/*,/usr/bin/passwd 授权
MYUSER MYHOST = NOPASSWD : MYCMD 授权格式
相当于:用户组 主机组 = 命令程序列表
这 一行必须输入,不然上面的会不成功

3.4启动sudo *** 作日志
visudo                             #进入编辑
Defaults logfile = /var/log/sudo   #将该命令添加至最后一行:wq保存并退出即可
[root@localhost ~]# tail larl/log/sudo
.......
Aug 24 23:59:44 : jerry : TTY=pts/0 ; PWD=/home/jerry ;USER=root ; COMMAND=/sbin/ifconfig
ens33:0 192.168.1.11/24
Aug 25 00:00:46 : syrianer : TTY=pts/1 ; PWD=/home/syrianer ; USER=root ; COMMAND=list
启用日志配置以后,sudo *** 作过程才会被记录
四、Linux中的PAM安全认证 4.1什么是PAM

Linux-PAM是linux可插拔认证模块,是一套可定制、可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。

PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/lib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。

4.2PAM认证的过程
  1. 使用者执行passwd程序,并输入密码
  2. passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件 一般是在/etc/pamd/里边的与程序同名的文件,即
    PAM会搜寻/etc/pam.d/pam unixpasswd.so 此设置文件
  3. 经由/etc/pam.d/pam unixpasswd.so设定文件的数据,取用PAM所提供的相关模块来进行验证
  4. 将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动 作(重新输入密码或者通过验证)

4.3PAM认证原理
  1. PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so;,

  2. PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认
    模块(位于/lib64/security/下)进行安全认证。

  3. 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。

  4. 如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/。
    ls /etc/pam.d/ | grep su

  5. PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用。

    第一列代表PAM认证模块类型

①auth:对用户身份进行识别,如提示输入密码,判断是否为root。

②account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。

③password:使用用户信息来更新数据,如修改用户密码。

④session:定义登录前以及退出后所要进行的会话 *** 作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。

第二列代表PAM控制标记

①required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。

②requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。

③sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。

④optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。

⑤include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。

第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。

4.4PAM安全认证流程


1.required验证失败时仍然继续,但 验证开始 required 验证成功验证失败 返回Fail 验证失败
2.requisite验证失败则立即结束整个 验证结束 requisite 验证 成功 验证 成功 验证过程,返回Fail
3.sufficient验证成功则立即返回,不 程序后续 动作 sufficient 验证 失败 再继续,否则忽略结果并 继续 optional
4.optional不用于验证,只显示信息(通常用于session类型)

五、开关机安全控制 5.1BIOS引导设置
  1. 将第一引导设备设为当前系统所在硬盘
  2. 禁止从其他设备(光盘、U盘、网络)引导系统
  3. 将安全级别设为setup,并设置管理员密码5.
5.2GRUB限制
  1. 使用grub2-mkpasswd-pbkdf2生成密钥
  2. 修改/etc/grub.d/00_header文件,添加密码记录
  3. 生成新的grub.cfg配置文件
5.3GRUB限制的实现
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

使用grub2-mkpasswd-pbkdf2获得加密字符串;

修改/etc/grub.d/00_ header文件中, 添加密码记录;

生成新的grub.cfg配置文件。

法一:
1.  使用grub2-mkpasswd-pbkdf2生成密钥并复制,然后备份两个配置文件。 
2.  修改/etc/grub.d/00_ header文件中, 添加密码记录,并存并退出 
​
法二:一步到位
直接设置grub2—setpasswd 设置grub密码
生成新的grub.cfg文件,然后重启系统

验证结果
5.3.1方法一
grub2-mkpasswd-pbkdf2   		 #根据提示设置GRUB菜单的密码
PBKDF2 hash of your password is grub . pbkd.. . ..#省略部分内容为经过加密生成的密码字符串
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_header #进入添加密钥
 
cat << EOF #添加密钥,密钥是刚才复制的
set superusers="root”   		  #设置用户名为root
password_pbkdf2 root grub. pbkd2. . . .       
#设置密码,省略部分内容为经过加密生成的密码字符串
EOF
grub2-mkconfig -o /boot/grub2/grub.cfg          #生成新的grub.cfg文件
#######重启系统进入GRtB菜单时,按e键将需要输入账号密码才能修改引导参数########

grub2-setpassword		# 一步到位,直接设置


5.3.2方法二

5.4禁止 root 用户登录

在 Linux 系统中,login 程序会读取/etc/securetty 文件,以决定允许 root 用户从哪些终端(安全终端)登录系统。


###禁止root用户登录
w ##查看端口
vi /etc/securetty           
#tty5           想要不让在哪个终端登陆就在该终端前加注释#
tty6   

###禁止普通用户登录(一般都是临时设置,关机重启后可以继续登录)
touch /etc/nologin      #创建/etc/nologin文件即禁止普通用户登录
rm -rf /etc/nologin     #删除该文件即取消登录限制touch /etc/nologin    

实验

5.5禁止普通用户登录
###禁止普通用户登录(一般都是临时设置,关机重启后可以继续登录)
touch /etc/nologin      #创建/etc/nologin文件即禁止普通用户登录
rm -rf /etc/nologin     #删除该文件即取消登录限制touch /etc/nologin    
  
六、弱口令检测 6.1弱口令检测—Joth the Ripper
  • 一款开源的密码分析工具,支持字典式的暴力破解
  • 通过对shadow文件的口令分析,可以检测密码强度
  • 官方网站:​http://www.openwall.com/john/​
6.2Joth the Ripper实例
  • 安装方法:make clean 系统类型
  • 主程序文件为 john
  • 检测弱口令账号 获得Linux/Unix服务器的shadow文件
  • 执行john程序,将shadow文件作为参数
  • 密码文件的暴力破解 准备好密码字典文件,默认password.lst
  • 执行john程序,结合–wordlist=字典文件
    *** 作步骤
1. 把下载好的安装包用过rz命令下到目录opy下(sz可以把linux系统中的文件传到自己的windows系统中):
[root@localhost ~]#cd /opt
[root@localhost ~]#rz   
[root@localhost opt]#ls
john-1.8.0.tar.gz
​
2. 解压
[root@localhost opt]#tar zxvf john-1.8.0.tar.gz 
​
3. 安装软件编译工具
[root@localhost src]#yum install gcc gcc-c++ make -y
​
4. 进行编译安装
[root@localhost src]#make clean linux-x86-64
​
5. 准备待破解的密码文件
[root@localhost src]#cd ..   切换至上级目录
[root@localhost src]#cp /etc/shadow /opt/shadow.txt  准备密码文件
 
6. 执行暴力破解
[root@localhost src]#cd /opt/john-1.8.0/run/
[root@localhost run]#./john /opt/shadow.txt 
​
7.查看已经破解出的密码
[root@localhost run]#./john --show /opt/shadow.txt
七、网络端口扫描NMAP
  • NMAP 是一个强大的端口扫描类安全评测工具,支持 ping 扫描、多端口检测等多种技术
  • 官方网站:http://nmap.org/
###需要安装nmap软件包再进行 *** 作
	yum install -y nmap       

nmap命令常用选项与对应扫描类型

nmap [扫描类型]  [选项]  <扫描目标>
netstat natp                                            #查看正在运行的使用TCP协议的网络状态信息
netstat -natp | grep httpd                          #实际 *** 作(httpd换成80也可以)
​
netstat -naup                                           #查看正在运行的使用UDP协议的网络状态信息[root@localhost run]#rpm -qa|grep nmap   查看nmap
[root@localhost run]#yum install -y nmap   安装nmap
-p指定扫描的端口
-n禁用反向 DNS 解析(以加快扫描速度)
-sSTCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放
-sTTCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放
-sFTCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP 攻击包。这种类型的扫描可间接检测防火墙的健壮性
-sUUDP 扫描,探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢
-sPICMP 扫描,类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描
-P0跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping 通而放弃扫描

natstat常用选项

-a显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。
-n以数字的形式显示相关的主机地址、端1等信息。
-t查看TCP相关的信息。
-u显示UDP协议相关的信息。
-p显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r显示路由表信息。
-l显示处于监听状态的网络连接及端口信息。
总结

系统账号清理、密码安全控制、命令历史清理、自动注销
能否登录用户,锁定或删除长期不使用的用户账号和文件
历史命令的限制、删除与读取顺序
su、sudo
PAM认证的形成过程
开关机的安全控制与终端控制
了解一下弱口令破解与端口扫描的 *** 作

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/743116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存