Linux 操作系统安全配置

Posted by Xavier Blog on December 26, 2023

“Yeah It’s on. ”

操作系统安全配置

1、基本安全措施

(1)系统账号清理、锁定

(1) 系统账号清理、锁定 在 Linux 系统中,除了用户手动创建的各种账号外,还包括随系统或程序安装过程中生成的大量其他账号,除了超级用户 root 之外,其他大量的账户只是用来维护系统运作、启动或保持服务进程,一般不允许登陆,称为非登录用户。为了保持系统安全,这些用户的登陆 shell 通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动

a锁

1
chattr +a /etc/passwd /etc/shadow #给密码文件加a锁

查锁

1
lsattr 

加了a锁后不能创建新用户,加了a锁,可以追加内容到文件中

i锁

1
chattr +i /etc/passwd /etc/shadow #给密码文件加a锁

(2)密码安全控制

在不安全的网络环境中,为了降低密码被猜出或暴力破解(穷举) 的风险,用户应养成定期更改密码的习惯,应避免长期使用同一个密码。管理员可以在服务器端限制用户密码使用最大有效期天数,对密码已过期的用户,登录时要求重新设置密码,否则拒绝登录

1
2
3
4
5
6
vim /etc/login.defs
PASS_MAX_DAYS  30
PASS_MIN_DAYS  0
PASS_MIN_LEN5  5
PASS_WARN_AGE  7

1
chage -M 30 zhangsan #适用于已存在的用户,密码30天过期
1
chage -d 0 zhangsan #下次登录时,必须更改密码

(3) 命令历史

shell 环境下,命令历史机制为用户提供了极大的便利,但也带来了一些潜在的风险只有获得用户的命令历史记录,该用户的命令操作将一览无余,如果曾经在命令行输入了明文的密码,则服务器的安全将受到威胁。历史命令记录条数有变量 HISTSIZE 控制,默认 1000条,可修改配置文件,影响系统中的所有用户。

(4)自动注销

bash 终端环境中,可设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端。这样可以有效避免当管理员不在时其他人员对服务器的误操作风险,闲置超时由变量 TMOUT 控制,默认单位为秒 (s)

1
export TMOUT=600

2、用户切换与提权

su命令切换用户

使用su命令,可以切换一个指定的用户,拥有该用户的所有权限

选项“-”等同于”–login”或”-l”表示切换用户后进入目标用户的登录 shell 环境,若不带此选项则仅切换身份,不切换用户环境 默认所有用户允许使用 su 命令,从而有机会反复尝试其他用户(root) 的登陆密码带来安全风险。可以使用 pam wheel 认证模块,只允许极个别用户使用 su 命令进行切换

su 只是切换了身份用户,其他的比如shell,变量啥的都没有变,还是用的root的

su - 切换用户身份和所在位置,shell,变量都换

3、PAM可插拔认证模块

(1)PAM简介

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

​ PAM提供了对所有服务进行认证的中央机制,适用于Login,远程登录(telent,rlogin,fsh,ftp ),su等应用程序。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。

(2)PAM认证原理

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

用户访问服务器的时候,服务器的某一个服务进程把用户的请求发送到 PAM 模块进行认证。不同的应用程序所对应的 PAM 模块也是不同的。如果想查看某个程序是否支持 PAM证,可以用 ls命令进行查看,如查看 su 是否支持PAM模块认证:ls /etc/pam.d grep su

(3)PAM认证的构成

  • 每一行都是一个独立的认证过程
  • 每一行可以区分为三个字段: 认证类型、控制类型、PAM 模块及其参数

image-20231226150459299

(4)四种常见认证类型

  • auth 认证管理 接受用户名和密码,进而对该用户的密码进行认证
  • account 账户管理 检查账户是否被允许登录系统,账号是否已过期,账号的登录是否有时间段的限制等
  • password 密码管理 主要是用来修改用户的密码
  • session 会话管理 主要是提供对会话的管理和记账

(5)常见的五种控制类型

  • required 验证失败时仍然继续,但返回Fail
  • requisite 验证失败则立即结束整个验证过程,返回Fail
  • sufficent 验证成功则立即返回,不再继续,否则忽略结果并继续
  • optional 不用于验证,只是显示信息(通常用于session类型)
  • include 不进行认证,转到后面PAM模块进行认证

while 组 中的用户,才能使用su

启用 pam_wheel 认证以后,未加入到 wheel 组内的其他用户将无法使用 su 命令,尝试进行切换时将提示“拒绝权限”从而将切换用户的权限控制在最小范围内。使用 su 命令切换用户的操作将会记录到安全日志/var/log/secure 文件中。

sudo命令——提升用户的执行权限

通过 su 命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登录密码。例如,若要从 linuxxu 用户切换为 root 用户,必须知道 root 用户的密码。对于生产环境中的 Linux 服务器,每多一个人知道特权密码,其安全风险也就增加一分。那么,有没有一种折中的办法,既可以让普通用户拥有一部分管理权限.又不需要将 root 用户的密码告诉他呢?答案是肯定的.使用 sudo 命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令

在配置文件/etc/sudoqs 中添加授权,sudo 机制的配置文件为/etc/sudoers。文件的默认权限为 440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则系统将提示为只读文件而拒绝保存。

image-20231226154703992

授权配置主要包含用户,主机,命令三部分,即授权哪些人在哪些主机上执行哪些命令

  • 用户(user): 直接授权指定的用户名,或采用”%组名”的形式(授权一个组的所有用户)。
  • 主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可.
  • 命令(COMMANDS): 允许授权的用户通过 sudo 方式执行的特权命令。需填写命令程序的完整路径,多个命令之间以逗号进行分割

/var/log/sudo

系统引导和登录控制

开关机安全控制

(1)调整BLOS引导设置

禁止从其他设备引导系统(U盘,光驱,网络),对应的项为 Disabled。防止通过其他方式引导进入系统窃取数据。 将 BIOS 安全级别改为 setup,并设好管理密码,以防止未授权修改

禁止使用ctrl+Alt+Del快捷键重启

1
2
systemctl mask ctrl-alt-del.target   #禁止快捷键功能
systemctl daemon-reload              #重新加载systemd配置

systemctl mask 命令是用于注销指定服务的

登录控制

在linux中,默认开启了多个tty终端,允许任何用户进行本地登录

(1)禁止root用户登录

在linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些终端登录。若要禁止root用户从指定的终端登录,只需要注释或删除对应的行即可

image-20231227154304610

ctrl + alt +f2 切换登录终端

(2)禁止普通用户登录

当服务器在维护时,不希望普通用户登录系统,只需建立/etc/nologin 文件即可。当 login程序检测到/etc/nologin 文件存在时,将拒绝普通用户登录系统 (roott 除外)实际上是利用 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时使用。

1
touch /etc/nologin

弱口令检测、端口扫描

1、弱口令检测————John

在互联网环境中,过于简单的密码是服务器面临的最大风险,尽管大家知道设置一个更长、更复杂的密码会更安全,但总有人贪图方便而采用简单、易记的密码。对于任何一个承担着安全责任的管理员,及时找出这些弱口令账户是非常重要的,这样更容易采取安全措施。 John the Ripper 是一款开源的密码破解工具,能在已知密文的情况下,快速分析明文的密码字串,支持 DES、MD5 等多种加密算法,允许使用密码字典进行暴力破解。通过 John theRipper,可以检测 Linux/UNIX 系统用户的密码强度John the Ripper 的官方网站是 http://www.openwall.com/john, 通过该网站可以获取稳定版源码包。

image-20231227162610880

2、网络扫描———NMAP

NMAP 是一款强大的端口扫描类安全评测工具,支持 ping 扫描、多端口检测、OS 识别等多种技术。使用 NMAP 定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,较少安全风险。

参数说明:

-v 表示显示冗余信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。

-O: 显示出操作系统的类型。 每一种操作系统都有一个指纹。

-sS:半开扫描(half-open)

–randomize_hosts : 随机扫描,对目标主机的顺序随机划分

–scan-delay :延时扫描,单位秒,调整探针之间的延迟

常用扫描类型:

  • nmap 192.168.1.63 使用 nmap 扫描一台服务器
  • nmap -v 192.168.1.63 扫描一台机器,查看它打开的端口及详细信息。
  • nmap -p 1-65535 192.168.1.63 扫描一个范围: 端口 1-65535
  • nmap -sS -O baidu.com 扫描一台机器:查看此服务器开放的端口号和操作系统类型。
  • nmap -sS -O 192.168.1.0/24 扫描一个网段中所有机器是什么类型的操作系统。
  • 如何更隐藏的去扫描,频繁扫描会被屏蔽或者锁定 IP 地址。
    • 随机扫描 nmap -v –randomize-hosts -p 80 192.168.1.62-69
    • 随机扫描+延时扫描 ,默认单位秒 nmap -v –randomize-hosts –scan-delay 3000ms -p 80 192.168.1.62-69