Linux系统安全及应用

298 阅读11分钟

前言

在生产环境中我们一般都是普通用户操作,不能使用root用户进行操作,所以需要给普通用户一些权力并进行安全操作。因此我们需要理解PAM认证的过程。

账号安全控制

系统账号清理

usermod -s /sbin/nologin 用户名  @将非登录用户的shell设为/sbin/nologin

Snipaste_2022-08-10_19-46-15.png

Snipaste_2022-08-10_19-46-59.png Snipaste_2022-08-11_08-14-42.png

密码安全控制

usermod -L 用户名锁定用户账号
passwd -l 用户名锁定用户密码
passwd -s 用户名查看用户状态
userdel -r 用户名删除用户及其宿主目录
passwd -d 用户名清空账户密码
chattr +i /etc/passwd /etc/shadow锁定账号文件
lsattr /etc/passwd /etc/shadow查看账号文件
chattr -i /etc/passwd /etc/shadow解锁账号文件

Snipaste_2022-08-11_10-38-35.png

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

Snipaste_2022-08-13_16-02-12.png

vim /etc/login.defs          @修改密码配置文件适用于新建用户
PASS_MAX_DAYS 指定天数       @将99999改为指定天数

Snipaste_2022-08-13_16-11-45.png

命令历史限制

  • 减少记录的命令条数:
    /etc/profile这个文件是系统全局变量配置文件,可以通过重启系统或者执行source /etc/profile命令使文件被读取重载
[root@localhost ~] vi /etc/profile             @编辑全局变量配置文件    
export HISTSIZE=5                              @输入export HISTZIZE=5
[root@localhost ~] source /etc/profile         @相当于使/etc/profile内的命令重载一遍
自动注销终端
vi /etc/profile        @编辑全局变量配置文件
export TMOUT=600       @输出设置时间为600s后退出

Snipaste_2022-08-13_16-21-26.png

Snipaste_2022-08-13_16-20-27.png

Snipaste_2022-08-13_16-23-18.png

  • 登陆时自动清空历史命令:
    ~/.bashrc文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行 Snipaste_2022-08-13_16-31-59.png

使用su命令切换用户

用途及用法

用途:substitute user,切换用户

格式:su - 目标用户
su 切换用户
su zhangsan 在当前目录切换用户
su - zhangsan 切换用户并会切换到该用户的家目录中,加载该用户的shell环境

密码验证

root用户到任意用户,不验证密码

普通用户到任意用户,验证目标用户的密码

限制使用su命令的用户

su命令具有安全隐患 su命令使每个用户都具有反复尝试其他用户的登陆密码的能力,若是root用户,则风险更大。 所以需要加强su命令的使用控制,可以借助PAM认证模块,仅允许极个别指定用户可使用su命令进行切换

在/etc/pam.d/su文件里设置禁止用户使用su命令 Snipaste_2022-08-13_16-52-21.png

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

命令进行切换。实现过程如下:将授权使用su命令的用户添加到 wheel组,修改/etc/pam.d/su认证配置以启用pam wheel 认证。

Snipaste_2022-08-13_17-03-15.png Snipaste_2022-08-13_17-09-29.png

查看su操作记录:cat /var/log/secure (查看安全日志文件)

Linux中的PAM安全认证

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

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

PAM认证的原理

  1. PAM认证一般遵循的顺序:Service(服务)–>PAM(配置文件)–>pam_*.so
  2. PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证
  3. 用户访问服务器的时候,服务器的某–个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的
  4. 不同的应用程序所对应的PAM模块是不同的
查看某个程序是否支持PAM认证,可以用ls命令ls /etc/pam.d | grep su
查看su的PAM配置文件:cat /etc/pam.d/su

PAM认证的构成

Snipaste_2022-08-13_17-22-32.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模块的参数,这个需要根据所使用的模块来添加。 Snipaste_2022-08-13_17-25-09.png

使用sudo机制提升权限

sudo机制提升权限

sudo用途:以其他用户身份(如root)执行授权的命令
sudo用法:sudo 授权命令
su命令的缺点: 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险

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

  • 用户: 直接授权指定的用户名,或采用“。组名"的形式(授权一个组的所有用户)
  • 主机名: 使用此规则的主机名。没配置过主机名时可localhost,有配过主机名则用实际的主机名,ALI则代表所有主机
  • (用户): 用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
  • 命令程序列表: 允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。ALL则代表系统中的所有命令
lisi ALL=/sbin/ifconfig                                @表示用户lisi在所有主机上拥有ifconfig权限
lisi localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff	 @表示通配符“*”表示所有、取反符号“!”表示排除
说明lisi拥有除了重启和关机的所有权限
%wheel ALL=NOPASSWD: ALL                             @表示wheel组成员无需验证密码即可使用sudo执行任何命令
lisi ALL=(root)NOPASSWD: /bin/kill, /usr/bin/killall   @表示用户lisi不需要输入密码即可执行kill和killall命令

配置sudo权限:visudo或vim /etc/sudoers (保存退出需要用:wq!强制保存退出) Snipaste_2022-08-13_18-18-01.png Snipaste_2022-08-13_18-16-15.png

别名设置

当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、 Cmnd Alias来进行设置。

grep "wheel" /etc/group               @查看组下面的用户
User_Alias USERS=lisi,liwu     @用户别名
Host_Alias HOSTS=localhost.localdomain     @主机的别名
Cmnd_Alias CMNDS=/bin/rmp,/usr/bin/yum   @命令的别名
USERS HOSTS=CMNDS                     @相当于:用户组  主机组  =  命令程序列表
USERS HOSTS=NOPASSWD:CMNDS            @执行过程不需要验证密码

Snipaste_2022-08-13_18-31-53.png

Snipaste_2022-08-13_18-29-16.png

查看sudo操作记录

初次使用sudo时需验证当前用户的密码,默认超时时长为5分钟,在此期间不再重复验证密码
sudo /usr/sbin/xxxx Snipaste_2022-08-13_18-36-31.png

开关机安全控制 调整BIOS引导设置
• 将第一引导设备设为当前系统所在硬盘
• 禁止从其他设备(光盘、U盘、网络)引导系统
• 将安全级别设为setup,并设置管理员密码
[配置详情]( linux bios设置界面,BIOS怎么设置 史上最详细的bios设置图解教程_赵胖鱼的博客-CSDN博客)

GRUB限制 • 使用grub2-mkpasswd-pbkdf2生成密钥
• 修改/etc/grub.d/00_ header文件中, 添加密码记录
• 生成新的grub.cfg配置文件
[配置详情]( linux grub详解_bytxl的博客-CSDN博客_grub)

系统弱口令检测 Joth the Ripper,简称JR
一款开源的密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度
官方网站: www.openwall.com/john/
[配置详情]( 系统弱口令检测_ST Cp的博客-CSDN博客_弱口令检查)

网络端口扫描

NMAP是一个强大的端1扫描类安全评测工具,支持ping扫描、多端口检测等多种技术
安装
可以rpm -qalgrep nimap查看nmap
然后安装nmap软件包 yum install -y nmap

nmap命令常用的选项和描类型

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

Snipaste_2022-08-13_19-49-12.png

控制命令netstat

常用netstat命令
netstat -natp    @查看正在运行的使用TCP协议的网络状态信息
netstat -naup    @查看正在运行的使用UDP协议的网络状态信息
@分别查看本机开放的TCP端口UDP端口
nmap -sT 192.168.213.10
nmap -sU 192.168.213.10
nmap -n -sP 192.168.213.0/24  @检测192.168.116.0/24网段有哪些存活主机

netstat常用命令选项

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

Snipaste_2022-08-13_20-01-20.png

Snipaste_2022-08-13_20-04-37.png

Snipaste_2022-08-13_20-12-39.png

结束语:在生产环境中我们不可以直接使用root账户我们只能使用普通账户,所以我们需要使用sudo命令来让我们的普通用户得到一些特定的权限,增加我们账号的安全性,开关机安全的控制我们也需要进行设置防止在开机或者重启时被别人破译密码.没有网络安全就没有国家安全,就没有经济社会稳定运行,广大人民群众利益也难以得到保障。维护网络安全人人有责。