我正在从 5.5 转换到 CentOS 6.5,需要一种方法来检查 sendmail 是否打开。由于我不想经历的原因,我需要能够检查 sendmail 是否以非 root 用户身份打开。在 CentOS 5.5 中,我可以/sbin/service sendmail status
以非 root 用户身份运行。在 CentOS 6.5 中,安全性更加严格,并且在/etc/init.d/sendmail
脚本中添加了新代码:
# Check that we're a privileged user
[ `id -u` = 0 ] || exit 4
sendmail 脚本使用以下代码来检查其状态:
status)
echo -n sendmail; status -p /var/run/sendmail.pid -l sendmail
RETVAL=$?
echo -n sm-client; status -p /var/run/sm-client.pid -l sm-client
[ $RETVAL -eq 0 ] && RETVAL=$?
;;
在 sendmail 脚本的开头,该functions
库是源代码,因此可以在脚本status()
中调用functions
# Source function library.
. /etc/rc.d/init.d/functions
作为 root,您通常会在运行时看到以下内容/sbin/service sendmail status
:
sendmail (pid 1107) is running...
sm-client (pid 1115) is running...
当以非 root 用户身份运行时,我收到return code 4
到目前为止我所尝试的是检查/var/run/sendmail.pid
以获取进程 ID,然后检查是否有并输入/proc
pid。例如,
作为非 root 用户:
cat /var/run/sendmail.pid - Get the pid
1107
/usr/sbin/sendmail -bd -q3600s
然后我检查/proc/1107/status
:
Name: sendmail
State: S (sleeping)
Tgid: 1107
Pid: 1107
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 51 51 51
Utrace: 0
FDSize: 32
Groups: 51
VmPeak: 12844 kB
VmSize: 12840 kB
VmLck: 0 kB
VmHWM: 2020 kB
VmRSS: 2020 kB
VmData: 1176 kB
VmStk: 208 kB
VmExe: 824 kB
VmLib: 10156 kB
VmPTE: 44 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/3865
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001006
SigCgt: 0000000180016201
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed: 1
Cpus_allowed_list: 0
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 560
nonvoluntary_ctxt_switches: 2
如果/proc/<pid>
不存在,我知道服务没有打开。这个方法似乎有效,但我不完全信任它,宁愿使用/sbin/service sendmail status
。
关于检查 sendmail 服务是否以非 root 用户身份运行的最佳方法有什么想法吗?