web-dev-qa-db-fra.com

Un script pour vérifier si un processus Java s'exécute en tant qu'utilisateur root

J'essaie actuellement de créer un script pour vérifier si un processus spécifique Java (ps -efl | grep Java) s'exécute en tant que root.

Actuellement, j'ai trouvé ce qui suit, mais il n'a pas imprimé ce dont j'ai besoin, des suggestions où je me trompe?

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

Dans ce cas, le processus Java sera Introscope_WebView.lax et je veux vérifier si cela fonctionne en tant qu'utilisateur root. Si c'est le cas, donnez-moi 1 et exécutez root sinon, donnez moi d'autre et pas root.

1
John Barnes

Vous devriez simplement pouvoir tester directement l'état de sortie de pgrep, par exemple.

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

Notez que cela définira également process_user="Not Root" si le processus n'existe pas du tout - si vous voulez couvrir les trois cas (en cours d'exécution et appartenant à root; en cours d'exécution mais appartenant à quelqu'un d'autre; pas en cours d'exécution), vous devrez ajouter un test distinct.


par exemple. donné

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

ensuite

$ 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.
4
steeldriver