ユーザーがセッションを開始した後、rootコマンドを実行します。

ユーザーがセッションを開始した後、rootコマンドを実行します。

ユーザーがセッションを開始したときにrootコマンドを実行する方法を理解しようとしています。

このファイルにコマンドを追加すると、/etc/rc.local起動後にコマンドを実行する必要がありますが、コマンドが実行されないか、システムがコマンドを実行する準備ができていないようです。 (このコマンドはうまく動作します)

たぶん、例えば私がやろうとしていることを明確にすることができます。ほとんどすべてのデスクトップマネージャの設定ウィンドウには「セッションと起動」というオプションがあり、「アプリケーションの自動起動」セクションの下に現在のユーザーがログインしたときに実行されるコマンドを追加できます。

これをしたいがroot権限を必要とするコマンドを使用します。

答え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が停止するため、rootでスクリプトを一度実行して正常に動作することを確認することをお勧めします。 (愚かな間違いは、例えば空白のインデントなどになる可能性があります。これは、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

実際にこれを使用していませんが、見てみる価値があります。

関連情報