Um script para verificar se um processo java está sendo executado como usuário root

1

No momento, estou tentando criar um script para verificar se um processo Java específico ( ps -efl | grep java ) está sendo executado como raiz.

Atualmente, apresentei o seguinte, mas ele não imprimiu o que eu preciso, alguma sugestão em que estou errado?

process_count='pgrep -u root -x Introscope_WebView.lax;echo $?'
if [ "$process_count" -eq 1]
    then
        process_user="Root"
    else
        process_user="Not Root"
fi
echo "<metric type=\"LongCounter\" name=\"OS Processes|WebView User Process:Process Count\" value=\"$process_count\"/>"
echo "<metric type=\"StringEvent\" name=\"OS Processes|WebView User Process:Process User\" value=\"$process_user\"/>"
exit 0

Neste caso, o processo java será Introscope_WebView.lax e eu quero verificar se ele está sendo executado como usuário root. Se sim, me dê 1 & amp; executando root, caso contrário, me dê mais e não root.

    
por John Barnes 08.02.2017 / 14:45

1 resposta

4

Você deve ser capaz de testar o status de saída de pgrep diretamente, por exemplo,

if pgrep -u root -xf 'Introscope_WebView.lax' > /dev/null
then
    process_user="Root"
else
    process_user="Not Root"
fi

Observe que isso também definirá process_user="Not Root" se o processo não existir - se você quiser cobrir todos os três casos (em execução e de propriedade do root; executando, mas pertencendo a outra pessoa; não sendo executado), será necessário adicione um teste separado.

por exemplo. dado

$ ps -ef | grep [i]nit
root         1     0  0 Jan21 ?        00:00:05 /sbin/init splash

então

$ if pgrep -xfu root '/sbin/init splash' >/dev/null ; then echo 'root owns it'; fi
root owns it

De man pgrep

EXIT STATUS
       0      One or more processes matched the criteria.
       1      No processes matched.
       2      Syntax error in the command line.
       3      Fatal error: out of memory etc.
    
por steeldriver 08.02.2017 / 15:00