Linux 安全与运维实用指南
Linux作为许多服务器和网络环境的核心,具备高度的灵活性和强大的功能。本指南旨在深入介绍Linux系统中常用的命令和日志文件,帮助安全运维人员更有效地管理和保护Linux环境。
ls:列出目录内容。使用ls -l 显示详细信息,对于安全检查,重点关注文件权限和修改时间,以识别潜在的未授权更改。find:查找文件。find / -name 'filename' 在整个系统中查找特定文件,对于追踪恶意文件或不寻常的文件特别有用。stat:查看文件或目录的具体信息,如修改时间、访问权限等,这对于确定文件是否被篡改非常关键。crontab:管理用户的定时任务。crontab -e 编辑当前用户的定时任务,crontab -l 查看当前用户的定时任务列表。在安全事件响应中,检查和清理可能被恶意修改的定时任务是常见的步骤。/etc/crontab:系统级的定时任务配置文件。与用户级的crontab不同,它可以指定任务由哪个用户运行。在安全审计中,检查此文件以确定是否有不寻常或未授权的任务。/etc/cron.d/:目录包含系统级的定时任务文件。这些文件的格式类似于/etc/crontab。安全审计时应检查这个目录下的文件,以识别潜在的恶意任务。chmod 和 chown:这些命令在所有Linux发行版中通用。chmod 用于更改文件或目录的访问权限,如chmod 755 filename。chown 更改文件或目录的所有者和/或所属组,如chown user:group filename。setfacl 和 getfacl:提供了更细粒度的权限控制。例如,setfacl -m u:username:rwx file 为特定用户设置文件权限。这在各个发行版中都有支持,但可能需要安装acl包。useradd 和 userdel:这些基础命令在所有主流Linux发行版中都是相同的。useradd 用于创建新用户,userdel 用于删除用户。adduser 和 deluser:在一些发行版(如Debian/Ubuntu)中,这些命令提供了useradd和userdel的更友好的接口,包括更多的默认行为(如创建用户主目录)。usermod:用于修改用户账户,例如更改用户名或所属组。这在各个发行版中都是标准命令。visudo:编辑sudoers文件,控制哪些用户和组可以使用sudo以及他们可以执行的命令。这对于在多用户环境中限制管理员权限非常重要。chage:用于更改和查看用户密码过期信息。例如,chage -l username 查看用户的密码过期信息,这在强制密码策略方面很有用。ls -Z 和 chcon:在使用SELinux的系统(如Red Hat/CentOS、Fedora)中,这些命令用于查看和更改文件的安全上下文。这对于维护符合SELinux策略的系统非常关键。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,用于快速修改文件内容,如配置文件更新。top:显示当前活动的进程。top -u username 显示指定用户的进程,top -i 忽略闲置和僵尸进程。df 和 du:磁盘使用情况。df -h 以人类可读的格式显示磁盘空间,du -sh /path/to/directory 显示指定目录的总大小。htop:提供更直观的界面和更多功能的进程监控工具。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端口的进程。journalctl:系统日志管理,journalctl -u sshd 查看SSH服务的日志。tcpdump:网络流量分析,tcpdump port 80 监控80端口的流量。Linux中的特殊权限位包括SetUID、SetGID和Sticky Bit。这些权限位对于系统安全至关重要,因为它们改变了文件或目录的标准行为。
chmod u+s filename。这会在文件的权限表示中的用户执行位添加一个S或s(如果文件已经可执行)。chmod u-s filename。/usr/bin/passwd 文件通常设置了SUID位,使得普通用户可以修改自己的密码,即使passwd程序需要以root身份运行。find / -perm -4000 -exec ls -ldb {} \; 命令检查系统上设置了SUID的文件。chmod g+s filename 或 chmod g+s directory。chmod g-s filename/directory。find / -perm -2000 -exec ls -ldb {} \;。chmod o+t directory。chmod o-t directory。/tmp 目录通常设置了Sticky Bit,以防止普通用户删除或更改其他用户的临时文件。find / -perm -1000 -exec ls -ldb {} \; 检查设置了Sticky Bit的目录。/var/log/secure (包含验证和授权信息,如SSH登录尝试,关键用于追踪未授权访问尝试)/var/log/syslog (Debian系系统) 或 /var/log/messages (RedHat系系统) (记录系统运行信息,有助于诊断系统级问题)/var/log/access.log 和 /var/log/error.log (记录Web访问和错误信息,对于分析网站安全事件至关重要)/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 (记录用户的命令历史,可以用来追踪用户的操作历史,尤其在调查安全事件时非常重要)/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密钥添加,这是一个常见的横向移动和持久化技术。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/。作为一名安全运维工程师,熟练掌握Linux系统中各种命令和对日志的分析是日常工作的基础。通过这些命令和技巧,我们可以有效地管理系统、诊断问题并保护系统免受安全威胁。持续学习和实践是保持技能现代化和应对新挑战的关键。