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


8

多くのように/etc/profileして~/.profileではなく、ユーザのルートにより、RANは、ログインを行っています。/etc/rc.localブート後に実行されますが、ログイン前にスクリプトを実行する必要があります。ユーザーはsudoerではありません。

ありがとう!


そこにこれを行う方法かもしれないが、それは次のようではないでしょう/etc/profileか、~/.profileこれらのスクリプトで実行されるコードは、ユーザーのシェルで行われ、ユーザーが持ってしたくない場合は一方で、ユーザの制御の対象とされているため、rootそれ自体でプログラムを実行する能力。これは、ユーザーのプロセスの外部にある実行中のサービスによって行われる必要があります。...実行するスクリプトの目的をお知らせいただければ助かります。
Eliah Kagan、2011

特定のユーザーに対して特定の(--bind)マウントを実行する必要があります。所有者とユーザーのオプションを使用してfstabを試しましたが、機能しません。/etc/rc.localは1つのオプションですが、ユーザーがログインしているかどうかにかかわらず、常にマウントを実行します。現在、ユーザーに「マウント」のsudoer権限を付与していますが、これは回避策であり、標準ユーザーに権限を付与することは好きではありません。代わりにrc.localを使用すると思います。ありがとう!
アントニオ・サンチェス

その特定のmountコマンドのみでルートスクリプトを作成し、そのスクリプトのみを実行する権限をユーザーに与えることができます(構成中/etc/sudoers)。オプションを指定したコマンドは、で直接設定できますsudoers
enzotib

私はすでにその方法を試しました。問題は、スクリプト内で「mount」を実行するときが来たときに、「sudo」が必須であることです。これは、スクリプトが「root」ではなく「user」によって実行されるため、1日の終わりに「mount」が実行されるためです。 「ユーザー」にも許可する必要があります。sudoersルールは1つだけではなく、2つになりました。これは私の経験です。ですから、私は専門家ではなく、何か間違ったことをしたことを覚えておいてください。ありがとう!
AntonioSánchez

回答:


3

sudoersの方法に戻ると、あきらめる前にほとんどそこにいたと思います。あなたの最新のコメントを見て、おそらくあなたのために何かを修正する何かに対処したいと思います:

スクリプトをrootとして実行する場合は、スクリプト内からsudoを呼び出す必要はありません。

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

#! /bin/bash

echo $USER
whoami

私が走れば、私はそれらの両方のために戻るのsudo ./myscriptを見rootます。スクリプトが実行されているセッションはルートシェルです。

つまり、スクリプトで行うすべての操作には、すでにルート権限が付与されています。呼び出す必要はありませんsudo(怪我をしないように- root通常はsudo権限があります)。

だから、あなたのスクリプトを書くchownにそれをrootし、chmodそれがために700(これだけルートは、実行、読み取り、または編集することができ、それ)と、その後は自分のユーザーは、[S]はsudoersファイルを介して実行することができます。うまくいくはずです。

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


2

ステップ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

これで問題が解決する場合は、お知らせください。ログイン後、システムログでメッセージを確認できます(まだテストしておらず、このようなものを実装したことはありません)。ソリューションを改善した場合は、ここで最終的なソリューションを共有してください。ありがとう。


はい、うまくいきます!これは、Ubuntuの世界でのmdms /etc/mdm/PostLogin/スクリプトの優れた代替手段です。
Adam Ryczkowski 2014年

systemdに同様のソリューションはありますか?... Cf. askubuntu.com/questions/847930/...
アダム・ライチョースキー

0

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

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

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

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


しかし、AntonioSánchezが探しているのはroot 、特定のユーザーがログインしたときにスクリプトを実行する方法です。
Eliah Kagan 2011

スクリプトは独立して実行する必要があり、セッションはグラフィックシェルまたは標準シェルです。これを指摘するためにタイトルを更新しました。私はUpstartについて何かを読みましたが、それは(明らかに)単純なタスクでは複雑に見えます。とにかく今までのところ、Upstartが唯一の方法のようです。アップスタートを知っているなら、この仕事を成し遂げるほど十分に学ぶことは難しいでしょうか?ありがとう!
AntonioSánchez
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.