ユーザーがセッションを開始したときに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_recent
WHITELIST
また、興味深いのは、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
実際にこれを使用していませんが、見てみる価値があります。