web-dev-qa-db-ja.com

ログイン時にrootとしてスクリプトを実行します(sudoerユーザー、シェルセッションなし)

/etc/profileおよび~/.profileによく似ていますが、ユーザーがログインしているのではなく、rootで実行されました。 /etc/rc.localは起動後に実行されますが、ログインする前にスクリプトを実行する必要があります。ユーザーはsudoerではありません。

ありがとう!

8

Sudoersメソッドに戻るために、あきらめる前にほとんどそこにいたと思います。あなたの最新のコメントを見て、私はおそらくあなたのために物事を修正するものに対処したいと思います:

Rootとしてスクリプトを実行する場合、その中からSudoを呼び出す必要はありません。

次のようなスクリプトがあります。

#! /bin/bash

echo $USER
whoami

Sudo ./myscriptを実行すると、それらの両方に対してrootが返されます。スクリプトが実行されているセッションはルートシェルです。

つまり、スクリプトで行うすべての操作にはすでにルート権限が付与されているということです。 Sudoを呼び出す必要はありません(傷つける必要はありません-rootは通常Sudoのアクセス許可を持っています)。

スクリプトを作成して、chownrootに、chmod700に(したがって、rootのみが実行、読み取り、または編集できる)、ユーザーを許可するだけです[ s] sudoersを介して実行します。うまくいくはずです。

動作しない場合は、アクセス許可フレームワークではなく、スクリプトに大きな問題がある可能性があります。ユーザーにフルSudoアクセス権を付与し(管理グループに追加するのが最も簡単な方法です)、スクリプトを実行することをお勧めします。

3
Oli

ステップ1.エディターを使用してbindコマンドでスクリプトを作成します。例えば:

Sudo emacs bind_user_directories.sh

内容:

#!/bin/bash

#NOTE: this file would be placed in /usr/local/sbin/ folder as bind_user_directories.sh
#alternatively it could be placed in /etc/init.d/ ... (I guess)

### BEGIN INIT INFO
# Provides:          bind_user_directories
# Required-Start:    
# Required-Stop:     
# Should-Start:      $named
# Default-Start:     0 2 3 4 5 6 (I guess...)
# Default-Stop:      1
# Short-Description: mount --bind for a user
# Description:       runs mount --bind command for certain pre-defined directories for a specific user
### END INIT INFO

# What is this?
DESC="bind_user_directories"

# See how we were called.
case "$1" in

    start)
        log_progress_msg "bind directories for user..."
        Sudo mount --bind /source/path /target/path
        log_progress_msg "done: bind directories for user"
        ;;

    stop)
        log_progress_msg "umount --bind directories for user..."
        Sudo umount /target/path
        log_progress_msg "done: unbind directories for user"
        ;;

    restart)
        $0 stop
        sleep 1
        $0 start
        ;;

    *)
        #log_success_msg "Usage: bind_user_directories {start|stop|restart}"
        log_success_msg "Usage: service bind_user_directories <start|stop|restart>"
        exit 1
        ;;
esac

exit 0

ステップ2. bind_user_directories.shを保存して実行可能にします。

chmod a+x bind_user_directories.sh

手順3./usr/local/sbinなどの適切な場所にリンクします。

Sudo ln -s bind_user_directories.sh /usr/local/sbin/bind_user_directories.sh

ステップ4. upstartスクリプトを作成します。

Sudo emacs /etc/init/bind_user_directories.conf

内容:

description "runs mount --bind command for certain pre-defined directories for a specific user"

start on filesystem and net-device-up IFACE!=lo

stop on runlevel [!023456]
console output
respawn
respawn limit 10 5

exec /usr/local/sbin/bind_user_directories.sh start

これがあなたのために働くならば、私に知らせてください。ログインした後、システムログでメッセージを確認できます(まだテストしていませんし、以前にこのようなものを実装したことはありません)。ありがとう。

2
MountainX

ログイン前にルートとしてスクリプトを実行するには

  1. pstart でスクリプトを開始できます。

  2. 既存の kdm/gdm/etc起動スクリプト にスクリプト呼び出しを追加できます。

例: トピック:FAQ:自動開始/自動実行、定期実行

0
user26687