系统安全及应用

目录

一、账号安全控制

(一)基本安全措施

(二)用户切换与提权

二、系统引导和登录控制

(一)开关机安全控制

(二)终端及登录控制

三、弱口令检测、端口扫描

(一)弱口令检测

(二)端口扫描


一、账号安全控制

(一)基本安全措施

  1. 系统账号清理
    在 Linux 系统里,除了手动创建的账号,还有很多随系统或程序安装产生的账号。像 bin、daemon、adm、lp、mail 这些非登录用户账号,主要用于维持系统运行、启动或保持服务进程,通常不允许登录。查看这些账号的登录 Shell 是否为 /sbin/nologin(禁止终端登录),可使用命令:

    grep "/sbin/nologin" /etc/passwd

输出结果类似:

复制代码
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

为防止 /etc/passwd 和 /etc/shadow 文件被随意修改,增强系统安全性,可执行:

复制代码
chattr +i /etc/passwd /etc/shadow

此时若尝试新增用户,如:

复制代码
useradd billgate

会出现报错信息,提示无法打开 /etc/passwd 文件,这表明文件的保护机制生效。

  1. 密码安全控制

为降低密码在不安全网络环境中被猜出或暴力破解的风险,用户应养成定期更改密码的习惯。管理员可在服务器端设置用户密码的最大有效天数。

对于新建用户,编辑 /etc/login.defs 文件,找到并修改PASS_MAX_DAYS的值为 30(即设置密码有效期为 30 天):

复制代码
vi /etc/login.defs

在文件中找到PASS_MAX_DAYS这一行,修改为:

复制代码
PASS_MAX_DAYS 30

对于已有用户(例如 lisi),使用 chage 命令来设置密码有效期为 30 天:

复制代码
chage -M 30 lisi

在某些特殊情况下,如要求批量创建的用户初次登录时必须自设密码,或统一要求所有用户更新密码,管理员可执行强制策略。以强制用户 zhangsan 下次登录时重设密码为例,执行:

复制代码
chage -d 0 zhangsan

当 zhangsan 登录系统时,会收到强制修改密码的提示:

复制代码
Localhost login: zhangsan
password:
You are required to change your password immediately (root enforced)
Changing password for zhangsan.
(current) UNIX password:
New password:
Retype new password:
  1. 命令历史、自动注销
    在 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认是 1000 条。为减少因命令历史记录带来的安全风险,可修改该变量值。
    若想影响系统中的所有新登录用户,编辑 /etc/profile 文件:

    vi /etc/profile

找到HISTSIZE变量,将其值修改为 200(即最多只记录 200 条历史命令):

复制代码
HISTSIZE=200

对于当前用户,可直接在命令行执行:

复制代码
export HISTSIZE=200

另外,还能通过修改用户宿主目录中的~/.bash_logout 文件,实现用户退出 Bash 环境时自动清空历史命令。编辑该文件:

复制代码
vi ~/.bash_logout

在文件中添加:

复制代码
history -c
clear

Bash 终端环境可设置闲置超时时间,由变量 TMOUT 控制,默认单位为秒(s)。同样在 /etc/profile 文件中进行设置,以设置闲置超时时间为 600 秒(10 分钟)为例:

复制代码
vi /etc/profile

添加或修改:

复制代码
export TMOUT=600

对于当前用户,执行:

复制代码
export TMOUT=600

不过,在执行耗时较长的操作(如程序代码编译、修改系统配置等)时,应避免设置 TMOUT 变量,必要时可执行:

复制代码
unset TMOUT

取消 TMOUT 变量设置。

(二)用户切换与提权

  1. su 命令的用法
    使用 su 命令可切换为指定的另一个用户,从而获取该用户的所有权限。从普通用户 jerry 切换为 root 用户,执行:

    [jerry@localhost ~]$ su - root
    密码:
    [root@localhost ~]#

这里的选项 "-" 等同于 "--login" 或 "-l",表示切换用户后进入目标用户的登录 Shell 环境;若缺少此选项,仅切换身份,不切换用户环境。并且从 root 用户切换为其他用户时,无需验证密码。

默认情况下,任何用户都能使用 su 命令,这存在安全风险。借助 pam_wheel 认证模块,可加强对 su 命令的使用控制。先将授权使用 su 命令的用户添加到 wheel 组,例如添加用户 tsengyia:

复制代码
[root@localhost ~]# gpasswd -a tsengyia wheel
正在将用户"tsengyia"加入到"wheel"组中

确认 wheel 组成员:

复制代码
[root@localhost ~]# grep wheel /etc/group
wheel:x:10:tsengyia

接着修改 /etc/pam.d/su 认证配置文件,启用 pam_wheel 认证:

复制代码
[root@localhost ~]# vi /etc/pam.d/su

找到#auth required pam_wheel.so use_uid这一行,去掉开头的 "#" 号。

启用 pam_wheel 认证后,未加入 wheel 组的用户尝试使用 su 命令切换用户时,会提示 "拒绝权限"。如用户 jerry 尝试切换为 root 用户:

复制代码
[jerry@localhost ~]$ su - root
密码:
su:拒绝权限
[jerry@localhost ~]$

使用 su 命令切换用户的操作会被记录到安全日志 /var/log/secure 文件中,可根据需要查看:

复制代码
tail -f /var/log/secure
  1. PAM 认证
    PAM(Pluggable Authentication Modules)是 Linux 系统的可插拔认证模块,是一种高效且灵活便利的用户级认证方式,广泛应用于 login、远程登录(telnet、rlogin、ssh、ftp)、su 等应用程序中。
    PAM 认证的一般顺序是:Service(服务)→PAM(配置文件)→pam_*.so。即首先确定要认证的服务,然后加载相应的 PAM 配置文件(位于 /etc/pam.d 下),最后调用认证文件(位于 /lib/security 下)进行安全认证。

查看某个程序是否支持 PAM 认证,以 su 为例,使用命令:

复制代码
ls /etc/pam.d/|grep su

输出结果可能包含 su、sudo、sudo - i 等,表明这些程序支持 PAM 认证。

查看 su 的 PAM 配置文件内容:

复制代码
[root@localhost ~]# cat /etc/pam.d/su
#%PAM - 1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth substack system - auth
auth include postlogin
account sufficient pam_succeed_if.so uid=0 use_uid quiet
account include system - auth
password include system - auth
session include system - auth
session include postlogin
session optional pam_xauth.so

配置文件中每一行都是一个独立的认证过程,分为认证类型、控制类型、PAM 模块及其参数三个字段。认证管理负责验证用户名和密码;帐户管理检查帐户是否允许登录系统、是否过期等;密码管理用于修改用户密码;会话管理提供对会话的管理和记账。

控制类型(Control Flags)用于处理 PAM 验证类型的返回结果:

  • required:验证失败时仍然继续,但返回 Fail。
  • requisite:验证失败则立即结束整个验证过程,返回 Fail。
  • sufficient:验证成功则立即返回,不再继续,否则忽略结果并继续。
  • optional:不用于验证,只是显示信息(通常用于 session 类型)。
  1. sudo 命令 ------ 提升执行权限

  2. 在配置文件 /etc/sudoers 中添加授权
    sudo 机制的配置文件是 /etc/sudoers,默认权限为 440,需使用专门的 visudo 工具进行编辑(若使用 vi 编辑,保存时必须执行 ":w!" 命令强制操作,否则系统会提示为只读文件而拒绝保存)。
    授权记录的基本配置格式为:user MACHINE=COMMANDS,分别表示授权哪些人在哪些主机上执行哪些命令。
    例如,授权用户 jerry 能够执行 ifconfig 命令来修改 IP 地址,以及 wheel 组的用户无需验证密码即可执行任何命令,操作如下:

    [root@localhost ~]# visudo

在文件中添加:

复制代码
jerry localhost=/sbin/ifconfig
%wheel ALL=NOPASSWD:ALL

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

例如,允许用户 jerry、tom、tsengyia 在主机 smtp、pop 中执行 rpm、yum 命令,操作如下:

复制代码
[root@localhost ~]# visudo

在文件中添加:

复制代码
User_Alias OPERATORS=jerry,tom,tsengyia
Host_Alias MAILSVRS=smtp,pop
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
OPERATORS MAILSVRS=PKGTOOLS

sudo 配置记录的命令部分允许使用通配符 "*"、取反符号 "!"。比如,授权用户 syrianer 可以执行 /sbin/ 目录下除 ifconfig、route 以外的其他所有命令程序,操作如下:

复制代码
[root@localhost ~]# visudo

在文件中添加:

复制代码
syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route

默认情况下,通过 sudo 方式执行的操作并不记录。若要启用 sudo 日志记录以备管理员查看,在 /etc/sudoers 文件中增加 "Defaults logfile" 设置:

复制代码
[root@localhost ~]# visudo

查找 Defaults,在前面添加一行内容:

复制代码
Defaults logfile="/var/log/sudo"
  1. 通过 sudo 执行特权命令
    对于已获得授权的用户,通过 sudo 方式执行特权命令时,将正常的命令行作为 sudo 命令的参数,且特权命令程序通常位于 /sbin、/usr/sbin 等目录下,需使用绝对路径。
    例如,用户 jerry 执行修改 IP 地址操作,未使用 sudo 时:

    [jerry@localhost ~]$ /sbin/ifconfig ens33:0 192.168.1.11/24
    SIOCSIFADDR:不允许的操作
    SIOCSIFFLAGS:不允许的操作
    SIOCSIFNETMASK:不允许的操作

使用 sudo 时:

复制代码
[jerry@localhost ~]$ sudo /sbin/ifconfig ens33:0 192.168.1.11/24
[sudo] password for jerry:

输入 jerry 的密码后,即可成功执行命令。查看执行结果:

复制代码
[jerry@localhost ~]$ /sbin/ifconfig ens33:0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
ether 00:0c:29:3b:ff:76  txqueuelen 1000 (Ethernet)

在当前会话过程中,第一次通过 sudo 执行命令时,必须以用户自己的密码(不是 root 用户或其他用户的密码)进行验证。此后再次通过 sudo 执行命令时,只要与前一次 sudo 操作的间隔时间不超过 5min(分),则不再重复验证。

若要查看用户自己获得哪些 sudo 授权,执行:

复制代码
sudo -l

未授权的用户将会得到 "may not run sudo" 的提示,已授权的用户则可以看到自己的 sudo 配置。例如,用户 syrianer 查看授权:

复制代码
[syrianer@localhost ~]$ sudo -l
[sudo] password for syrianer:
用户syrianer可以在该主机上运行以下命令:
(root) /sbin/*,(root)!/sbin/ifconfig,(root)!/sbin/route

如果已经启用 sudo 日志,则可以从 /var/log/sudo 文件中看到用户的 sudo 操作记录:

复制代码
[root@localhost ~]# tail /var/log/sudo
Aug 24 23:59:44 :jerry : TTY=pts/0 ;PWD=/home/jerry ; USER=root ; COMMAND=/sbin/ifconfig ens33:0 192.168.1.11/24
Aug 25 00:00:46 : syrianer:TTY=pts/1;PWD=/home/syrianer;USER=root;COMMAND=list

二、系统引导和登录控制

(一)开关机安全控制

在 Linux 系统中,使用 grub2 - mkconfig 命令生成新的 grub.cfg 配置文件:

复制代码
[root@localhost ~]# grub2 - mkconfig -o /boot/grub2/grub.cfg

执行该命令后,系统会显示类似如下信息:

复制代码
grub configuration file
Found linux image: /boot/vmlinuz - 3.10.0 - 514.e17.x86_64
Found initrd image: /boot/initramfs - 3.10.0 - 514.e17.x86_64.img
Found linux image: /boot/vmlinuz - 0 - rescue - b15df1eb8205483f9f70c79709810abc
Found initrd image: /boot/initramfs - 0 - rescue - b15df1eb8205483f9f70c79709810abc.img
done

通过上述配置,重新开机进入 GRUB 菜单时,按 E 键将无法修改引导参数。若要获得编辑权限,必须根据提示输入正确的 GRUB 密码。注意,为 GRUB 设置密码时,"grub.pbkdf2.sha512.." 部分可替换为明文的密码字符串(如 "123456"),但安全性稍差,不建议使用。

(二)终端及登录控制

  1. 禁止 root 用户登录
    在 Linux 系统中,login 程序会读取 /etc/securetty 文件,以决定允许 root 用户从哪些终端(安全终端)登录系统。若要禁止 root 用户从指定的终端(如 tty5、tty6)登录,修改 /etc/securetty 文件:

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

找到 tty5、tty6 对应的行,在前面添加 "#" 号进行注释:

复制代码
#tty5
#tty6
  1. 禁止普通用户登录
    当服务器正在进行备份或调试等维护工作时,不希望再有新的用户登录系统,可建立 /etc/nologin 文件:

    [root@localhost ~]# touch /etc/nologin

此时,login 程序会检查 /etc/nologin 文件是否存在,如果存在,则拒绝普通用户登录系统(root 用户不受限制)。该方法利用了 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时使用。当手动删除 /etc/nologin 文件或者重新启动主机以后,即可恢复正常登录。

复制代码
[root@localhost ~]# rm /etc/nologin

三、弱口令检测、端口扫描

(一)弱口令检测

  • 工具:John the Ripper 是一款常用的开源密码分析工具,支持字典式暴力破解,通过对 shadow 文件的口令分析来检测密码强度1。
  • 检测步骤 7:
    • 安装 :从官网下载 John the Ripper,解压后进入源码目录执行make clean linux - x86 - 64,在run子目录下会生成名为john的可执行程序。
    • 准备文件 :将/etc/shadow文件复制到其他位置,如cp /etc/shadow /root/a.txt
    • 直接检测 :执行./john /root/a.txt进行暴力破解,可使用./john --show /root/a.txt查看已破解出的账户列表。
    • 使用字典文件检测 :John the Ripper 默认提供的字典文件为password.lst,也可使用其他字典文件。执行./john --wordlist=./password.lst /root/a.txt,使用指定字典文件进行破解。

(二)端口扫描

  • NMAP
    • 简介:NMAP 是一个强大的端口扫描类安全评测工具,支持多种扫描技术,如 ping 扫描、多端口检测、OS 识别等1。
    • 常用选项与扫描类型 4:
      • -p :指定扫描的端口,如nmap -p 80,443 192.168.1.100,扫描目标主机的 80 和 443 端口。
      • -n:禁用反向 DNS 解析,加快扫描速度。
      • -sS :TCP 的 SYN 扫描(半开扫描),只向目标发出 SYN 数据包,收到 SYN/ACK 响应包则认为目标端口正在监听,立即断开连接。如nmap -sS 192.168.1.100
      • -sT :TCP 连接扫描,建立完整的 TCP 连接,成功则认为目标端口正在监听服务。例如nmap -sT 127.0.0.1查看本机开放的 TCP 端口。
      • -sU :UDP 扫描,探测目标主机提供的 UDP 服务,速度较慢,如nmap -sU 192.168.1.100
      • -sP:ICMP 扫描,类似 ping 检测,快速判断目标主机是否存活,不做其他扫描。
      • -Pn:跳过 ping 检测,认为所有目标主机存活,当对方不响应 ICMP 请求时使用,避免因无法 ping 通而放弃扫描。
      • -v:显示扫描过程。
      • -oN/-oX/-oG :将报告写入文件,分别为正常、XML、grepable 三种格式,如nmap -oN scan_result.txt 192.168.1.100
  • netstat 5
    • 简介:用于查看系统网络连接状态、路由表等信息。
    • 常用选项
      • -a:显示主机中所有活动的网络连接信息,包括监听、非监听状态的服务端口。
      • -n:以数字形式显示相关的主机地址、端口等信息。
      • -t :查看 TCP 相关信息,如netstat -natp查看正在运行的使用 TCP 协议的网络状态信息。
      • -u :显示 UDP 协议相关信息,netstat -naup查看正在运行的使用 UDP 协议的网络状态信息。
      • -p:显示与网络连接相关联的进程号、进程名称信息,需 root 权限。
      • -l:显示处于监听状态的网络连接及端口信息。
相关推荐
爬树的小蚂蚁27 分钟前
Linux 修改bond后网关不生效的问题
linux·运维·服务器
洁洁!29 分钟前
从零开始在亚马逊云科技 EC2上部署DeepSeek R1大语言模型:完整实战指南
服务器·科技·语言模型
lisw052 小时前
网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
网络·devops
风行無痕4 小时前
Ubuntu Linux系统配置账号无密码sudo
linux·服务器·ubuntu
驱动小百科5 小时前
WiFi出现感叹号上不了网怎么办 轻松恢复网络
网络·智能路由器·wifi出现感叹号怎么解决·wifi无法上网·电脑wifi
好多知识都想学5 小时前
协议路由与路由协议
网络·智能路由器
SZ1701102315 小时前
中继器的作用
服务器·网络·智能路由器
chenxy025 小时前
如何快速分享服务器上的文件
运维·服务器
重启就好6 小时前
【Ansible】模块详解
linux·服务器·ansible
Huazzi.6 小时前
Ubuntu 22虚拟机【网络故障】快速解决指南
linux·网络·学习·ubuntu·bash·编程