start process (como root) no login do usuário

1

Gostaria de iniciar um processo como root no login de cada usuário. A motivação ao lado disso é que o processo funcionará na pasta pessoal criptografada da pasta específica do usuário.

Como posso conseguir isso?

    
por Leszek 19.01.2015 / 16:50

2 respostas

3

Se o seu sistema usa o PAM (a maioria faz), você pode usar o pam_exec módulo na pilha session . Note que o usuário não estará logado até que o comando termine; Se você quiser executar alguma coisa no fundo, bifurque-a. Várias variáveis de ambiente fornecem informações sobre a sessão. Por exemplo:

session optional pam_exec.so seteuid /usr/local/sbin/my-login-process

onde /usr/local/sbin/my-login-process contém algo como

#!/bin/sh
{
  exec 2>&1 >>"/var/log/my-root-service/$PAM_USER.log"
  echo "$PAM_USER logged in on $PAM_TTY on $PAM_RHOST at $(date)"
  do-something
} &
    
por 20.01.2015 / 01:07
1

No arquivo /etc/sudoers (atalho visudo) adicione estas linhas:

Cmnd_Alias   CMDNAME = /path/to/binaryOrscriptToBeRunAsRoot
%groupnamehere ALL=NOPASSWD: CMDNAME

Em vez de usar apenas um nome de usuário, criar um grupo CMDNAME e todos os usuários desse grupo têm essa permissão:

groupadd groupnamehere
usermod -G groupnamehere usertoaddtogrouphere

Para testar isso, torne-se o usuário e execute o comando:

  1. Torne-se o usuário = > su - usernamehere
  2. O usuário dos grupos de verificação está em = > grupos
  3. Executar comando = > sudo CMDNAME reiniciar
  4. Caso não seja um comando global executado = > sudo / caminho / para / binaryOrScript arg

Um exemplo disso é:

/ etc / sudoers

Cmnd_Alias   TESTME = /usr/local/bin/testme.sh
%cmdgroup ALL=NOPASSWD: TESTME

/usr/local/bin/testme.sh

#!/bin/sh
#netstat can only be run by root on my servers.
#File permissions are 'chmod 700'
netstat -tln |grep :80

/ etc / profile

# You need to change 'testme' in the boundry to match the groupname created
# This checks to see if the user who just logged is part of that cmdgroup, 
# if so, it runs whatever is inside.
username='id -un'
if groups $username | grep &>/dev/null '\btestme\b'; then
        sudo /usr/local/bin/testme.sh
fi

Faça login em um usuário desse grupo e veja:

[nonrootuser ~]#
tcp   0  0 :::80          :::*           LISTEN
    
por 19.01.2015 / 18:08