系统安全及应用

目录

一、账号安全控制

(一)基本安全措施

(二)用户切换与提权

二、系统引导和登录控制

(一)开关机安全控制

(二)终端及登录控制

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

(一)弱口令检测

(二)端口扫描


一、账号安全控制

(一)基本安全措施

  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:显示处于监听状态的网络连接及端口信息。
相关推荐
Jackilina_Stone13 分钟前
【网工第6版】第5章 网络互联①
网络·软考·考试·网络互联·网工
Run1.15 分钟前
深入解析 Linux 文件系统中的软硬链接:从原理到实践
linux·运维·服务器
侦探已死48816 分钟前
Python 网络编程:TCP 与 UDP 协议详解及实战代码
网络·python·udp·学习笔记·tcp
学网络的APang17 分钟前
APang网联科技项目报告(服务器域管理篇)
运维·服务器·网络·科技
颇有几分姿色35 分钟前
深入理解路由器、IP地址及网络配置
java·网络·计算机网络
Tony11541 小时前
【eNSP实验】OSPF单区域配置
网络
sky.fly1 小时前
RIP动态路由(三层交换机+单臂路由)
服务器·网络·windows
you秀1 小时前
ubuntu20.04安装安装x11vnc服务基于gdm3或lightdm这两种主流的显示管理器。
linux·运维·服务器
万山y1 小时前
使用一个公网服务器做内网穿透超详细
运维·服务器
自由鬼1 小时前
开源身份和访问管理(IAM)解决方案:Keycloak
服务器·数据库·安全·开源·身份认证·单点登录