AI摘要:本文是一份Linux安全与运维实用指南,详细介绍了Linux系统中常用的命令和日志文件,包括文件和目录操作、定时任务、权限管理、用户和组管理、高级用户管理、安全上下文和SELinux等。同时,还提供了高级文件和系统管理命令,如查找与文本操作、系统状态命令、网络和进程监控、审计和日志分析等。最后,文章还介绍了日志分析与安全监控的相关知识,包括日志文件的位置和分析、敏感系统文件以及日志分析工具与技巧等内容。

Linux 安全与运维实用指南

引言

Linux作为许多服务器和网络环境的核心,具备高度的灵活性和强大的功能。本指南旨在深入介绍Linux系统中常用的命令和日志文件,帮助安全运维人员更有效地管理和保护Linux环境。

0x01 Linux基础命令

1. 文件和目录操作

  • ls:列出目录内容。使用ls -l 显示详细信息,对于安全检查,重点关注文件权限和修改时间,以识别潜在的未授权更改。
  • find:查找文件。find / -name 'filename' 在整个系统中查找特定文件,对于追踪恶意文件或不寻常的文件特别有用。
  • stat:查看文件或目录的具体信息,如修改时间、访问权限等,这对于确定文件是否被篡改非常关键。

2. 定时任务

  • crontab:管理用户的定时任务。crontab -e 编辑当前用户的定时任务,crontab -l 查看当前用户的定时任务列表。在安全事件响应中,检查和清理可能被恶意修改的定时任务是常见的步骤。
  • /etc/crontab:系统级的定时任务配置文件。与用户级的crontab不同,它可以指定任务由哪个用户运行。在安全审计中,检查此文件以确定是否有不寻常或未授权的任务。
  • /etc/cron.d/:目录包含系统级的定时任务文件。这些文件的格式类似于/etc/crontab。安全审计时应检查这个目录下的文件,以识别潜在的恶意任务。

3. 权限管理

  • chmodchown:这些命令在所有Linux发行版中通用。chmod 用于更改文件或目录的访问权限,如chmod 755 filenamechown 更改文件或目录的所有者和/或所属组,如chown user:group filename
  • setfaclgetfacl:提供了更细粒度的权限控制。例如,setfacl -m u:username:rwx file 为特定用户设置文件权限。这在各个发行版中都有支持,但可能需要安装acl包。

4. 用户和组管理

  • useradduserdel:这些基础命令在所有主流Linux发行版中都是相同的。useradd 用于创建新用户,userdel 用于删除用户。
  • adduserdeluser:在一些发行版(如Debian/Ubuntu)中,这些命令提供了useradduserdel的更友好的接口,包括更多的默认行为(如创建用户主目录)。
  • usermod:用于修改用户账户,例如更改用户名或所属组。这在各个发行版中都是标准命令。

5. 高级用户管理

  • visudo:编辑sudoers文件,控制哪些用户和组可以使用sudo以及他们可以执行的命令。这对于在多用户环境中限制管理员权限非常重要。
  • chage:用于更改和查看用户密码过期信息。例如,chage -l username 查看用户的密码过期信息,这在强制密码策略方面很有用。

6. 安全上下文和SELinux

  • ls -Zchcon:在使用SELinux的系统(如Red Hat/CentOS、Fedora)中,这些命令用于查看和更改文件的安全上下文。这对于维护符合SELinux策略的系统非常关键。

0x02 高级文件和系统管理命令

1. 查找与文本操作

  • find 命令应用

    • 按修改时间搜索:

      • find / -mtime -1:搜索在过去24小时内修改的文件,用于检测最近的文件更改。
      • find / -mmin -30:搜索在过去30分钟内修改的文件,用于快速定位最近可能受攻击的文件。
    • 按用户和组搜索:

      • find / -user username:搜索属于指定用户的所有文件,用于审计特定用户的文件活动。
      • find / -group groupname:搜索属于指定组的所有文件,有助于检查组级文件访问权限。
    • 组合条件搜索:

      • find / -name "*.log" -mtime -7:搜索在过去7天内修改过的所有.log文件,常用于日志文件分析。
      • find / -size +1M -size -5M:搜索大小在1MB到5MB之间的文件,有助于定位异常大小的文件。
    • 执行操作:

      • find / -type f -name "*.tmp" -exec rm {} \;:删除所有.tmp结尾的文件,用于清理临时或可疑文件。
      • find / -size +100M -exec mv {} /path/to/directory/ \;:将所有超过100MB的文件移动到指定目录,用于管理大文件。
    • 忽略某些目录:

      • find / -path /path/to/exclude -prune -o -name "*.txt" -print:搜索所有.txt文件,但忽略指定的目录,有助于提高搜索效率。
    • 按权限搜索:

      • find / -perm 644:搜索权限精确匹配644的文件,用于审计文件权限设置。
      • find / -perm /u=r:搜索用户可读的文件,有助于识别潜在的权限过度放宽的文件。
  • grep 命令应用

    • grep 'Failed' /var/log/auth.log:查找登录失败的尝试,关键用于安全事件分析,比如检测暴力破解尝试。
  • awksed 命令应用

    • awk -F ':' '{print $1}' /etc/passwd:打印passwd文件中每行的第一列,常用于提取特定信息,如用户名列表。
    • sed 's/old/new/g' file.txt:将文件中所有old字符串替换为new,用于快速修改文件内容,如配置文件更新。

2. 系统状态命令

  • top:显示当前活动的进程。top -u username 显示指定用户的进程,top -i 忽略闲置和僵尸进程。
  • dfdu:磁盘使用情况。df -h 以人类可读的格式显示磁盘空间,du -sh /path/to/directory 显示指定目录的总大小。
  • htop:提供更直观的界面和更多功能的进程监控工具。

3. 网络和进程监控

  • netstat:网络统计。netstat -tuln 查看所有监听端口,netstat -an | grep ESTABLISHED 查看建立的网络连接。
  • ss:现代化的网络连接监控工具,ss -tuln 查看监听端口,ss -tp 显示哪些进程正在使用哪些端口。
  • ps:查看当前进程。ps -aux 显示所有进程的详细列表,ps -aux | grep httpd 查找所有运行的httpd进程。
  • lsof:列出被进程打开的文件,lsof -i :80 显示所有打开80端口的进程。

4. 审计和日志分析

  • journalctl:系统日志管理,journalctl -u sshd 查看SSH服务的日志。
  • tcpdump:网络流量分析,tcpdump port 80 监控80端口的流量。

5. 特殊文件权限

Linux中的特殊权限位包括SetUID、SetGID和Sticky Bit。这些权限位对于系统安全至关重要,因为它们改变了文件或目录的标准行为。

  1. SetUID(SUID)

    • 功能:当设置在可执行文件上时,用户运行该文件时,文件的进程将拥有文件所有者的权限,而不是运行它的用户的权限。
    • 设置方法chmod u+s filename。这会在文件的权限表示中的用户执行位添加一个Ss(如果文件已经可执行)。
    • 删除方法chmod u-s filename
    • 示例/usr/bin/passwd 文件通常设置了SUID位,使得普通用户可以修改自己的密码,即使passwd程序需要以root身份运行。
    • 风险与管理:不当设置SUID可能导致安全风险。建议定期使用 find / -perm -4000 -exec ls -ldb {} \; 命令检查系统上设置了SUID的文件。
  2. SetGID(SGID)

    • 功能

      • 在可执行文件上设置时:和SUID类似,但进程将获得文件所属组的权限。
      • 在目录上设置时:该目录下新创建的文件将继承该目录的组,而不是创建者的主组。
    • 设置方法chmod g+s filenamechmod g+s directory
    • 删除方法chmod g-s filename/directory
    • 风险与管理:定期检查设置了SGID的文件和目录,使用 find / -perm -2000 -exec ls -ldb {} \;
  3. Sticky Bit

    • 功能:主要用于目录。当设置在目录上时,只有文件所有者、目录所有者或root用户可以删除或修改目录中的文件,即使该目录对其他用户是可写的。
    • 设置方法chmod o+t directory
    • 删除方法chmod o-t directory
    • 示例/tmp 目录通常设置了Sticky Bit,以防止普通用户删除或更改其他用户的临时文件。
    • 风险与管理:使用 find / -perm -1000 -exec ls -ldb {} \; 检查设置了Sticky Bit的目录。

0x03 日志分析与安全监控

1. 日志文件的位置和分析

  • 重要日志文件及其作用

    • 安全日志/var/log/secure (包含验证和授权信息,如SSH登录尝试,关键用于追踪未授权访问尝试)
    • 系统日志/var/log/syslog (Debian系系统) 或 /var/log/messages (RedHat系系统) (记录系统运行信息,有助于诊断系统级问题)
    • Web服务日志:如Apache的/var/log/access.log/var/log/error.log (记录Web访问和错误信息,对于分析网站安全事件至关重要)
    • 应用程序日志:如数据库服务(MySQL, PostgreSQL)的/var/log/mysql/和邮件服务(Postfix, Sendmail)的/var/log/mail/ (记录操作和错误信息,用于追踪应用级别的安全问题)
    • 认证日志/var/log/auth.log (Debian系系统)、/var/log/secure (CentOS/RHEL系系统) — 这些日志文件记录用户认证信息,包括登录、sudo请求等。它们是关键资源,用于追踪权限提升和内部威胁。监控这些日志可以帮助识别未授权访问尝试和其他潜在的安全风险。
    • 内核日志/var/log/kern.log (记录与内核相关的消息,关键用于调查系统崩溃和硬件问题)
    • 启动日志/var/log/boot.log (记录系统启动过程中的信息,有助于诊断启动时出现的问题)
    • 历史命令日志~/.bash_history/root/.bash_history (记录用户的命令历史,可以用来追踪用户的操作历史,尤其在调查安全事件时非常重要)

2. 敏感系统文件

  • 敏感配置文件

    • /etc/passwd/etc/shadow:存储用户账户信息和加密后的密码,监控这些文件有助于发现未授权的用户账号更改。
    • /etc/sudoers:定义了哪些用户具有sudo权限,监控此文件有助于检测未授权的权限提升。
    • /etc/ssh/sshd_config: SSH守护进程的配置文件,定义了SSH服务的配置选项,如端口号、允许的认证方法、登录尝试次数等。
    • /etc/group:存储用户组信息,包括组名、组密码、组ID和组内成员。监控此文件有助于发现未授权的用户组更改,如新用户被添加到特权组。
    • /etc/hosts:用于存储静态的主机名与IP地址映射。更改此文件可能影响系统中的网络配置,监控它可以帮助识别DNS欺骗或网络攻击尝试。
    • /etc/crontab/etc/cron.\*/\*:存储计划任务配置。监控这些文件可以防止恶意代码被安排定期执行,这是许多恶意软件保持持久性的常见方式。
    • /root/.ssh/authorized_keys:存储有权限远程访问root用户的SSH密钥。监控此文件可以发现未授权的SSH密钥添加,这是一个常见的横向移动和持久化技术。

3. 日志分析工具与技巧

  • 常用日志分析命令

    • grep:用于查找特定模式。例如,grep 'Failed' /var/log/secure 查找失败的登录尝试。
    • tailhead:查看文件的末尾或开头部分。tail -f /var/log/messages 实时监控系统日志。
    • awk:用于复杂的文本处理。例如,awk '{print $1}' /var/log/auth.log | sort | uniq -c | sort -nr 可以统计登录尝试的频率。
    • sortuniq:这两个命令经常与grepawk配合使用,进行排序和统计唯一行。
    • less:与cat类似,但更适合查看较大文件。例如,使用less /var/log/syslog 可以逐行或逐页查看日志文件。
    • journalctl:用于Systemd系统的日志管理。例如,journalctl -u nginx 查看Nginx服务的日志。
    • logrotate:用于管理日志文件的轮换和存档。配置文件通常位于/etc/logrotate.conf/etc/logrotate.d/
  • 日志分析技巧

    • 关键词搜索:例如,搜索"error", "failed", "denied" 等关键词可以快速定位问题。
    • 时间戳对比:检查与事件相关的时间戳,帮助确定事件发生的顺序。
    • IP地址和用户分析:分析异常的IP地址或用户行为,如频繁的登录尝试或不寻常的访问模式。
    • 日志关联分析:结合多个日志源,如系统日志和应用日志,提供更全面的视图。

结语

作为一名安全运维工程师,熟练掌握Linux系统中各种命令和对日志的分析是日常工作的基础。通过这些命令和技巧,我们可以有效地管理系统、诊断问题并保护系统免受安全威胁。持续学习和实践是保持技能现代化和应对新挑战的关键。