/etc/passwd 持续被访问

/etc/passwd 持续被访问

我在 EC2(Cent OS,2.6.35.14,x86_64)上运行服务器,最近我超过了每月 100 万次 I/O 配额,这太荒谬了,因为我的磁盘利用率不应该接近这个数字。(我没有运行任何需要大量磁盘访问的服务……甚至没有运行任何磁盘访问)

我的第一个想法是启动 iotop,看看是否有任何进程不断地向磁盘写入数据。iotop 向我展示了一个名为jbd2每分钟写入磁盘一次以上。

一些 谷歌搜索,看起来问题要么是内核错误,要么是某个守护进程定期接触磁盘。

我安装了 inotify-tools 并在整个文件系统上启动了 inotifywait;

sudo /usr/local/bin/inotifywait -m -r /!(dev|proc)

这表明 /etc/passwd 被打开、访问,然后关闭,每分钟多次。无需我在系统上执行任何其他操作!inotify 不会告诉你什么进程正在做触摸,但我安装了审计(http://people.redhat.com/sgrubb/audit/),在 /etc/passwd 上设置一些日志并让其运行一段时间,然后查看日志,但它们告诉我它正在被 sudo 访问:(用户名已删除)

type=SYSCALL msg=audit(10/03/2011 17:48:30.493:260) : arch=x86_64 syscall=open success=yes exit=4 a0=7f809205669a a1=80000 a2=1b6 a3=0 items=1 ppid=6466 pid=6467 auid=**** uid=root gid=**** euid=root suid=root fsuid=root egid=**** sgid=**** fsgid=**** tty=pts0 ses=79 comm=sudo exe=/usr/bin/sudo key=(null) 
type=SYSCALL msg=audit(10/03/2011 17:48:30.493:261) : arch=x86_64 syscall=open success=yes exit=4 a0=7f809205669a a1=80000 a2=1b6 a3=0 items=1 ppid=6466 pid=6467 auid=**** uid=root gid=**** euid=root suid=root fsuid=root egid=**** sgid=**** fsgid=**** tty=pts0 ses=79 comm=sudo exe=/usr/bin/sudo key=(null) 
type=SYSCALL msg=audit(10/03/2011 17:48:30.488:256) : arch=x86_64 syscall=open success=yes exit=3 a0=7f809205669a a1=80000 a2=1b6 a3=0 items=1 ppid=6441 pid=6466 auid=**** uid=**** gid=**** euid=root suid=root fsuid=root egid=**** sgid=**** fsgid=**** tty=pts0 ses=79 comm=sudo exe=/usr/bin/sudo key=(null)
...

有什么办法可以进一步缩小范围吗?我的 cron 文件中没有任何内容,而且我想不出任何其他会导致这种情况的服务:

chkconfig | grep on
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
cgconfig        0:off   1:off   2:off   3:off   4:off   5:off   6:off
cloud-init      0:off   1:off   2:on    3:on    4:on    5:on    6:off
cloud-init-user-scripts 0:off   1:off   2:on    3:on    4:on    5:on    6:off
conman          0:off   1:off   2:off   3:off   4:off   5:off   6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
irqbalance      0:off   1:off   2:off   3:on    4:on    5:on    6:off
lvm2-monitor    0:off   1:on    2:on    3:on    4:on    5:on    6:off
mdmonitor       0:off   1:off   2:on    3:on    4:on    5:on    6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
restorecond     0:off   1:off   2:off   3:off   4:off   5:off   6:off
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
sendmail        0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
udev-post       0:off   1:on    2:on    3:on    4:on    5:on    6:off
yum-updatesd    0:off   1:off   2:on    3:on    4:on    5:on    6:off

答案1

由于你使用的是 CentOS,因此你应该能够通过查看/var/log/secure以下内容来了解​​ sudo 正在做什么

sudo tail /var/log/secure

10月4日 03:45:44 ec2-centos-instance sudo:iain:TTY=pts/0;PWD=/home/iain;USER=root;COMMAND=/usr/bin/tail /var/log/secure

编辑:使用评论中的答案进行更新

使用以下命令启用块转储:echo 1 > /proc/sys/vm/block_dump并使用 dmesg 查看它有助于追踪哪些进程正在访问磁盘。比 iotop 可靠得多。结果发现,sar 一直在运行,写入 /var/log/sa/saXX,因此我在 cron.d 中禁用了它,一切又恢复正常

答案2

听起来你有一个脚本或程序正在使用 sudo 尝试以 root 身份执行操作。你可以启用 sudo 日志来查明他们正在尝试做什么,并提出更好的解决方案(也许 setuid 二进制文件是合适的)。以下是有关 sudo 的更多信息(例如如何启用日志):

http://aplawrence.com/Basics/sudo.html

相关内容