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系统中各种命令和对日志的分析是日常工作的基础。通过这些命令和技巧,我们可以有效地管理系统、诊断问题并保护系统免受安全威胁。持续学习和实践是保持技能现代化和应对新挑战的关键。