Linux的系统安全管理及应用

导读:本篇文章讲解 Linux的系统安全管理及应用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

本章概述

主要讲解系统账号和密码的安全,历史命令遗留的风险及解决办法。用户之间的相互切换,并且说明如何限制一些用户进行切换功能。频繁切换用户会导致root密码泄露,如何在不切换root用户下使用root用户的命令,并且限制使用命令的个数。终端登录安全控制进行限制root用户登录。网络端口扫描,在知道对方的主机名或ip地址、网段时,如何去判断对方主机哪个端口是否开启。简单介绍查看当前系统的网络状态以及网络故障如何去查看。

一、账号安全控制

1、系统账号清理

①将非登录用户的Shell设为/sbin/nologin。

usermod  -s   sbin/nologin    libai
#将libai用户的登录shell改为nologin,不允许登录libai用户

②锁定长期不使用的账号

锁定和解锁的方式有两种。

以下两种方式可以任意互相解锁。

命令一:
passwd    -l   libai   #锁定用户libai
passwd    -u   libai   #解锁用户libai

命令二:
usermod    -L  libai   #锁定用户libai
usermod    -U  libai   #解锁用户libai

查看用户是否被锁定
passwd    -S   libai   

③删除无用的账号

userdel  -r   libai   #删除liabi用户

④锁定账号文件passwd、shadow

  • 锁定之后,无法对文件进行任何修改,包括删除,只能查看文件内容。

chattr  +i  /etc/passwd   /etc/shadow
#将passwd和shadow文件进行锁定
chattr  -i  /etc/passwd   /etc/shadow
#将passwd和shadow文件解锁
lsattr  /etc/passwd /etc/shadow
#查看passwd和shadow文件的状态

实例:将文件passwd和shadow文件都锁定,无法创建用户

image-20220528150048529

实例:将passwd文件进行解锁,还是会无法创建文件,那是因为锁定了shadow文件,再创建用户时,也还需要向文件shadow里面写入密码信息,所以无法创建。

image-20220528150446313

实例:只锁定passwd文件,不锁定shadow文件,可以进行修改密码,因为具体密码是存在shadow文件里面。

image-20220528151333154

2、密码安全控制

①密码信息内容修改可以使用chage命令进行修改shadow里面的信息内容来达到限制用户的情况。

②除了以上方法还有一种可以修改配置文件的内容。

可以进入配置文件 /etc/nologin.defs 进行修改,修改之后以后创建的用户都会按照文件配置内容进行执行

image-20220528153247947

实例:进入配置文件,将密码有效期改为30天

image-20220528153544967

新创建的一个用户,查看用户密码的有效期

image-20220528153123229

3、命令历史限制

3.1 风险

当我们在终端使用history,会查看到以前在终端输入的命令都会被记录。就算终端进行重启,命令还是会被记录。

image-20220528154054983

3.2 限制历史命令的个数

在配置文件/etc/profile (环境变量配置文件)中,有可以限制历史命令的个数。

HISTSIZE=1000   #默认历史命令存储1000条

source /etc/profile  #刷新配置文件(不然修改后不生效)

./etc/profile    #刷新配置文件

实例:修改历史命令存储为10条

在这里插入图片描述

image-20220528154732883

刷新配置文件,然后再进行查看历史命令,发现只显示10条。

image-20220528155110366

3.3 清空历史命令

3.3.1 临时清空

临时清空只是清除当前终端内存中的数据,重启之后,系统会把磁盘中的历史命令读取到内存中,所以重启终端之后,历史命令还会存在。

history -c   #临时清空历史命令

image-20220528155711841

3.3.2 永久清空

①手动清空

历史命令会存储在当前用户的家目录下的 .bash_history 中,

image-20220528160226183

当我们要清除所有历史命令的时候,需要将内存中的命令清空,还要将文件.bash_history 文件内容删除,如果我们只删除.bash_history 文件内容,但是只要我们重启,系统会将内存中的命令加载到文件中,所以还是会存在。 这里就运用到最终一致性概念。

最终一致性:当我们写命令到内存中,不会立即同步到磁盘中,当我们退出终端时,磁盘会统一内存命令。
好处:资源消耗小
坏处:中间如果断开,那么数据不会存再磁盘中,会造成数据丢失

强一致性:当我们写命令到内存中,会立即同步到磁盘中
好处:数据及时保存
坏处:消耗资源大

②退出时自动清空

这种需要在内存命令没有写入到磁盘时可以清除,相当于清除内存中的命令,因为我们的机制是最终一致性,所以使用此命令需要将磁盘中的命令删除后加这个命令。

image-20220528164333743

③登录时自动清空

或者进入到 ~/.bash_profile 文件中加入删除命令的历史命令文件的命令。

image-20220528171235680

3.4 登录登出读取配置的顺序

用户登录 —–> 加载~/.bash_profile —-> .bash_profile中的配置首先是使~/.bashrc生效

用户登出 —–> .bash_logout ,运行logout配置文件

~/.bash_profile  用户自己的环境变量配置文件
/etc/profile    系统的环境变量(全局)

4、终端自动注销

在 /etc/profile 环境配置变量里面,可以在末尾加入一条命令。限制终端在不操作的情况下限时自动退出终端。

export  TMOUT=10  #不操作10s后自动退出终端

image-20220529104752487

image-20220529105120305

二、切换用户-su

1、用户之间的切换

格式:su – 目标用户

切换到目标用户的家目录

格式:su 目标用户

切换到目标用户。当前目录不变

root切换到任意用户,不需要验证密码。

普通用户之间切换,都需要验证目标用户的密码。

2、限制用户使用su命令

su命令的安全隐患

  • 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户的登录密码,带来安全风险。
  • 为了加强su命令的使用控制,可借助于PAM认证模块。只允许极个别用户使用su命令进行切换。

将需要限制的用户添加到 wheel 组里面,加入进去后,该用户不能被除了root用户的其它用户切换。

因为wheel组里面有su命令模块,叫做PAM认证,只要开启这个认证,别的用户就无法使用su命令切换到该用户,wheel组内的成员可以相互切换。

pam认证配置文件

image-20220529112804290

上述配置文件解释

在/etc/pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/su

2 # auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid
  • 默认情况第一行开启,第二行被注释。

  • 以上第一行是决定root用户切换到别的用户是否需要密码。(注释即需要,不注释即不需要)

  • 行决定是否开启pam认证,(开启后只有wheel组成员才能使用su命令)

  • 注释第一行,开启第二行,那么就表示只有wheel组内才能使用su命令,root也会被禁用。

用户切换验证

image-20220529113521676

查看su命令切换的日志:路径:/var/log/secure

实例:

image-20220530164827260

3、PAM安全认证

PAM :可插拔式认证模块

可插拔:可以理解为可配置、可定制的一个模块。

  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式

3.1 PAM工作原理

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

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

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

如果想查看某个程序是否支持PAM认证,可以用ls命令进程查看/etc/pam.d 下面是否有相应的配置文件

3.2 PAM配置文件介绍

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

每一行可以区分为三个字段:

认证类型 、 控制类型 、 PAM模块及参数

image-20220529192928824

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

  • auth(认证管理) : 对用户身份进行识别,如提示输入密码,或者判断是否为root

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

  • password(密码管理) : 使用用户信息来更新数据,如修改用户密码。

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

第二列代表PAM控制标记

image-20220529195228974

  • requird : 表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续同类型的下一个验证,所有此类型的模块都执行完成后,再返回失败。
  • requisite : 和requird类型,但如果此模块返回失败,则立刻返回失败,并且此类型失败。
  • sufficient: 如果此模块返回成功,一般不用于验证,只是显示信息(通常用于session类型)
  • optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
  • include : 表示在验证过程中,调用其他的PAM配置文件,比如很对应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

第三列代表PAM模块

  • 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径,同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

第四列代表PAM模块的参数

  • 这个需要根据所使用的模块来添加。传递给模块的参数,参数可以有多个,之间用空格分开。

3.3 小结

PAM简单来说就是管理系统“默认”程序/服务的权限程序

三、提升权限机制-sudo

1、sudo命令的用途及用法

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

2、sudo参数命令

选项 作用
-l 列出用户在主机上可用的和被禁止的命令,一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的。
-v 验证用户的时间戳,如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作,可以跟踪最新的时间戳
-u 指定以用户执行特定操作
-k 删除时间戳

实例:sudo -l :查看当前用户获得哪些sudo授权。

image-202205301137386243、sudo命令授权

配置sudo命令授权的配置文件在:

image-20220530090916716

以上两个都可进入授权配置文件,第一个配置文件的权限为440,保存退出时,需要:wq!

格式

用户  主机名=(用户)命令程序表   :用户表示执行哪个用户的权限(可以不写,默认root)
  • 用户:直接授权指定的用户名,或采用”组名”的形式(授权一个组的所有用户)
  • 主机名:使用此规则的主机名,每配置过主机名时可以用locathost,有配过主机名
    则用实际的主机min,ALL代表带所有主机。
  • 命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需要填写命令程序的完整路径,多个命令之间以逗号进行分隔。ALL代表所有命令

用例:

libai   ALL=/sbin/ifconfig
#libai用户下的所有主机都可以使用ifconfig命令

xiaolan  localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
xiaolan用户下的localhost主机,可以使用root的所有命令,但是reboot和poweroff命令不能使用

xiaoming  ALL=(root)NOPASSWD:/bin/kill,/usr/bin/killall
xiaoming用户下的所有主机,可以使用kill和killall命令,并且不需要验证密码

操作实例:

①给用户xiaolan提权使用useradd和usermod命令

visudo或 /etc/sudoers 中提权命令如下:

image-20220530094126300

操作如下:

image-20220530094050053

②给用户 baijuyi 提权使用useradd命令和usermod命令,使用useradd命令时不需要验证 baijuyi 的用户密码。使用usermod需要验证密码。

visudo 或 /etc/sudoers 提权命令如下:

image-20220530095814207

具体操作如下:

image-20220530095712022

③用户可临时创建网卡

visudo 或 /etc/sudoers 配置如下:

image-20220530101943423

具体操作如下:

image-20220530101640451
image-20220530101747243

4、sudo用户别名案例

  • 当使用相同授权的用户较多,或者授权的命令较多时,可以采集几种定义别名。

  • 用户、主机、命令部分都可定义为别名(别名必须为大写),分别通过关键字:User_Alias、Host_Alias、Cmnd_Aliasl来进行设置。

用户别名的语法格式

别名 解释 用法实例
User_Alias 用户别名:包含用户、用户组(用户组用%引导),还可以包含其它已经使用的别名 User_Alias OPERATORS=zhangfei,guangyu
Host_Alias 主机别名:主机名、IP、网络地址、其它主机名(使用!进行取反) Host_Alias MAILSVRS=centos7,localhost
Comnd_Alias 命令路径:目录(此目录所有命令),其它事先定义过的命令别名 Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum

案例:

①用户zhangfei、guangyu可使用yum命令。

visudo 或 /etc/sudoers 命令中配置

image-20220530110555121

具体操作

image-20220530110059858

image-20220530110133180

②设置只有weiguo组和guangyu可以使用添加用户的命令,不能使用修改用户的命令。

visudo或 /etc/sudoers 中配置

image-20220530113315884

具体操作

image-20220530113029510

四、开关机安全控制

调整BIOS引导设置

  • 将第一引导设备设置为挡圈系统所在硬盘
  • 禁止从其它设备(光盘、U盘、网络)引导系统
  • 将安全级别设置为setup,并设置管理员密码

GRUB限制

  • 使用grub2-mkpasswd-pvkdf2生成秘钥
  • 修改/etc/grub.d/00_header文件中,添加密码记录
  • 生成新的grub.cfg配置文件

1、限制更改GRUB引导参数

通常情况下载系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

方法一:
grub2-mkpasswd-pbkdf2   
#根据提示设置GRUB菜单的密码,后面自动生成加密密码

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"
加密密码内容
EOF
****

grub2-mkconfig -o /boot/grub2/grub.cfg
#使用grub2-mkconfig命令生成新的grub。cfg配置文件

方法二:
grub2-setpassword
#一步到位

image-20220530204927228

vim /etc/grub.d/00_header里面

image-20220530210313426

2、终端登录安全控制

2.1 禁止普通用户登录

  • 建立/etc/nologin文件
  • 删除nologin文件或重启后恢复正常

禁止普通用户登录,当服务器正在备份或调试等维护工作时,可能不希望有新的用户登录系统。这时候,只需要简单的建立/etc/nologin文件即可,login程序会检查/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统(root用户不受限制)

用途:建立在服务器维护期间临时使用。

2.2 指定终端id进行登录

安全终端配置:/etc/securetty

进入/etc/secure 配置文件,可以将tty4注释掉,那root用户将无法进行登录,在非远程登录的终端上,使用ait + ctrl +[fn] + f1-f6 进行切换界面。

image-20220531202402375

五、网络端口扫描-nmap

1、nmap介绍

端口取值范围: 0-65535。0是一个预留的特殊端口。

扫描目标: 主机名,IP地址,网络地址等,多个目标以空格分隔。

常用选项

选项 参数
-p 分别用来指定端口扫描
-n 禁止反向DNS解析(加快扫描速度)

image-20220531220530667

常用的扫描类型

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

2、 案例

①nmap -sT (扫描常用的TCP)

image-20220531214523858

现在开另一台系统,配置好ip为:20.0.0.51 ,DNS,关闭防火墙。

在用nmap去扫描查看

image-20220531214730180

②nmap -sU (扫描常用的UDP)

image-20220531214924541

③nmap -sP (ICMP扫描)

image-20220531215335370

设置禁ping

  • 内核的配置文件:/etc/sysctl.conf

image-20220531220034352

六、netstat命令

查看当前操作系统的网络连接状态、路由表、接口等信息,它是了解网络状态及排除网络故障的有效工具。

常用选项

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

用法:

①通常使用“-anpt”组合选项,以数字形式显示当前系统中所有的 TCP 连接信息,同时显示对应的进程信息
②配合管道符grep过滤出特定的记录

netstat -natp    #查看正在运行的使用TCP协议的网络状态信息

netstat -naup    #查看正在运行的使用UDP协议的网络状态信息

实例:

image-20220531221645063

image-20220531222835012

七、总结

1、账号管理

  • 锁定对象:账号、文件/目录

    • 账号锁定:passwd 、 usermod
  • 文件/目录锁定:chattr +i 、文件/目录解锁:chattr -i

  • 查看文件锁定:lsattr

2、密码安全

  • chage命令—->控制账号的密码

  • 修改配置文件:/etc/logine.defs

3、历史命令限制

  • linux中执行命令的同时,会保存在内存中然后被写入到磁盘中,磁盘的目录为:~/.bash_hostory

  • 所以想要完全清空,需要清空缓存(hostory -c)和清空磁盘(eho “ ” > ~/.bash_hostory)

  • 或者在~/.bash_logout中定义清除日志,终端在关闭时执行的文件

  • 或者在~/.bash_profile ( ~/.bashrc) 中定义,终端在开启时执行的文件

  • /etc/profile:系统所有用户生效的配置文件(环境变量)

4、su切换用户登录

  • 管理su命令的用户或附加组(wheel)对象

  • 配置文件:PAM模块的配置:/etc/pam.d

  • 可实现的是:控制用户,分为root用户和组用户(wheel组),可以将普通用户添加到wheel组中,来实现“赋权”—->可以使用su切换

5、sudo提权(暂时用root用户的权限来执行操作)

  • 使用 visudo 或 /etc/sudoerc 进行编辑

  • 标准格式:用户 或 %组名(表示组) 主机名=命令(绝对路径)

  • 提权的目的:可以有效减少重复输入root密码的次数/频率。

6、PAM原理

  • 用户—->访问服务—–>进项pam验证——>调用对应的so模块

  • 如何查看指定的一个服务程序或命令工具,是否能被pam管理?

    • ls /etc/pam.d/ |grep 名称对象

7、终端登录

  • 对于用户登录终端的id进行限制

  • 控制的文件:/etc/securetty ——》控制指定的终端ID

  • 可以在非远程登录的终端上,来切换终端。

8、nmap端口扫描

  • 可以使用nmap扫描主机。主要输出的内容在于端口、协议、主机ip、是否存活。

  • 作用场景:

①扫描指定协议(TCP/UDP)端口的目标IP、主机名、网络号是否开启

②扫描指定网段中哪些主机是否存活/开启的

9、netstat命令

  • netstat是查看指定协议的网络信息

  • 包含:

① 协议(TCP/UDP) TCP
② 队列 queue 接收队列 0
③ 队列 queue 发送队列 0
④ IP:Port :::80(IPV6) 192.168.226.131:80(接收端) 192.168.226.132:Port(发送端)
⑤ LISTEN 状态 包含了连接状态、断开状态、等待状态
⑥ PID/进程任务 3459/httpd

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/75061.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!