ユーザーがrootとしてログインしたら、プロセスを開始します。

ユーザーがrootとしてログインしたら、プロセスを開始します。

すべてのユーザーログインでrootとしてプロセスを開始したいと思います。これに加えて、同期はプロセスが特定のユーザーフォルダの暗号化されたホームフォルダで実行されることです。

この目標をどのように達成できますか?

答え1

システムで以下を使用する場合ポリアクリルアミド(ほとんど)あなたは利用可能ですpam_execスタックのモジュールsession。コマンドが完了するまでユーザーはログインしません。バックグラウンドで何かを実行するには、分岐します。一部環境変数セッションに関する情報を提供します。たとえば、

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

/usr/local/sbin/my-login-processの内容が含まれています。

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

答え2

/etc/sudoersファイルに次の行を追加します(ショートカットvisudo)。

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

ユーザー名のみを使用する代わりにCMDNAMEグループを作成すると、そのグループ内のすべてのユーザーがその権限を持ちます。

groupadd groupnamehere
usermod -G groupnamehere usertoaddtogrouphere

これをテストするには、ユーザーになり、次のコマンドを実行します。

  1. ユーザーになる => su - ユーザー名
  2. グループユーザーが=>グループにいることを確認してください。
  3. コマンド実行 => sudo CMDNAME 再起動
  4. グローバルコマンドでない場合は、=> sudo /path/to/binaryOrScript argを実行してください。

例は次のとおりです。

/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/設定ファイル

# 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

このグループのユーザーとしてログインして、次のことを確認してください。

[nonrootuser ~]#
tcp   0  0 :::80          :::*           LISTEN

関連情報