/etc/profile
および~/.profile
によく似ていますが、ユーザーがログインしているのではなく、rootで実行されました。 /etc/rc.local
は起動後に実行されますが、ログインする前にスクリプトを実行する必要があります。ユーザーはsudoerではありません。
ありがとう!
Sudoersメソッドに戻るために、あきらめる前にほとんどそこにいたと思います。あなたの最新のコメントを見て、私はおそらくあなたのために物事を修正するものに対処したいと思います:
次のようなスクリプトがあります。
#! /bin/bash
echo $USER
whoami
Sudo ./myscript
を実行すると、それらの両方に対してroot
が返されます。スクリプトが実行されているセッションはルートシェルです。
つまり、スクリプトで行うすべての操作にはすでにルート権限が付与されているということです。 Sudo
を呼び出す必要はありません(傷つける必要はありません-root
は通常Sudo
のアクセス許可を持っています)。
スクリプトを作成して、chown
をroot
に、chmod
を700
に(したがって、rootのみが実行、読み取り、または編集できる)、ユーザーを許可するだけです[ s] sudoersを介して実行します。うまくいくはずです。
動作しない場合は、アクセス許可フレームワークではなく、スクリプトに大きな問題がある可能性があります。ユーザーにフルSudo
アクセス権を付与し(管理グループに追加するのが最も簡単な方法です)、スクリプトを実行することをお勧めします。
ステップ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
これがあなたのために働くならば、私に知らせてください。ログインした後、システムログでメッセージを確認できます(まだテストしていませんし、以前にこのようなものを実装したことはありません)。ありがとう。
ログイン前にルートとしてスクリプトを実行するには
pstart でスクリプトを開始できます。
既存の kdm/gdm/etc起動スクリプト にスクリプト呼び出しを追加できます。