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. 权限管理
chmod
和chown
:这些命令在所有Linux发行版中通用。chmod
用于更改文件或目录的访问权限,如chmod 755 filename
。chown
更改文件或目录的所有者和/或所属组,如chown user:group filename
。setfacl
和getfacl
:提供了更细粒度的权限控制。例如,setfacl -m u:username:rwx file
为特定用户设置文件权限。这在各个发行版中都有支持,但可能需要安装acl
包。
4. 用户和组管理
useradd
和userdel
:这些基础命令在所有主流Linux发行版中都是相同的。useradd
用于创建新用户,userdel
用于删除用户。adduser
和deluser
:在一些发行版(如Debian/Ubuntu)中,这些命令提供了useradd
和userdel
的更友好的接口,包括更多的默认行为(如创建用户主目录)。usermod
:用于修改用户账户,例如更改用户名或所属组。这在各个发行版中都是标准命令。
5. 高级用户管理
visudo
:编辑sudoers文件,控制哪些用户和组可以使用sudo
以及他们可以执行的命令。这对于在多用户环境中限制管理员权限非常重要。chage
:用于更改和查看用户密码过期信息。例如,chage -l username
查看用户的密码过期信息,这在强制密码策略方面很有用。
6. 安全上下文和SELinux
ls -Z
和chcon
:在使用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
:查找登录失败的尝试,关键用于安全事件分析,比如检测暴力破解尝试。
awk
和sed
命令应用:awk -F ':' '{print $1}' /etc/passwd
:打印passwd文件中每行的第一列,常用于提取特定信息,如用户名列表。sed 's/old/new/g' file.txt
:将文件中所有old字符串替换为new,用于快速修改文件内容,如配置文件更新。
2. 系统状态命令
top
:显示当前活动的进程。top -u username
显示指定用户的进程,top -i
忽略闲置和僵尸进程。df
和du
:磁盘使用情况。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。这些权限位对于系统安全至关重要,因为它们改变了文件或目录的标准行为。
- SetUID(SUID)
- 功能:当设置在可执行文件上时,用户运行该文件时,文件的进程将拥有文件所有者的权限,而不是运行它的用户的权限。
- 设置方法:
chmod u s filename
。这会在文件的权限表示中的用户执行位添加一个S
或s
(如果文件已经可执行)。 - 删除方法:
chmod u-s filename
。 - 示例:
/usr/bin/passwd
文件通常设置了SUID位,使得普通用户可以修改自己的密码,即使passwd
程序需要以root身份运行。 - 风险与管理:不当设置SUID可能导致安全风险。建议定期使用
find / -perm -4000 -exec ls -ldb {} ;
命令检查系统上设置了SUID的文件。
- SetGID(SGID)
- 功能:
- 在可执行文件上设置时:和SUID类似,但进程将获得文件所属组的权限。
- 在目录上设置时:该目录下新创建的文件将继承该目录的组,而不是创建者的主组。
- 设置方法:
chmod g s filename
或chmod g s directory
。 - 删除方法:
chmod g-s filename/directory
。 - 风险与管理:定期检查设置了SGID的文件和目录,使用
find / -perm -2000 -exec ls -ldb {} ;
。
- 功能:
- 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
查找失败的登录尝试。tail
和head
:查看文件的末尾或开头部分。tail -f /var/log/messages
实时监控系统日志。awk
:用于复杂的文本处理。例如,awk '{print $1}' /var/log/auth.log | sort | uniq -c | sort -nr
可以统计登录尝试的频率。sort
和uniq
:这两个命令经常与grep
或awk
配合使用,进行排序和统计唯一行。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系统中各种命令和对日志的分析是日常工作的基础。通过这些命令和技巧,我们可以有效地管理系统、诊断问题并保护系统免受安全威胁。持续学习和实践是保持技能现代化和应对新挑战的关键。