Linux系统安全与应用

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
简介: 系统安全问题一直存在着,当系统往往出现安全漏洞的时候会对我们的系统运行有一定程度的影响,严重的话还会造成系统瘫痪等问题。

前言


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


一、账号安全控制


1.1基本安全措施


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


1.1.1系统账号清理


将非登录用户的Shell设为/sbin/nolgin或者/bin/falsh

例子:usermod -s /sbin/nologin 用户名

image.png

如果想要他继续可以登录就可以将其改为/bin/bash

锁定长期不使用的账号

例子:

usermod -L 用户名           #锁定用户账户 
usermod -U 用户名           #解锁用户账户
passwd -u 用户名            #解锁用户账户     
passwd -l 用户名            #锁定用户密码
passwd -S 用户名            #查看用户状态
passwd和usermod可以互相解锁和锁定
passwd锁定密码前有两个!,usermod有一个!

image.png



删除无用的账号

例子:

image.png

在生产环境中可以使用:分别进/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

清空一个账号密码

image.png

当锁定文件 /etc/passwd时无法创建新用户

当锁定文件 /etc/shadow时无法修改密码

image.png


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 用户                    强制在下次登陆时更改密码               

image.png

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 ~]# export HISTSIZE=200  适用于当前用户
[root@localhost ~]# source /etc/profile 
[root@localhost ~]# source /etc/profile 刷新配置文件,使文件立即生效
[root@localhost ~]#echo $HISTSZE ##查看历史记录保留条数数量

永久清除

[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的错误。

image.png



查看su操作记录

安全日志文件:

image.png


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模块

image.png



- 以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。

- 两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码:如果第一行不注释,则root使用su切换普通用户就不需要输入密码( pam_ rootok.so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)

- 如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令。

- 如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。


2.[root@localhost ~]# gpasswd -a zhangsan wheel

将用户“zhangsan”加入到wheel组中

image.png


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

image.png

使用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!“命令来强制操作)

image.png


3.3记录格式


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

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

image.png

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

image.png


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

image.png

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认证的过程


使用者执行passwd程序,并输入密码

passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件 一般是在/etc/pamd/里边的与程序同名的文件,即

PAM会搜寻/etc/pam.d/pam unixpasswd.so 此设置文件

经由/etc/pam.d/pam unixpasswd.so设定文件的数据,取用PAM所提供的相关模块来进行验证

将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动 作(重新输入密码或者通过验证)

image.png


4.3PAM认证原理


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


PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认

模块(位于/lib64/security/下)进行安全认证。


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


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

ls /etc/pam.d/ | grep su


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

image.png

第一列代表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安全认证流程


image.png

1.required验证失败时仍然继续,但 验证开始 required 验证成功验证失败 返回Fail 验证失败

2.requisite验证失败则立即结束整个 验证结束 requisite 验证 成功 验证 成功 验证过程,返回Fail

3.sufficient验证成功则立即返回,不 程序后续 动作 sufficient 验证 失败 再继续,否则忽略结果并 继续 optional

4.optional不用于验证,只显示信息(通常用于session类型)


五、开关机安全控制


5.1BIOS引导设置


将第一引导设备设为当前系统所在硬盘

禁止从其他设备(光盘、U盘、网络)引导系统

将安全级别设为setup,并设置管理员密码5.

5.2GRUB限制


使用grub2-mkpasswd-pbkdf2生成密钥

修改/etc/grub.d/00_header文件,添加密码记录

生成新的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   # 一步到位,直接设置

image.png

image.png

5.3.2方法二


image.png


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    


实验

image.png



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

image.png

natstat常用选项

image.png

-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。

-n 以数字的形式显示相关的主机地址、端1等信息。

-t 查看TCP相关的信息。

-u 显示UDP协议相关的信息。

-p 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)

-r 显示路由表信息。

-l 显示处于监听状态的网络连接及端口信息。

总结


系统账号清理、密码安全控制、命令历史清理、自动注销

能否登录用户,锁定或删除长期不使用的用户账号和文件

历史命令的限制、删除与读取顺序

su、sudo

PAM认证的形成过程

开关机的安全控制与终端控制

了解一下弱口令破解与端口扫描的操作


相关文章
|
5天前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
21 5
|
20天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
3月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
|
3月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
179 3
|
3月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
3月前
|
存储 监控 Linux
在Linux中,如何进行虚拟化技术的应用?
在Linux中,如何进行虚拟化技术的应用?
|
3月前
|
监控 安全 Linux
在Linux中,如何进行系统安全加固?
在Linux中,如何进行系统安全加固?
|
3月前
|
存储 监控 Linux
在Linux中,如何进行容器技术的应用?
在Linux中,如何进行容器技术的应用?
|
3月前
|
算法 Ubuntu Linux
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?
|
3月前
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)