web-dev-qa-db-ja.com

sudoのパスワードとしてキーファイルを使用できますか?

環境

私はラップトップで公共の場所で作業するのが好きですが、パスワードなしでSudoを使用することも好きです。私が今知っていることに基づいて、NOPASSWDファイルでsudoersオプションを使用しますが、もちろん誰でもSudoを好きなように使用できます。

1つの重要な考え頭に浮かぶロックプログラムが存在するということです。ただし、フラッシュドライブを使用すること(およびSudoのみに使用すること)が(1)ので、 (2)パスワードを入力するよりも簡単で、(3)自分のコンテンツにアクセスしたり、悪意のあることをしたりする人に関心がありません。ラップトップは他の人の周囲に公開され、私のラップトップの唯一の知的財産は非常に基本的なAngularプロジェクト。

さらに、私や他の人は、XまたはWayland環境を実行していないコンピューターでのSudoの誤用を防ぎたいと思うかもしれません。現在の作業には最新のWebブラウザーが必要ですが、Xを使用せずにマルチプレクサーを使用する機会がある場合は、そうします-私のラップトップは少し古くて遅いです。

質問

私がやりたいことは、フラッシュドライブにキーファイルを置き、ラップトップにいるときにフラッシュドライブを接続し、離れるときにフラッシュドライブを取り出すことです。

この問題から派生した私の3つの質問を次に示します。

  1. これはSudoでそのまま可能ですか?
  2. そうでない場合、これを可能にするプログラムを作成できますか?
  3. もしそうなら、どの言語がこのプログラムを書くのに最適でしょうか?

(4. [おそらく無関係な質問]このパッケージは個別にできるのでしょうか、それともsudoのフォークである必要があるのでしょうか?)

注意

関連がある場合、私のセットアップはbspwmを使用したArch Linuxで、デスクトップ環境はありません。私の仕事のほとんどはurxvt/vimでのWeb開発とそれをChromeでチェックすることです。

11
Gage Sorrell

NOPASSWDオプションがそれだけでは要件を満たさない理由を理解できていませんが、フラッシュドライブの存在を必要とする場合は、ほとんどのことを実行できるものを考えることができます探しています。

これは回避策の詳細ですが、ローカル管理ユーザーを作成してsuperuserと言い、そのユーザーにパスワードなしのSudo権限を与えることができます。つまり、次の行を/etc/sudoersファイルに追加します:

superuser ALL=(ALL) NOPASSWD:ALL

次に、パスワードログインを無効にし、そのユーザーのキーのみのSSH認証を構成します。つまり、passwd -l superuserを実行し、/etc/ssh/sshd_configに次のスタンザを追加します。

Match user superuser
PasswordAuthentication no

次に、このユーザーのSSHキーペアを作成します。公開鍵を/home/superuser/.ssh/authorized_keysに追加し、秘密鍵をフラッシュドライブに配置します。次に、superuserアカウントを使用する場合は、フラッシュドライブを接続し、秘密鍵を使用してsuperuserアカウントにSSHで接続します。そして、ほら!これで、ユーザーにパスワードなしのSudoが提供されました。もちろん、完了したらシェルセッションを終了する必要があります。フラッシュドライブを取り外すだけでは不十分です。 precommandフック を設定して秘密鍵をチェックし、存在しない場合(または無効な場合)に自動的に終了することもできると思いますが。

3
igal