Execute o comando root depois que um usuário iniciar a sessão

2

Estou tentando descobrir como é possível executar um comando root quando um usuário inicia sua sessão.

Descobri que adicionar comandos a este arquivo /etc/rc.local deve executar os comandos após o boot, mas meu comando não está sendo executado ou talvez o sistema ainda não esteja pronto para executá-lo. (o comando funciona bem)

Talvez um exemplo possa esclarecer o que estou tentando fazer. Em quase todos os gerenciadores de desktop existe uma opção na janela de configurações chamada "Session and Start-up", e sob a seção "Application Auto-Start" é possível adicionar comandos que serão executados assim que o usuário atual fizer o login.

Gostaria de fazer isso, mas com um comando que requer permissão de root.

    
por Rafael Senties Martinelli 10.08.2014 / 12:49

2 respostas

1

Encontrei uma solução para criar um script que procura usuários.

este é o meu script /etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.


/usr/bin/detect_login 
exit 0

e este é o script detect_login:

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-


import os, time

Buffer_list=[]
while True:
    users=os.popen('''who | cut -d' ' -f1 | sort | uniq''')
    users=users.read()
    Current_List=users.split('\n')
    Current_List=filter(None,Current_List)
    if Current_List:
        if Current_List != Buffer_list:

            if len(Current_List) > len(Buffer_list):

                #HERE YOU ADD THE COMMANDS, inside the triple quotes.
                # add each command in a new line

                # i let you an example for turning the brightness down..
                os.system('''/usr/bin/xdotool key XF86MonBrightnessDown''') 


            Buffer_list=Current_List

    time.sleep(0.5)

Eu aconselho a executar uma vez o script como root para verificar se funciona bem, porque se houver um erro rc.local parará. (Erros burros podem ser, por exemplo, espaços recuados, isso acontece frequentemente ao copiar scripts python de fóruns do stackexchange)

    
por 10.08.2014 / 15:39
0

Você pode estar interessado em pam_exec . Eu o uso para abrir portas extras para endereços autenticados com êxito em sshd . Meu /etc/pam.d/sshd tem

account    optional     pam_exec.so /usr/local/bin/update-whitelist

e o script update-whitelist parece

#!/bin/sh

set -e

# Called from PAM when logging in via SSH.
# Adds current client to SSH whitelist.

WHITELIST=/proc/net/xt_recent/WHITELIST

test -n "$PAM_RHOST"
test -f "$WHITELIST"

# Handle PAM_RHOST as hostname or IPv4 dotted-quad
if echo "$PAM_RHOST" | /bin/grep -P -q '^\d+\.\d+\.\d+\.\d+$'
then echo "+$PAM_RHOST" >"$WHITELIST"
else /usr/bin/host "$PAM_RHOST" | /bin/sed -n -e 's/.* has address /+/p' >"$WHITELIST"
fi

(tenho iptables regras que usam xt_recent com WHITELIST ).

Também pode ser de interesse libpam-script , que pode executar um comando arbitrário como parte da autenticação ou do início da sessão:

$ aptitude show  libpam-script 
Package: libpam-script
Version: 1.1.4-1
Priority: extra
Section: universe/admin
Description: PAM module which allows executing a script
 This module will allow you to execute scripts during authorization, password
 changes and sessions. This is very handy if your current security application
 has no PAM support but is accessible with perl or other scripts.
Homepage: http://sourceforge.net/projects/pam-script

Eu realmente não usei isso, mas pode valer a pena investigar.

    
por 04.05.2015 / 19:33

Tags