Eu estou no processo de converter para o CentOS 6.5 do 5.5 e preciso de uma maneira de verificar se o sendmail está ligado ou não. Por razões que eu não quero passar, eu preciso ser capaz de verificar se o sendmail está ligado como um usuário não raiz. No CentOS 5.5, eu poderia usar /sbin/service sendmail status
executando como um usuário não root. No CentOS 6.5, a segurança é um pouco mais rígida e um novo código foi adicionado ao script /etc/init.d/sendmail
:
# Check that we're a privileged user
[ 'id -u' = 0 ] || exit 4
O script do sendmail usa o seguinte código para verificar seu status:
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=$?
;;
No começo do script do sendmail, a biblioteca functions
é a fonte, então status()
pode ser chamado no script functions
# Source function library.
. /etc/rc.d/init.d/functions
Como root, você normalmente veria isso ao executar /sbin/service sendmail status
:
sendmail (pid 1107) is running...
sm-client (pid 1115) is running...
Ao ser executado como um usuário não raiz, recebo return code 4
O que eu tentei até agora é verificar /var/run/sendmail.pid
para obter o ID do processo, então eu verifico se existe e há entrada em /proc
para o pid. Por exemplo,
Como um usuário não root:
cat /var/run/sendmail.pid - Get the pid
1107
/usr/sbin/sendmail -bd -q3600s
Então eu verifico /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
Se /proc/<pid>
não existir, sei que o serviço não está ativo .. Este método parece funcionar, mas não confio completamente nele e prefiro usar /sbin/service sendmail status
.
Alguma idéia sobre a melhor maneira de verificar se o serviço sendmail está sendo executado como um usuário não root ??
Tags permissions init.d sendmail linux centos