Linux系统安全及应用

发布于:2025-04-07 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

一.账号安全措施

1.1系统账号清理

1.1.1将非登录用户的shell设为无法登录

1.1.2删除无用用户 userdel

1.1.3锁定账号文件

1.1.4锁定长期不使用的账号

1.2密码安全控制 

1.2.1 对新建用户

1.2.2对已有用户 

1.3命令历史限制

1.3.1临时清除历史命令

 1.3.2限制命令历史记录的次数

1.3.3用户注销时清空命令历史

 1.3.4用户启动时清空命令历史

1.3.5设置 Shell 会话的超时自动注销 

二.用户切换

2.1用户切换 su命令

2.2限制使用su命令的用户

 2.3使用sudo机制提升权限

2.3.1定义

2.3.2命令格式

2.3.3配置sudo授权

2.3.4配置sudo授权的语法格式 

1.授权规则(必须的 ):

 2.别名定义(不是必须的 ):

2.4:su和sudo对比

三.PAM认证

3.1定义 

3.2产生背景

3.3PAM 认证类型

3.4PAM认证原理

3.5PAM配置文件

3.6PAM安全认证流程

 3.7limit模块

 四.端口扫描工具nmap

4.1定义

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

补充:常见服务的端口号


 

一.账号安全措施

1.1系统账号清理

 系统账号清理是指对计算机系统或网络中的用户账户进行定期审查和维护的过程,目的是删除不再需要的账户,提高系统安全性和管理效率。

1.1.1将非登录用户的shell设为无法登录

其实就是将非登录用户的shell设为/sbin/nologin

usermod -s /sbin/nologin 用户名

 

1.1.2删除无用用户 userdel

userdel [选项] 用户名  //删除用户

userdel -r 用户名    //删除用户和此用户的家目录

1.1.3锁定账号文件

chattr命令用于修改文件或目录的属性,设置文件的特殊属性,使其具有更高级的保护或控制

chattr +i /etc/passwd /etc/shadow #锁定账号文件

 

1.1.4锁定长期不使用的账号

方式一
usermod -L 用户名   锁定用户
usermod -U 用户名   解锁用户

方式二
passwd -l 用户名    锁定用户
passwd -u 用户名    解锁用户

 

1.2密码安全控制 

密码安全控制是指通过技术手段和管理策略,来确保系统用户的密码具备足够的强度、安全性和合规性。

1.2.1 对新建用户

可以修改 /etc/login.defs 文件里的内容来设置密码规则

vim /etc/login.defs              
.....
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
....
:wq    保存退出

 

参数 说明
PASS_MAX_DAYS 密码最大有效期(天)
PASS_MIN_DAYS 密码修改最小间隔(天)
PASS_WARN_AGE 密码过期前警告天数
PASS_MIN_LEN 密码最小长度(部分系统需配合PAM)

1.2.2对已有用户 

对于已有用户可以使用chage命令

chage [选项] 用户名
-m:密码可更改的最小天数,m=0 代表任何时候都可以更改密码
-M:密码保持有效的最大天数

-w:用户密码到期前,提前收到警告信息的天数
-E:帐号到期的日期。过了这天,此帐号将不可用
-d:上一次更改的日期
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。




chage -d  0 用户名  //强制用户下一次登录要修改密码

[root@localhost ~]# chage -d  0 zhangsan
#强制张三下一次登录一定修改密码(密码符合复杂性要求)

 

1.3命令历史限制

1.3.1临时清除历史命令

#可以使用以下命令临时清除历史命令
history -c 
clear

 

 1.3.2限制命令历史记录的次数

[root@localhost ~]#vim /etc/profile
.............................
export HISTSIZE=200

[root@localhost ~]#source  /etc/profile



            //最多只记录 200 条历史命令。

实例: 

 

 export HISTSIZE加在文件最后一行插入即可

 

1.3.3用户注销时清空命令历史

[root@localhost ~]#vim .bash_logout  //用vim编辑.bash_logout文件


echo " " >~/.bash_history

//每次用户注销时,会把bash历史记录文件内容替换为单个空格

 1.3.4用户启动时清空命令历史


[root@localhost ~]#vim .bash_logout 


echo " " >~/.bash_history

补充:.bashrc:在 每次启动交互式 Bash Shell 时 自动加载 。

           .bash_logout在用户 注销 Bash Shell 时自动执行。

1.3.5设置 Shell 会话的超时自动注销 

防止管理员离开电脑时未注销导致的安全风险

[root@localhost ~]# vi /etc/profile   

export  TMOUT=60

[root@localhost ~]# source /etc/profile


//如果终端 60秒内无任何操作,系统会自动注销当前会话

 

二.用户切换

2.1用户切换 su命令

用途:su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令

命令格式
su [options...] [-] [user [args...]

su [选项] 用户名      //不完全切换,上一个用户的部分设置会保留

su -  用户名          //完全切换 ,相当于重新登录,


注意:root su至其他用户无须密码;非root用户切换时需要密码

su切换新用户后,使用exit退回至旧的用户身份,而不要再用su切换至旧用户,
否则会生成很多的bash子进程,环境可能会混乱。

补充:whoami 查看当前登录用户

2.2限制使用su命令的用户

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

[root@localhost ~]# gpasswd -a lisi wheel
#将用户加入 wheel组 root

[root@localhost ~]#vim /etc/pam.d/su
#编辑/etc/pam.d/su

补充:/etc/pam.d/su 是Linux中控制su(切换用户)命令
的PAM(Pluggable Authentication Modules)认证配置文件。

进入编辑界面如下: 

 auth    sufficient   pam_ rootok.so

作用:

  • 检查当前用户 是否已经是 root

      • 如果当前用户是 root,则直接通过认证(sufficient),跳过后续所有检查

      • 如果当前用户不是 root,则继续执行下一行检查。

auth   required   pam_ wheel.so use_ uid

作用

  • 检查尝试使用 su 的用户 是否属于 wheel 组

    • 如果是 wheel 组成员,允许继续认证(需输入目标用户密码)。

    • 如果不是 wheel 组成员,直接拒绝(即使知道密码也会失败)。

效果:启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令

 2.3使用sudo机制提升权限

2.3.1定义

sudo(Super User DO)是 Linux 系统中用于 以其他用户身份(默认 root)执行命令 的核心工具,相比直接使用 su 更安全且可审计

2.3.2命令格式

sudo [选项] 命令

2.3.3配置sudo授权

visudo 或者    vi /etc/sudoers

注意:

            etc/sudoers:此文件的默认权限是440,保存退出是必须执行“wq!”命令来强制操作

2.3.4配置sudo授权的语法格式 

配置文件规则有两类: 

1.授权规则(必须的 ):

<用户/用户组> <主机名>=([运行身份用户]:[运行身份用户组]) [可执行的命令列表] [选项]

部分 说明
用户/用户组 授权给谁(用户用 username,用户组用 %groupname)。
主机名 在哪些主机上生效(通常用 ALL 表示所有主机)。
运行身份用户/用户组 允许以哪个用户或用户组的身份运行命令(括号内,可选,默认为 root)。
可执行的命令列表 允许执行的命令(需写绝对路径,可用 ALL 表示所有命令)。
选项 附加限制条件(如 NOPASSWDSETENV 等,可选)。

实例:

%developers ALL=(root) NOPASSWD: /usr/bin/apt, /usr/bin/git

//用户组developers可以以root身份无需密码运行apt和git命令。
 2.别名定义(不是必须的 ):

使用User_Alias(用户别名)、Host_Alias(主机别名)、Cmnd_Alias(命令别名) 来进行设置别名(别名必须为大写),可以实现批量设置

# 定义别名
User_Alias DEVOPS = alice, bob
Host_Alias PROD = 192.168.1.100, server-prod
Runas_Alias OPS = root, %admin
Cmnd_Alias RESTART_SERVICES = /usr/bin/systemctl restart *

# 组合规则
DEVOPS PROD=(OPS) NOPASSWD: RESTART_SERVICES

2.4:su和sudo对比

特性 sudo su
密码要求 输入当前用户的密码 输入目标用户的密码
功能 其他用户身份执行单条命令 切换用户身份(默认切换到 root)
权限粒度 精细控制(可限制具体命令) 粗放(切换后获得完整权限)

三.PAM认证

3.1定义 

PAM(Pluggable Authentication Modules,可插拔认证模块) 是 Linux/Unix 系统中用于集中化管理身份认证的框架。它允许系统管理员灵活配置应用程序的认证方式,而无需修改程序代码。

3.2产生背景

su命令的安全隐患

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

3.3PAM 认证类型

  1. 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;

  2. 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等;

  3. 密码管理(password management):主要是用来修改用户的密码;

  4. 会话管理(session management):主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。

3.4PAM认证原理

 

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

简而言之:PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

3.5PAM配置文件

/usr/lib64/security/和/etc/pam.d/这两个目录是 Linux 系统中 PAM(Pluggable Authentication Modules,可插拔认证模块) 的核心组成部分,分别负责 模块实现 和 认证规则配置

简而言之:/usr/lib64/security/:PAM 的“工具库”,存放功能实现模块。/etc/pam.d/:PAM 的“说明书”,定义各服务如何调用模块。

/etc/pam.d 是 Linux 系统中 PAM 的 认证规则配置

type    control     module-path      arguments


//专用配置文件/etc/pam.d/ 格式



type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数

 实例:以 /etc/pam.d/login文件举例
            vim /etc/pam.d/login

第一列:模块类型(module-type)

  • Auth 账号的认证和授权 用户名

  • Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)

  • Password 用户修改密码时密码复杂度检查机制等功能

  • Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等

第二列:Control:( 控制位)

  • required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件

  • requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件

  • sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的

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

  • optional 可选项

 第三列:PAM模块

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

3.6PAM安全认证流程

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

 3.7limit模块

在系统安全方面limit模块最重要 

功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

ulimit [选项]       //命令格式


ulimit -a 显示当前所有资源的限制

ulimit -c 设置core文件的最大大小,单位为blocks

ulimit -n 设置可以打开的最大文件描述符数

ulimit -u 设置用户可创建的最大进程数

ulimit -m 设置单个进程的物理内存限制,单位为KB

ulimit -v 设置单个进程的虚拟内存限制,单位为KB

ulimit -s 设置单个栈的最大大小,单位为blocks

ulimit -f 设置单个文件的最大大小,单位为blocks

 四.端口扫描工具nmap

4.1定义

NMAP是一个强大的端口扫描类安全评测工具,支持ping扫描、多端口检测等多种技术

安装
rpm -qa|grep nmap  查看nmap
yum install -y nmap

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

nmap [选项] [扫描方式]


nmap命令格式

补充:常见服务的端口号

服务 端口号
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
MySQL 数据库sever 3306