引导语

系统安全及应用是现代信息系统的核心组成部分,它不仅关乎信息安全,更直接影响到企业的运营效率、财务状况乃至品牌信誉。通过不断改进和强化系统的安全性,可以为企业创造一个更加可靠、高效的信息化环境。

一、账号安全的基本措施

(一)系统账号的清理

对一些无法登录的、长期不使用,或者无用的用户账号进行限制登录、锁定、删除等操作

1.设定用户无法登录

在/etc/passwd/文件里是可以看到哪些用户可以登录,哪些用户不可以登录的

如果我们想查看某一个用户的信息,可以通过cat /etc/passwd | grep 用户名 过滤

或者查看哪些用户是无法登录,哪些用户可以登录,哪些用户不可以登录

/sbin/nologin 是Linux系统中的一种特殊shell,它不是一个真正的shell程序,而是一个“伪”shell,其功能是拒绝用户登录。当一个用户的默认shell设置为/sbin/nologin 时,尝试通过SSH或其他终端服务登录该账户的用户将会收到错误提示并被拒绝登录。

通常情况下,管理员会将某些不打算提供交互式登录权限的账户(如系统服务账户)的shell设置为 /sbin/nologin,这样可以防止误操作或恶意登录这些账户,并确保它们仅用于执行后台任务或作为守护进程运行,而不是进行人工操作。

我们可以通过chsh命令修改用户属性,比如将kysw1用户设置成无法

也可以使用usermod -s命令修改shell属性

2.锁定用户

使用passwd – l 或者 usermod -L 命令都可以锁定

解锁用户 passwd -u 或者 usermod -L

3.删除用户

可以使用userdel命令

userdel -r 连家目录一起删除

4.锁定配置文件

可以通过chattr命令锁定配置文件,来保证文件的安全性,防止恶意修改

输入:chattr +i /etc/passwd ,使用lsattr命令查看修改信息

取消权限输入-i即可

(二)密码安全控制

设定密码规则

1.对新建用户

可以修改 /etc/login.defs 文件里的内容来设置密码规则,创建新用户时,就会默认已规则创建用户密码属性

2.对已有用户

可以使用chage命令修改

语法:chage 【选项】 用户名

选项:

-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

比如我们想设置用户kysw2的密码有效期为10天,密码到期前5天提醒

可以输入chage -M 10 -W 5 kysw 来设置

如果我们想使一个用户每次登录都需要改密码可以输入 -d 0来设置

而且重新设置密码需要符合密码复杂性要求,需包含大小写字母、特殊符号、数字。

(三)历史命令

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户

输入history可以看到所有的历史命令

使用history命令可以清除历史命令,上下键也不可以翻阅命令了

通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户

重新加载一下文件

(四)切换用户

使用su命令,可以实现用户之间的切换

su 用户名:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su – 用户名:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

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

二、PAM认证

PAM(Pluggable Authentication Modules,可插入认证模块)是Linux和类Unix操作系统中的一种灵活的认证框架。PAM允许系统管理员在不修改应用程序代码的情况下自定义系统的身份验证、授权和会话管理策略。

通过PAM,系统可以采用不同的模块组合来处理各种认证相关的操作,例如本地密码验证、Kerberos身份验证、智能卡认证等。PAM的配置文件通常位于/etc/pam.d/目录下,每个应用服务(如sshd、login、su等)都有对应的配置文件,这些文件描述了当用户尝试登录或执行特定操作时应调用哪些PAM模块以及如何调用。

(一)工作原理

PAM框架的基本流程包括四个主要阶段:

1.Authentication:验证用户的身份,比如检查用户名和密码是否匹配。

2.Account Management:确定账户是否有效,例如检查账户是否被禁用或过期

3.Authorization:决定用户是否有权限进行特定的操作。

4.Session Management:在用户登录前后的会话管理操作,如记录登录日志、设置环境变量等。

(二)相关文件

下面我们通过例子来讲解一下

首先我们先知道几个文件夹存放的内容

1./usr/lib64/security: 这个路径通常存放着一些安全相关的库文件,尤其是在使用PAM时。对于64位系统,程序的库文件一般存储在/usr/lib64/lib64目录下。在该路径下的security子目录里可能包含用于PAM认证机制的动态链接库(.so文件),这些库实现了各种具体的认证策略

2./etc/pam.d: 这个目录包含了PAM模块的具体应用配置文件,每个应用程序都有一个对应的配置文件,例如/etc/pam.d/sshd对应SSH服务,/etc/pam.d/login对应本地登录等。这些配置文件定义了在用户登录或者执行特定操作时,系统应如何按照顺序调用不同的PAM模块进行身份验证、账户管理和会话管理等操作。

3./etc/security: 此目录则包含了一些高级的安全性配置文件,如限制用户资源使用量的配置文件limits.conf,以及与PAM交互的一些安全设置文件,比如用于密码复杂度检查的passwd配置等。此外,还包括了与sudo权限控制相关的文件以及其他系统级别的安全配置项。

首先,我们找一个文件查看一下

可以看到,该文件内容有大概四个内容

第一列内容:type:指模块类型,即功能

Auth账号的认证和授权,比如用户登录时,验证你的用户名存不存在
Account帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
Password用户修改密码时密码复杂度检查机制等功能
Session用户会话期间的控制,如:最多打开的文件数,最多的进程数等
-type表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用,如图片中-session

第二列内容:control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关键词实现

required 一票否决,如果失败,最后一定会失败,但是还会继续执行下面操作验证失败仍然会继续,但返回Fail
requssite 一票否决,如果失败会立即反馈失败信息,并立即结束认证,返回Fail
sufficient 验证成功会立即返回,不再继续,否则忽略结果并继续
optional 不用于验证,只显示信息
include 表示在验证过程中调用其他的 PAM 配置文件。

第三列内容:module-path: 用来指明本模块对应的程序文件的路径名,模块规定了系统的一些程序应该如何有效操作

第四列内容:Arguments: 用来传递给该模块的参数

(三)shell模块

我们已shell模块举例

shells模块可以看到当前系统支持的shell类型

比如我们可以使/bin/csh类型的shell用户不可以登录。把/bin/csh从文件中删除

创建一个/bin/csh类型的用户

此时还是可以登录的,需要我们手动在su的配置文件中启用shell的PAM认证模块

vim 编辑/etc/pam.d/su

lisi用户将无法登录

(四) limit

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

vim 打开/etc/security/limits.conf这个配置文件,这个文件的内容就是控制进程打开的数量和内存大小

domain用户名
@组名
*表示所有用户和组
typehard:硬限制
soft:软限制
—:软硬一起,相当于硬限制
itemcore :限制核心文件大小(KB)
data :最大数据大小(KB)
fsize :最大文件大小(KB)
memlock :最大锁定在内存中的地址空间(KB)
nofile :打开文件描述符的最大数目
rss :最大常驻集大小(KB)
stack :最大堆栈大小(KB)
cpu :最大cpu时间(MIN)
nproc :最大进程数
as :地址空间限制(KB)
maxlogins :该用户的最大登录数
maxsyslogins :系统上的最大登录数
priority :带锁运行用户进程的优先级
locks :用户可以持有的最大文件数
sigpending :挂起信号的最大数量
msgqueue : POSIX消息队列使用的最大内存(字节)
nice :允许提升的最大优先级:[: 20,19
rtprio :最大实时优先级

如果我们想限制一个用户打开最多进程为5个

我们可以在配置文件里修改,也可以通过ulimit命令修改

-H设置硬件资源限制.
-S设置软件资源限制.
-a显示当前所有的资源限制.
-csize:设置core文件的最大值.单位:blocks
-dsize:设置数据段的最大值.单位:kbytes
-fsize:设置创建文件的最大值.单位:blocks
-lsize:设置在内存中锁定进程的最大值.单位:kbytes
-msize:设置可以使用的常驻内存的最大值.单位:kbytes
-nsize:设置内核可以同时打开的文件描述符的最大值.单位:n
-psize:设置管道缓冲区的最大值.单位:kbytes
-ssize:设置堆栈的最大值.单位:kbytes
-tsize:设置CPU使用时间的最大上限.单位:seconds
-usize:最大用户进程数
-vsize:设置虚拟内存的最大值.单位:kbytes

输入ulimit -a 查看一下当前显示的所有资源

先来进行一个压力测试 让它同时打开1025个文件 最多打开5000个进行测试

可以看到,会有提示信息,无法同时打开,可以通过 ulimit -n 来调整

或者在配置文件里加上,表示所有用户最大打开文件数量为100000

现在再来进行测试

这样就通过测试就知道可以同时打开的范围了,不过要注意的是,如果你要使用ab测试工具,使用ab工具的机器,也要调高最大值,比如A 去访问B,A要调整1024 ,B也要调整1024

三、sudo

(一)sudo的简介

sudo是一个在类Unix操作系统中广泛使用的命令,它允许用户以系统管理员(或其它指定用户)的权限执行命令。sudu的全称是 “Superuser DO”,意即“以超级用户身份执行。

sudo在Linux和类Unix系统中是一个非常重要的命令,它的主要作用是允许普通用户以系统管理员权限(通常是root权限)执行特定的命令或程序,而无需切换到root用户。通过使用sudo,系统管理员可以对不同用户授予执行特定管理任务的能力,同时保留了对系统安全性和日志记录的控制。

(二)使用方法

首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。

例如普通用户是无法使用mount挂载命令的

那么需要在/etc/sudoers里面添加一下权限就可以了

编辑该文件建议使用visudo命令这个命令会有报错机制,如果你编辑错误会进行提示

现在我们就可以进行操作了,但是命令输入一定要正确

再次执行这个命令的时候5分钟内就不需要输入密码了(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。

如果想要取消密码验证,需要加上N0PASSWD:

也可以对组进行设置,将前面的用户名替换为 %组名

输入sudo -V 可以看到有关的配置信息

输入!取反作用,表示此命令不可执行

比如给一个用户设置/usr/sbin/下的所有命令,但 是其中有一条命令不想給该用户使用,可以用!取反

(三)别名

sudo别名有四种类型:

  • User_Alias(用户)

  • Runas_Alias(代表用户)

  • Host_Alias(登录主机)

  • Cmnd_Alias(命令)

别名格式:必须大写字母,数字可以使用但是不能放在开头

(四)子目录

子目录可以对单个用户进行设置,在/etc/sudoers.d/文件下,建一个文件文件,最好与用户名相同,方便辨认