安全是 IT 行业一个老生常谈的话题了,从之前的“棱镜门”事件中折射出了很多安全问题,处理好信息安全问题已变得刻不容缓。不掉坑,不背锅!史上最全的服务器安全管理规范开源了。
因此做为程序员,就必须了解一些安全准则,同时,要保护自己所负责的业务,首先要站在攻击者的角度思考问题,修补任何潜在的威胁和漏洞。这是一篇长文,建议大家细细品读一下,必定有不少收获,学习时需要静心,放下心里的浮躁。
本文主要分为如下五部分展开:
- 账户和登录安全
- 远程访问和认证安全
- 文件系统安全
- Linux 后门入侵检测工具
- 服务器遭受攻击后的处理过程
账户和登录安全
账户安全是系统安全的第一道屏障,也是系统安全的核心,保障登录账户的安全,在一定程度上可以提高服务器的安全级别,下面重点介绍下 Linux 系统登录账户的安全设置方法。
①删除特殊的账户和账户组
Linux 提供了各种不同角色的系统账号,在系统安装完成后,默认会安装很多不必要的用户和用户组。
如果不需要某些用户或者组,就要立即删除它,因为账户越多,系统就越不安全,很可能被黑客利用,进而威胁到服务器的安全。
Linux系统中可以删除的默认用户和组大致有如下这些:
可删除的用户,如 adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher 等。
可删除的组,如 adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers 等。
②关闭系统不需要的服务
Linux 在安装完成后,绑定了很多没用的服务,这些服务默认都是自动启动的。
对于服务器来说,运行的服务越多,系统就越不安全,越少服务在运行,安全性就越好,因此关闭一些不需要的服务,对系统安全有很大的帮助。
具体哪些服务可以关闭,要根据服务器的用途而定,一般情况下,只要系统本身用不到的服务都认为是不必要的服务。
例如:某台 Linux 服务器用于 www 应用,那么除了 httpd 服务和系统运行是必须的服务外,其他服务都可以关闭。
下面这些服务一般情况下是不需要的,可以选择关闭:
anacron、auditd、autofs、avahi-daemon、avahi-dnsconfd、bluetooth、cpuspeed、firstboot、gpm、haldaemon、hidd、ip6tables、ipsec、isdn、lpd、mcstrans、messagebus、netfs、nfs、nfslock、nscd、pcscd portmap、readahead_early、restorecond、rpcgssd、rpcidmapd、rstatd、sendmail、setroubleshoot、yppasswdd ypserv
③密码安全策略
在 Linux 下,远程登录系统有两种认证方式:
- 密码认证
- 密钥认证
密码认证方式是传统的安全策略,对于密码的设置,比较普遍的说法是:至少 6 个字符以上,密码要包含数字、字母、下划线、特殊符号等。
设置一个相对复杂的密码,对系统安全能起到一定的防护作用,但是也面临一些其他问题,例如密码暴力破解、密码泄露、密码丢失等,同时过于复杂的密码对运维工作也会造成一定的负担。
密钥认证是一种新型的认证方式,公用密钥存储在远程服务器上,专用密钥保存在本地,当需要登录系统时,通过本地专用密钥和远程服务器的公用密钥进行配对认证,如果认证成功,就成功登录系统。
这种认证方式避免了被暴力破解的危险,同时只要保存在本地的专用密钥不被黑客盗用,攻击者一般无法通过密钥认证的方式进入系统。
因此,在 Linux 下推荐用密钥认证方式登录系统,这样就可以抛弃密码认证登录系统的弊端。
Linux 服务器一般通过 SecureCRT、Putty、Xshell 之类的工具进行远程维护和管理,密钥认证方式的实现就是借助于 SecureCRT 软件和 Linux 系统中的 SSH 服务实现的。
④合理使用 su、sudo 命令
su 命令:是一个切换用户的工具,经常用于将普通用户切换到超级用户下,当然也可以从超级用户切换到普通用户。
为了保证服务器的安全,几乎所有服务器都禁止了超级用户直接登录系统,而是通过普通用户登录系统,然后再通过 su 命令切换到超级用户下,执行一些需要超级权限的工作。
通过 su 命令能够给系统管理带来一定的方便,但是也存在不安全的因素,例如:系统有 10 个普通用户,每个用户都需要执行一些有超级权限的操作,就必须把超级用户的密码交给这 10 个普通用户。
如果这 10 个用户都有超级权限,通过超级权限可以做任何事,那么会在一定程度上对系统的安全造成了威协。
因此 su 命令在很多人都需要参与的系统管理中,并不是最好的选择,超级用户密码应该掌握在少数人手中,此时 sudo 命令就派上用场了。
sudo 命令:允许系统管理员分配给普通用户一些合理的“权利”,并且不需要普通用户知道超级用户密码,就能让他们执行一些只有超级用户或其他特许用户才能完成的任务。
比如:系统服务重启、编辑系统配置文件等,通过这种方式不但能减少超级用户登录次数和管理时间,也提高了系统安全性。
因此,sudo 命令相对于权限无限制性的 su 来说,还是比较安全的,所以 sudo 也被称为受限制的 su,另外 sudo 也是需要事先进行授权认证的,所以也被称为授权认证的 su。
sudo 执行命令的流程是:将当前用户切换到超级用户下,或切换到指定的用户下,然后以超级用户或其指定切换到的用户身份执行命令。
执行完成后,直接退回到当前用户,而这一切的完成要通过 sudo 的配置文件 /etc/sudoers 来进行授权。
sudo 设计的宗旨是:赋予用户尽可能少的权限但仍允许它们完成自己的工作,这种设计兼顾了安全性和易用性。
因此,强烈推荐通过 sudo 来管理系统账号的安全,只允许普通用户登录系统,如果这些用户需要特殊的权限,就通过配置 /etc/sudoers 来完成,这也是多用户系统下账号安全管理的基本方式。
⑤删减系统登录欢迎信息
系统的一些欢迎信息或版本信息,虽然能给系统管理者带来一定的方便,但是这些信息有时候可能被黑客利用,成为攻击服务器的帮凶。
为了保证系统的安全,可以修改或删除某些系统文件,需要修改或删除的文件有四个,分别是:
- /etc/issue
- /etc/issue.net
- /etc/redhat-release
- /etc/motd
/etc/issue 和 /etc/issue.net 文件都记录了操作系统的名称和版本号,当用户通过本地终端或本地虚拟控制台等登录系统时,/etc/issue 的文件内容就会显示。
当用户通过 ssh 或 telnet 等远程登录系统时,/etc/issue.net 文件内容就会在登录后显示。
在默认情况下 /etc/issue.net 文件的内容是不会在 ssh 登录后显示的,要显示这个信息可以修改 /etc/ssh/sshd_config 文件,在此文件中添加如下内容即可:Banner /etc/issue.net。
其实这些登录提示很明显泄漏了系统信息,为了安全起见,建议将此文件中的内容删除或修改。
/etc/redhat-release 文件也记录了操作系统的名称和版本号,为了安全起见,可以将此文件中的内容删除。
/etc/motd 文件是系统的公告信息。每次用户登录后,/etc/motd 文件的内容就会显示在用户的终端。
通过这个文件系统,管理员可以发布一些软件或硬件的升级、系统维护等通告信息,但是此文件的最大作用就是可以发布一些警告信息,当黑客登录系统后,会发现这些警告信息,进而产生一些震慑作用。
看过国外的一个报道,黑客入侵了一个服务器,而这个服务器却给出了欢迎登录的信息,因此法院不做任何裁决。
远程访问和认证安全
①远程登录取消 telnet 而采用 SSH 方式
telnet 是一种古老的远程登录认证服务,它在网络上用明文传送口令和数据,因此别有用心的人就会非常容易截获这些口令和数据。
而且,telnet 服务程序的安全验证方式也极其脆弱,攻击者可以轻松将虚假信息传送给服务器。
现在远程登录基本抛弃了 telnet 这种方式,而取而代之的是通过 SSH 服务远程登录服务器。
②合理使用 Shell 历史命令记录功能
在 Linux 下可通过 history 命令查看用户所有的历史操作记录,同时 shell 命令操作记录默认保存在用户目录下的 .bash_history 文件中。
通过这个文件可以查询 shell 命令的执行历史,有助于运维人员进行系统审计和问题排查。
同时,在服务器遭受黑客攻击后,也可以通过这个命令或文件查询黑客登录服务器所执行的历史命令操作。
但是有时候黑客在入侵服务器后为了毁灭痕迹,可能会删除 .bash_history 文件,这就需要合理的保护或备份 .bash_history 文件。
③启用 Tcp_Wrappers 防火墙
Tcp_Wrappers 是一个用来分析 TCP/IP 封包的软件,类似的 IP 封包软件还有 iptables。
Linux 默认都安装了 Tcp_Wrappers。作为一个安全的系统,Linux 本身有两层安全防火墙,通过 IP 过滤机制的 iptables 实现第一层防护。
iptables 防火墙通过直观地监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行,免遭攻击和破坏。
如果通过了第一层防护,那么下一层防护就是 Tcp_Wrappers 了。通过 Tcp_Wrappers 可以实现对系统中提供的某些服务的开放与关闭、允许和禁止,从而更有效地保证系统安全运行。
文件系统安全
①锁定系统重要文件
系统运维人员有时候可能会遇到通过 Root 用户都不能修改或者删除某个文件的情况,产生这种情况的大部分原因可能是这个文件被锁定了。
在 Linux 下锁定文件的命令是 Chattr,通过这个命令可以修改 ext2、ext3、ext4 文件系统下文件属性,但是这个命令必须有超级用户 Root 来执行。和这个命令对应的命令是 lsattr,这个命令用来查询文件属性。
对重要的文件进行加锁,虽然能够提高服务器的安全性,但是也会带来一些不便。
例如:在软件的安装、升级时可能需要去掉有关目录和文件的 immutable 属性和 append-only 属性,同时,对日志文件设置了 append-only 属性,可能会使日志轮换(logrotate)无法进行。
因此,在使用 Chattr 命令前,需要结合服务器的应用环境来权衡是否需要设置 immutable 属性和 append-only 属性。
另外,虽然通过 Chattr 命令修改文件属性能够提高文件系统的安全性,但是它并不适合所有的目录。Chattr 命令不能保护 /、/dev、/tmp、/var 等目录。
根目录不能有不可修改属性,因为如果根目录具有不可修改属性,那么系统根本无法工作:
- /dev 在启动时,syslog 需要删除并重新建立 /dev/log 套接字设备,如果设置了不可修改属性,那么可能出问题。
- /tmp 目录会有很多应用程序和系统程序需要在这个目录下建立临时文件,也不能设置不可修改属性。
- /var 是系统和程序的日志目录,如果设置为不可修改属性,那么系统写日志将无法进行,所以也不能通过 Chattr 命令保护。
②文件权限检查和修改
不正确的权限设置直接威胁着系统的安全,因此运维人员应该能及时发现这些不正确的权限设置,并立刻修正,防患于未然。下面列举几种查找系统不安全权限的方法。
查找系统中任何用户都有写权限的文件或目录:
- 查找文件:find / -type f -perm -2 -o -perm -20 |xargs ls -al
- 查找目录:find / -type d -perm -2 -o -perm -20 |xargs ls –ld
查找系统中所有含“s”位的程序:
- find / -type f -perm -4000 -o -perm -2000 -print | xargs ls –al
含有“s”位权限的程序对系统安全威胁很大,通过查找系统中所有具有“s”位权限的程序,可以把某些不必要的“s”位程序去掉,这样可以防止用户滥用权限或提升权限的可能性。
检查系统中所有 suid 及 sgid 文件:
- find / -user root -perm -2000 -print -exec md5sum {} ;
- find / -user root -perm -4000 -print -exec md5sum {} ;
将检查的结果保存到文件中,可在以后的系统检查中作为参考。
检查系统中没有属主的文件:
- find / -nouser -o –nogroup
没有属主的孤儿文件比较危险,往往成为黑客利用的工具,因此找到这些文件后,要么删除掉,要么修改文件的属主,使其处于安全状态。
③/tmp、/var/tmp、/dev/shm 安全设定
在 Linux 系统中,主要有两个目录或分区用来存放临时文件,分别是 /tmp 和 /var/tmp。
存储临时文件的目录或分区有个共同点就是所有用户可读写、可执行,这就为系统留下了安全隐患。
攻击者可以将病毒或者木马脚本放到临时文件的目录下进行信息收集或伪装,严重影响服务器的安全。
此时,如果修改临时目录的读写执行权限,还有可能影响系统上应用程序的正常运行,因此,如果要兼顾两者,就需要对这两个目录或分区进行特殊的设置。
/dev/shm 是 Linux 下的一个共享内存设备,在 Linux 启动的时候系统默认会加载 /dev/shm,被加载的 /dev/shm 使用的是 tmpfs 文件系统,而 tmpfs 是一个内存文件系统,存储到 tmpfs 文件系统的数据会完全驻留在 RAM 中。
这样通过 /dev/shm 就可以直接操控系统内存,这将非常危险,因此如何保证 /dev/shm 安全也至关重要。
对于 /tmp 的安全设置,需要看 /tmp 是一个独立磁盘分区,还是一个根分区下的文件夹。
如果 /tmp 是一个独立的磁盘分区,那么设置非常简单,修改 /etc/fstab 文件中 /tmp 分区对应的挂载属性,加上 nosuid、noexec、nodev 三个选项即可。
修改后的 /tmp 分区挂载属性类似如下:
- LABEL=/tmp /tmp ext3 rw,nosuid,noexec,nodev 0 0
其中,nosuid、noexec、nodev 选项,表示不允许任何 suid 程序,并且在这个分区不能执行任何脚本等程序,并且不存在设备文件。
在挂载属性设置完成后,重新挂载 /tmp 分区,保证设置生效。
对于 /var/tmp,如果是独立分区,安装 /tmp 的设置方法是修改 /etc/fstab 文件即可。
如果是 /var 分区下的一个目录,那么可以将 /var/tmp 目录下所有数据移动到 /tmp 分区下,然后在 /var 下做一个指向 /tmp 的软连接即可。
也就是执行如下操作:
- [root@server ~]# mv /var/tmp/* /tmp
- [root@server ~]# ln -s /tmp /var/tmp
如果 /tmp 是根目录下的一个目录,那么设置稍微复杂,可以通过创建一个 loopback 文件系统来利用 Linux 内核的 loopback 特性将文件系统挂载到 /tmp 下,然后在挂载时指定限制加载选项即可。
一个简单的操作示例如下:
- [root@server ~]# dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000
- [root@server ~]# mke2fs -j /dev/tmpfs
- [root@server ~]# cp -av /tmp /tmp.old
- [root@server ~]# mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp
- [root@server ~]# chmod 1777 /tmp
- [root@server ~]# mv -f /tmp.old/* /tmp/
- [root@server ~]# rm -rf /tmp.old
最后,编辑 /etc/fstab,添加如下内容,以便系统在启动时自动加载 loopback 文件系统:
- /dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
Linux 后门入侵检测工具
Rootkit 是 Linux 平台下最常见的一种木马后门工具,它主要通过替换系统文件来达到入侵和和隐蔽的目的,这种木马比普通木马后门更加危险和隐蔽,普通的检测工具和检查手段很难发现这种木马。
Rootkit 攻击能力极强,对系统的危害很大,它通过一套工具来建立后门和隐藏行迹,从而让攻击者保住权限,以使它在任何时候都可以使用 Root 权限登录到系统。
Rootkit 主要有两种类型:文件级别和内核级别,下面分别进行简单介绍。
文件级别的 Rootkit 一般是通过程序漏洞或者系统漏洞进入系统后,通过修改系统的重要文件来达到隐藏自己的目的。
在系统遭受 Rootkit 攻击后,合法的文件被木马程序替代,变成了外壳程序,而其内部是隐藏着的后门程序。
通常容易被 Rootkit 替换的系统程序有 login、ls、ps、ifconfig、du、find、netstat 等,其中 login 程序是最经常被替换的。
因为当访问 Linux 时,无论是通过本地登录还是远程登录,/bin/login 程序都会运行,系统将通过 /bin/login 来收集并核对用户的账号和密码。
而 Rootkit 就是利用这个程序的特点,使用一个带有根权限后门密码的 /bin/login 来替换系统的 /bin/login,这样攻击者通过输入设定好的密码就能轻松进入系统。
此时,即使系统管理员修改 Root 密码或者清除 Root 密码,攻击者还是一样能通过 Root 用户登录系统。
攻击者通常在进入 Linux 系统后,会进行一系列的攻击动作,最常见的是安装嗅探器收集本机或者网络中其他服务器的重要数据。
在默认情况下,Linux 中也有一些系统文件会监控这些工具动作,例如 ifconfig 命令。
所以,攻击者为了避免被发现,会想方设法替换其他系统文件,常见的就是 ls、ps、ifconfig、du、find、netstat 等。
如果这些文件都被替换,那么在系统层面就很难发现 Rootkit 已经在系统中运行了。
这就是文件级别的 Rootkit,对系统维护很大,目前最有效的防御方法是定期对系统重要文件的完整性进行检查。
如果发现文件被修改或者被替换,那么很可能系统已经遭受了 Rootkit 入侵。
检查文件完整性的工具很多,常见的有 Tripwire、 aide 等,可以通过这些工具定期检查文件系统的完整性,以检测系统是否被 Rootkit 入侵。
内核级 Rootkit 是比文件级 Rootkit 更高级的一种入侵方式,它可以使攻击者获得对系统底层的完全控制权。
此时攻击者可以修改系统内核,进而截获运行程序向内核提交的命令,并将其重定向到入侵者所选择的程序并运行此程序。
也就是说,当用户要运行程序 A 时,被入侵者修改过的内核会假装执行 A 程序,而实际上却执行了程序 B。
内核级 Rootkit 主要依附在内核上,它并不对系统文件做任何修改,因此一般的检测工具很难检测到它的存在,这样一旦系统内核被植入 Rootkit,攻击者就可以对系统为所欲为而不被发现。
目前对于内核级的 Rootkit 还没有很好的防御工具,因此,做好系统安全防范就非常重要,将系统维持在最小权限内工作,只要攻击者不能获取 Root 权限,就无法在内核中植入 Rootkit。
①Rootkit 后门检测工具 Chkrootkit
Chkrootkit 是一个 Linux 系统下查找并检测 Rootkit 后门的工具,它的官方地址:
- http://www.chkrootkit.org/
Chkrootkit 没有包含在官方的 CentOS 源中,因此要采取手动编译的方法来安装,不过这种安装方法也更加安全。
Chkrootkit 的使用比较简单,直接执行 Chkrootkit 命令即可自动开始检测系统。
下面是某个系统的检测结果:
- [root@server chkrootkit]# /usr/local/chkrootkit/chkrootkit
- Checking `ifconfig'... INFECTED
- Checking `ls'... INFECTED
- Checking `login'... INFECTED
- Checking `netstat'... INFECTED
- Checking `ps'... INFECTED
- Checking `top'... INFECTED
- Checking `sshd'... not infected
- Checking `syslogd'... not tested
从输出可以看出,此系统的 ifconfig、ls、login、netstat、ps 和 top 命令已经被感染。
针对被感染 Rootkit 的系统,最安全而有效的方法就是备份数据重新安装系统。
Chkrootkit 在检查 Rootkit 的过程中使用了部分系统命令,因此,如果服务器被黑客入侵,那么依赖的系统命令可能也已经被入侵者替换,此时 Chkrootkit 的检测结果将变得完全不可信。
为了避免 Chkrootkit 的这个问题,可以在服务器对外开放前,事先将 Chkrootkit 使用的系统命令进行备份,在需要的时候使用备份的原始系统命令让 Chkrootkit 对 Rootkit 进行检测。
②Rootkit 后门检测工具 RKHunter
RKHunter 是一款专业的检测系统是否感染 Rootkit 的工具,它通过执行一系列的脚本来确认服务器是否已经感染 Rootkit。
在官方的资料中,RKHunter 可以做的事情有:
- MD5校验测试,检测文件是否有改动,比较系统命令的md5,从而判断
- 系统命令是否被篡改
- 检测rootkit使用的二进制和系统工具文件
- 检测特洛伊木马程序的特征码
- 检测常用程序的文件属性是否异常
- 检测系统相关的测试
- 检测隐藏文件
- 检测可疑的核心模块LKM
- 检测系统已启动的监听端口
在 Linux 终端使用 RKHunter 来检测,最大的好处在于每项的检测结果都有不同的颜色显示,如果是绿色的表示没有问题,如果是红色的,那就要引起关注了。
另外,在执行检测的过程中,在每个部分检测完成后,需要以 Enter 键来继续。
如果要让程序自动运行,可以执行如下命令:
- [root@server ~]# /usr/local/bin/rkhunter --check --skip-keypress
同时,如果想让检测程序每天定时运行,那么可以在 /etc/crontab 中加入如下内容:
- 30 09 * * * root /usr/local/bin/rkhunter --check --cronjob
这样,RKHunter 检测程序就会在每天的 9:30 分运行一次。
服务器遭受攻击后的处理过程
安全总是相对的,再安全的服务器也有可能遭受到攻击。
作为一个安全运维人员,要把握的原则是:尽量做好系统安全防护,修复所有已知的危险行为,同时,在系统遭受攻击后能够迅速有效地处理攻击行为,最大限度地降低攻击对系统产生的影响。
①处理服务器遭受攻击的一般思路
系统遭受攻击并不可怕,可怕的是面对攻击束手无策,下面就详细介绍下在服务器遭受攻击后的一般处理思路。
切断网络:所有的攻击都来自于网络,因此,在得知系统正遭受黑客的攻击后,首先要做的就是断开服务器的网络连接,这样除了能切断攻击源之外,也能保护服务器所在网络的其他主机。
查找攻击源:可以通过分析系统日志或登录日志文件,查看可疑信息,同时也要查看系统都打开了哪些端口,运行哪些进程,并通过这些进程分析哪些是可疑的程序。
这个过程要根据经验和综合判断能力进行追查和分析。下面会详细介绍这个过程的处理思路。
分析入侵原因和途径:既然系统遭到入侵,那么原因是多方面的,可能是系统漏洞,也可能是程序漏洞。
一定要查清楚是哪个原因导致的,并且还要查清楚遭到攻击的途径,找到攻击源,因为只有知道了遭受攻击的原因和途径,才能删除攻击源同时进行漏洞的修复。
备份用户数据:在服务器遭受攻击后,需要立刻备份服务器上的用户数据,同时也要查看这些数据中是否隐藏着攻击源。
如果攻击源在用户数据中,一定要彻底删除,然后将用户数据备份到一个安全的地方。
重新安装系统:永远不要认为自己能彻底清除攻击源,因为没有人能比黑客更了解攻击程序。
在服务器遭到攻击后,最安全也最简单的方法就是重新安装系统,因为大部分攻击程序都会依附在系统文件或者内核中,所以重新安装系统才能彻底清除攻击源。
修复程序或系统漏洞:在发现系统漏洞或者应用程序漏洞后,首先要做的就是修复系统漏洞或者更改程序 Bug,因为只有将程序的漏洞修复完毕才能正式在服务器上运行。
恢复数据和连接网络:将备份的数据重新复制到新安装的服务器上,然后开启服务,最后将服务器开启网络连接,对外提供服务。
②检查并锁定可疑用户
当发现服务器遭受攻击后,首先要切断网络连接,但是在有些情况下,比如无法马上切断网络连接时,就必须登录系统查看是否有可疑用户。
如果有可疑用户登录了系统,那么需要马上将这个用户锁定,然后中断此用户的远程连接。
③查看系统日志
查看系统日志是查找攻击源最好的方法,可查的系统日志有 /var/log/messages、/var/log/secure 等。
这两个日志文件可以记录软件的运行状态以及远程用户的登录状态,还可以查看每个用户目录下的 .bash_history 文件。
特别是 /root 目录下的 .bash_history 文件,这个文件中记录着用户执行的所有历史命令。
④检查并关闭系统可疑进程
检查可疑进程的命令很多,例如 ps、top 等,但是有时候只知道进程的名称无法得知路径,此时可以通过如下命令查看。
首先通过 pidof 命令可以查找正在运行的进程 PID,例如要查找 sshd 进程的 PID。
执行如下命令:
- [root@server ~]# pidof sshd
- 13276 12942 4284
然后进入内存目录,查看对应 PID 目录下 exe 文件的信息:
- [root@server ~]# ls -al /proc/13276/exe
- lrwxrwxrwx 1 root root 0 Oct 4 22:09 /proc/13276/exe -> /usr/sbin/sshd
这样就找到了进程对应的完整执行路径。如果还要查看文件的句柄,可以查看如下目录:
- [root@server ~]# ls -al /proc/13276/fd
通过这种方式基本可以找到任何进程的完整执行信息。
⑤检查文件系统的完好性
检查文件属性是否发生变化是验证文件系统完好性最简单、最直接的方法,例如可以检查被入侵服务器上 /bin/ls 文件的大小是否与正常系统上此文件的大小相同,以验证文件是否被替换,但是这种方法比较低级。
此时可以借助于 Linux 下 rpm 这个工具来完成验证,操作如下:
- [root@server ~]# rpm -Va
- ....L... c /etc/pam.d/system-auth
- S.5..... c /etc/security/limits.conf
- S.5....T c /etc/sysctl.conf
- S.5....T /etc/sgml/docbook-simple.cat
- S.5....T c /etc/login.defs
- S.5..... c /etc/openldap/ldap.conf
- S.5....T c /etc/sudoers
⑥重新安装系统恢复数据
很多情况下,被攻击过的系统已经不再可信任,因此,最好的方法是将服务器上面数据进行备份,然后重新安装系统,最后再恢复数据即可。
数据恢复完成,马上对系统做上面介绍的安全加固策略,保证系统安全。