/ etc / passwd不断访问

我在EC2上运行一个服务器(Cent OS,2.6.35.14,x86_64),而且最近我每个月超过了我的100万个I / O配额,这是荒谬的,因为我的磁盘利用率不应该在任何地方。 (我没有运行任何应该需要很多磁盘访问的服务,甚至是任何磁盘访问)

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

经过一番 search后,问题似乎是内核错误,或者一些守护进程经常碰到磁盘。

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

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

而这显示的是/ etc / passwd正在打开,访问,然后closures,每分钟多次。 没有我在系统上做其他事情! inotify不会告诉你什么程序正在做触摸,但我安装了审计( http://people.redhat.com/sgrubb/audit/ ),在/ etc / passwd上设置了一些日志logging,让它运行一段时间,然后看看日志,但他们告诉我的是,它是由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 

在使用CentOS的时候,你应该能够通过查看/var/log/secure来找出sudo在做什么

 sudo tail /var/log/secure 

Oct 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中禁用了,并且一切都很好

这听起来像你有一个脚本或程序使用sudo来尝试和做的东西作为根。 你可以在sudo中启用日志logging来找出他们正在尝试做什么,并提出一个更好的解决scheme(也许一个setuid二进制是为了)。 这里是sudo的更多信息(如如何启用日志logging):

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