web-dev-qa-db-ja.com

rootユーザーがスクリプトにアクセスできるようにする方法は?

通常のユーザーはこのスクリプトを実行できますが、rootはそれを見つけることができません。

~/binに保存した簡単なスクリプトがあります。 .profileファイルを更新して、このフォルダーをPATHに含めました。ターミナルに移動して、任意のディレクトリで作業し、スクリプトの名前を入力すると、問題なく実行できます。しかし、その端末でルートに切り替えると、スクリプトが見つかりません。新しい$ PATH更新が必要なファイルがどこかにあると思いますが、どのファイルかはわかりません。

1
dhp904

おそらくSudoを使用している場合は、おそらく$ PATH環境変数をsecure path(ファイルで定義されている/etc/sudoers)。 〜/ binディレクトリは、デフォルトには含まれていませんsecure_pathsudoersファイルに設定されているため、Sudo scriptは機能しませんが、Sudo ~/bin/scriptします。

sudoers構成ファイル(つまり/ usr/local/bin)で定義されているフォルダーの1つにスクリプトを配置して、直接アクセスできるようにすることができます。 secure_pathも設定ファイルで変更できますが、推奨されません。

6
IanC

グローバル設定を変更せずに、1つのコマンドでSudosecure_pathへのパスをリセットするのを一時的に防ぐには、次のようにします。

Sudo env PATH=$PATH command

commandは、PATHにある実行する実行可能ファイルの名前です。

これのエイリアスを作成して、(ルートではなく)独自の~/.bashrc...に追加できます。

alias Sudo2='Sudo env PATH=$PATH'

次に、Sudo2 commandを使用して、独自のPATHを使用してSudoで実行可能ファイルを実行できます。

2
Zanna

rootで実行したときにスクリプトが失敗する理由

有効なユーザーのパスを確認する必要があります...この場合はroot

これを実行します:

(最初の2行はプロンプトとコマンドです。最後の行はコマンドの出力です。)

$ Sudo su -
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

他者が実行するスクリプトを配置する場所に関する推奨事項:

プロジェクトの/optの下にサブディレクトリを作成し、プロジェクトのexecスクリプトをそこに配置します。これは、同じパーティションへのOSのフレッシュインストール(もちろん、マイナスフォーマット)を生き残った場所です。

スクリプトのルート領域は次の場所にあります。

/opt/myprojectname/myscriptfiles/

これで、スクリプト/usr/local/bin/をリンクできます

$ Sudo ln -s /opt/myprojectname/myscriptfile/myscript.sh /usr/local/bin/myscript.sh`

上記のテストからわかるように、root $ PATH変数を変更する必要はありません。既に存在しているためです。

そのため、ルートパスを変更するのではなく、/opt/myprojectname/myscriptnameを検索するようにパスを変更できます

または、~/bin/myscript.sh/usr/local/bin/myscript.shにリンクすることもできます。

0
L. D. James

他の人が言ったように、特権環境はユーザーの環境と同じではなく、正当な理由があります。主に2つの解決策があります。(i)スクリプトをパスで呼び出すか、(ii)スクリプトをルートに移動してファイル階層内で上に移動し(たとえば、/ usr/custom/binでも動作します)、更新します反対のことをしようとするのではなく、ユーザーのパス。

0
n.caillou