사용자가 세션을 시작한 후 루트 명령을 실행합니다.

사용자가 세션을 시작한 후 루트 명령을 실행합니다.

사용자가 세션을 시작할 때 루트 명령을 실행하는 방법을 알아내려고 합니다.

이 파일에 명령을 추가하면 /etc/rc.local부팅 후 명령이 실행되어야 하는데 명령이 실행되지 않거나 시스템이 명령을 실행할 준비가 되지 않은 것 같습니다. (이 명령은 잘 작동합니다)

어쩌면 예를 들어 내가 하려는 일을 명확히 할 수 있을 것입니다. 거의 모든 데스크탑 관리자의 설정 창에는 "세션 및 시작"이라는 옵션이 있으며 "응용 프로그램 자동 시작" 섹션 아래에 현재 사용자가 로그인할 때 실행될 명령을 추가할 수 있습니다.

이렇게 하고 싶지만 루트 권한이 필요한 명령을 사용합니다.

답변1

해결책을 찾았고 사용자를 검색하는 스크립트를 작성했습니다.

이것은 내 /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

detector_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)

오류가 발생하면 rc.local이 중지되므로 루트로 스크립트를 한 번 실행하여 제대로 작동하는지 확인하는 것이 좋습니다. (멍청한 실수는 예를 들어 공백 들여쓰기 등이 될 수 있는데, 이는 stackexchange 포럼에서 Python 스크립트를 복사할 때 자주 발생합니다)

답변2

당신은 관심이 있을 수도 있습니다 pam_exec. 나는 이것을 성공적으로 인증된 주소에 대한 추가 포트를 여는 데 사용합니다 sshd. 내 /etc/pam.d/sshd것은

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

스크립트는 update-whitelist다음과 같습니다

#!/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

(나는 와 함께 iptables사용하는 규칙이 있습니다).xt_recentWHITELIST

또한 흥미로운 점은 libpam-script인증 또는 세션 시작의 일부로 임의의 명령을 실행할 수 있다는 것입니다.

$ 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

실제로 이것을 사용하지는 않았지만 살펴볼 가치가 있을 것입니다.

관련 정보