web-dev-qa-db-ja.com

Sudoを必要とするスクリプトは、スクリプトがなければ失敗しますか、それともSudoとプロンプトを使用しますか?

バックライトの明るさを細かく制御できるスクリプトがあり、実行するにはSudoが必要です。それは本質的にこれです:

backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight

~/bin/backlight-adjustに住んでいます。 tee $backlightは特権のある場所に書き込んでいるため、スクリプトにはSudo特権が必要です。したがって、Sudoで実行しないと失敗します。

Sudo backlight-adjustSudo環境の~/binになく、自分の環境だけなので、$PATHを実行できないため、このアプローチには問題があります。だから私はSudo env "PATH=$PATH" backlight-adjustまたは類似のものを実行する必要があります。

または、次のように書くこともできます。

backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | Sudo tee $backlight

パスワードを要求します。

2番目の方法は、Sudoを入力することを覚えておく必要がないので、私にとってはうまくいきます。プロンプトが表示されます。そして、$PATHをそのままにしておくことができます。これは全体的に便利だと思いますが、2番目の方法を実行しない理由はありますか?

(私はXubuntu 14.04を実行していて、私のシェルはGNU bash 4.2.45です。違いがある場合)。

26
John Feminella

個人的に、私は別のアプローチを使用します。スクリプトのエイリアスを作成します。この行を~/.bashrc(または他のシェルでは同等のもの)に追加します

alias backlight-adjust='Sudo ~/bin/backlight-adjust'

そうすれば、Sudoで実行することを覚えておく必要がなく、スクリプトにSudoを追加する必要もありません。これは完全に透過的であり、backlight-adjustを実行するときにパスワードを要求するだけです。

27
terdon

なぜそれが正しくないのかはわかりません---通常、コマンドが質問を出さないようにして、スクリプトが実行できるようにすることを好みます。 /etc/sudoersを微調整して、パスワードなしでSudoを機能させることができます。

しかし...追加しないでください

chgrp  one-of-your-groups-here /sys/class/backlight/acpi_video0/brightness     
chmod g+w /sys/class/backlight/acpi_video0/brightness 

/etc/rc.localで、Sudoを忘れてしまいましたか?

(Ubuntuでは、Sudoを使用できる場合はSudoグループに属しているため、chgrp Sudo /sys...を使用して満足できます。)

7
Rmano

または、次を追加することもできます

Defaults        env_keep +="PATH"

あなたの/etc/sudoersファイル。

3
Mog

〜/ binがSudo環境の$ PATHにないため、Sudoバックライト調整を行います

それで、なぜそれに依存するのですか?その行を/home/user/bin/backlight-adjustと動作します。

しかし、私は本当にエイリアスを使用するTerdonの解決策も欲しいです。または、スクリプトを/usr/bin/そして、すべてのユーザー(rootを含む)が利用できます。

2
ExploWare

一般的なルールを与えることはできません...スクリプト/プログラムが何らかの再構成(たとえば、プリンター)を実行するように設計されていて、通常のユーザーによって呼び出される場合は、そうする必要があります。それ以外の場合は、私は一人で十分に残しておきます。通常のユーザーが実行した場合は、失敗します(明示的なチェックの結果、または何かが許可されていないため)。

昇格された特権は、たとえあったとしても、控えめに渡されるべきです。より高い権限に切り替えるのは難しいので、専門家に任せたほうがよい(つまり、Sudo(1))。

1
vonbrand