最近 Sudo
の認証キャッシュ機能 を無効にしたため、毎回パスワードの入力を求められます。
そして、これはセキュリティには良いのですが、解決策を見つけられなかったわずかな問題を引き起こしました。
Sudo <command> &
過去にSudo
コマンドを実行していた場合、パスワードをキャッシュして、今後数分間、プロンプトなしでSudo
コマンドを実行できるようにしたため、実行できるようになりました。コマンド。
しかし、手元にキャッシュがなく、すぐに新しいスレッドを開始し、Sudo
がパスワードの入力を求めないので、今実行すると、これで実行できません仕方。
したがって、Sudo -i
を実行する前に、この形式のコマンドを実行することはできません。
だから、これを回避し、この方法でプログラムやコマンドを実行する方法があるのだろうかと思っていましたか?
Ubuntu GNOME 15.10をGNOME 3.18で実行しています。具体的には、この方法で実行したいプログラムはetherape
ですが、それが違いを生む場合は、すべてのプログラムとコマンドで動作するようにしたいと思います。
バックグラウンドでSudo
を実行する代わりに、Sudo
にバックグラウンドでコマンドを実行するように指示します。 man Sudo
から:
-b, --background
Run the given command in the background. Note that it is not
possible to use Shell job control to manipulate background
processes started by Sudo. Most interactive commands will
fail to work properly in background mode.
例えば:
Sudo -b sleep 10
別の方法は、シェルを使用してコマンドを実行することです。
Sudo sh -c 'sleep 10 &'
別のオプションでは、パスワードを取得するためのグラフィカルプログラムを指定し、Sudo
をバックグラウンドに送信します。
-A, --askpass
Normally, if Sudo requires a password, it will read it from
the user's terminal. If the -A (askpass) option is
specified, a (possibly graphical) helper program is executed
to read the user's password and output the password to the
standard output. If the Sudo_ASKPASS environment variable is
set, it specifies the path to the helper program. Otherwise,
if Sudo.conf(5) contains a line specifying the askpass
program, that value will be used. For example:
# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass
If no askpass program is available, Sudo will exit with an
error.
Askpassプログラムは通常、SSHに使用されます。そのようなものの1つは、ssh-askpass-gnome
パッケージによって提供されます。これは、少なくともUbuntu 15.10にデフォルトでインストールされます。
Sudo_ASKPASS=/usr/bin/ssh-askpass Sudo -A sleep 10 &
timestamp_timeout
を少なくとも0.02
のようなもの(1.2秒、0
と同じくらい安全)に設定する場合は、/etc/sudoers
(必要に応じて、ただし、デフォルト設定またはtimestamp_timeout
を0
one以外に設定します)次のようにできます)、~/.bashrc
にこのようなエイリアスを設定できます。これにより、コマンドを実行する前に何かを行うことを覚えておく必要がなくなり、プロセスの制御を維持できます。
alias Sudo='Sudo -v; [ $? ] && Sudo'
ここでのトリックは、Bashが最初にSudo -v
を個別に解析し、ユーザーを認証し、潜在的なバックグラウンド部分を[ $? ] && Sudo
コマンドに制限し、Sudo -v
が成功したかどうかを確認してSudo
を再度実行するセミコロンですそれ)それがあった場合。
$ alias Sudo='Sudo -v; [ $? ] && Sudo'
$ Sudo -H gedit &
[Sudo] password for user:
[1] 19966
$ jobs
[1]+ Running [ $? ] && Sudo -H gedit &
できません。 &
は、コマンドをすぐにバックグラウンドに送信します。つまり、サブシェルがバックグラウンドで作成され、そこでコマンドが実行されます。 Sudo
の場合のように、そのコマンドがプロンプトを発行すると、プロンプトがバックグラウンドで表示され、表示されません。
それを回避する唯一の方法は、コマンドをフォアグラウンドに戻し、パスワードを提供してバックグラウンドに送り返すことです。例えば:
$ Sudo command &
$ fg
Sudo command
[Sudo] password for terdon:
今、あなたのパスワードを入力して、ヒット Enter そして、ヒット CtrlZ バックグラウンドに送り返し、bg
を実行して実行を継続するよう指示します。
より単純なアプローチは、&
を使用せず、代わりに、手動でバックグラウンドにジョブを送信することです。 CtrlZ bg
起動後。
最後に、Sudoのパスワードタイムアウトを1秒または2秒などに設定することを検討する必要があります。これにより、十分なセキュリティが得られ(Flashから保護しようとしている場合を除く)、期待どおりにそのようなコマンドを実行できます。