发布于 2026-01-05 2 阅读
0

Linux 安全加固简介

Linux 安全加固简介

好久不见!最近我一直在忙很多项目,其中一个最重要的项目是关于Linux系统加固的。这周我要就此发表演讲,我想提前和大家分享一些内容。

首先,Linux 加固旨在提高系统的安全级别,主要通过底层命令来检查和编辑基本/默认的操作系统值。

加密

我们可以使用 LUKS 进行磁盘和卷加密。另一方面,我们可以使用openssl其他方式gpg加密不同类型的文件。让我们来看看这两种选择:

$ gpg --output nombre_salida --passphrase nuestra_contraseña --batch --no-tty --symmetric archivo_a_cifrar
$ openssl rsautl -encrypt -pubin -inkey miclave.pub -ssl -in archivo_a_cifrar -out salida
Enter fullscreen mode Exit fullscreen mode

第一种方法允许我们使用密码短语加密大文件,而第二种方法使用公钥,但不能加密大文件。

许可证

该命令ls -ahl /home/ 2>/dev/null允许我们检查home权限。我们可以查看除某个目录(我们称之为“example”)及其内容之外的所有写入权限find / -perm -222 -type d -not -path "/ejemplo/*"和执行权限find / -executable -type d。该find工具基本上允许我们查找目录和文件,-type d其中有很多选项可以搜索目录:

  • b块(缓冲)特殊
  • c 字符(无缓冲)特殊
  • d 目录
  • p 管(先进先出)
  • f 常规文件
  • l 符号链接
  • s 插座
  • D 门(Solaris)

检查账户密码是否为空非常重要。我们可以在以下位置查看此信息/etc/shadows。以下是一个用户账户示例:

ejemplousuario:$6$XOivHvJZ$DthDIzmVnzMigsByXQ2diHJZ9LFbROkyGyXnZ.98t5vpECl96Jmk621hquET/z8fbS9L5n4sFvTsvMtkBSWJM/:17911:0:99999:7:::
Enter fullscreen mode Exit fullscreen mode

基本上,我们按顺序查找以下信息:用户名、密码算法、密码、上次更改时间(自 1970 年 1 月 1 日起)、密码更改所需的最短天数、密码有效期的最长天数、用户被要求更改密码的天数、密码过期时间(示例中未包含)和绝对过期日期(示例中未包含)。不过,我们可以使用以下工具更轻松地查看相关的密码策略
grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs 2>/dev/null

awk -F: '($2 == "") {print}' /etc/shadow
Enter fullscreen mode Exit fullscreen mode

此命令允许我们检查账户密码是否为空,方法是检查上述结构中的第二个值。我们还可以使用:

awk -F: '($3 == "0") {print}' /etc/passwd
Enter fullscreen mode Exit fullscreen mode

检查是否只有rootUID 0,如果不是,我们需要处理。

实体安全

我们不能忘记系统也需要物理保护!BIOS 和 GRUB 引导加载程序都应该设置密码。同时禁用 USB 启动。Fedora、CentOS 等系统可以通过按键 l 进行交互式启动,我们可以通过编辑相关/etc/sysconfig/init设置,将提示符改为“no”来禁用此PROMPT=no功能。禁用 USB 大容量存储驱动程序可以限制系统中的 USB 设备数量,从而避免通过 Rubber Ducky、劣质 USB 等方式发起的攻击。

$ ls -l /lib/modules/$(uname -r)/kernel/drivers/usb/storage/usb-storage.ko
Enter fullscreen mode Exit fullscreen mode

我们还可以设置一个设备黑名单,禁止对配置的设备进行任何blacklist.conf操作/etc/modprobe.d/

SSH

我们可以使用以下命令检查 root 用户是否允许通过 SSH 登录:

$ grep "PermitRootLogin " /etc/ssh/sshd_config 2>/dev/null | grep -v "#" | awk '{print  $2}'
Enter fullscreen mode Exit fullscreen mode

说到这里,建议使用公钥进行安全登录。

$ ssh-keygen -t key_type -b bits -C "comentario"
$ ssh-keygen -t ed25519 -C "Login al cluster de produccion"
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_aws_$(date +%Y-%m-%d) -C "AWS para clientes"
Enter fullscreen mode Exit fullscreen mode

要安装密钥,我们可以使用ssh-copy-id。我们还可以使用AllowUsers和来限制访问DenyUsers,以及PermitEmptyPasswords no禁用空密码。

定时任务

使用该工具,ls -la /etc/cron*我们可以快速检查按小时、按天、按月和按周设置的作业。我们可以使用该工具cron.d对 crontab 文件进行模块化扫描,但如果要检查单个实时 crontab 文件,可以使用该工具ls -la /var/spool/cron/crontabs

其他的

我们还可以使用 `.` 命令检查当时还有哪些用户连接w 2>/dev/null。我们还可以root使用 `.` 命令检查具有权限的用户和组grep -v -e '^$' /etc/sudoers |grep -v "#"。我们这样做是为了避免使用注释行(` #.`)。`.` 还/etc/login.defs包含一些有用的用户信息,useradd例如,groupadd它会使用来自此文件的值。我们还可以尝试使用 `.` 命令检查 umask 值umask -S & umask(符号值-S和八进制值)。为了避免 SNMP 反射攻击,我们可以使用 `.` 命令检查 SNMP 的默认端口cat /etc/services | grep -i snmp

为了安全起见,我鼓励大家尝试、编写脚本并运用这些信息!:)

文章来源:https://dev.to/terceranexus6/introduction-to-linux-hardening-5aj1