user1にパスワードなしで「su-user2」を許可する


51

martinユーザーmartin-testがパスワードなしでユーザーに切り替えられるようにする必要がある

su - martin-test

これはで設定できると思います/etc/pam.d/su。このファイルにはコメントを解除できる行が既にいくつかあります。ただし、martinグループにユーザーを追加するというアイデアは好きではありませんwheel。にmartin切り替えることができるよりも多くの特権を与えたくありませんmartin-test。私も使用したくないsudo

ユーザーの特権をmartin最小限に抑えながら、それを行う最善の方法は何でしょうか?


2
これは、sudo例えばで簡単に行えますsudo -u martin-test -i。特に質問している理由はありますsuか?
ヨルダン14

sudoこの理由だけでインストールしたくありません(通常は使用sudoせず、特に好きではありません)。そして、私はそれを使用pamすることはそれを行うためのよりクリーンでより透明な方法だと思います。
マーティンベグター14

3
@MartinVegterスクリプトの回答からわかるように、ある種のpamメカニズムでこれを行うのは非常に見苦しいです。本当にこれがまさにsudo意図されたものです。通常は使用しないこと以外に、異議はありますか?
パトリック14

1
できれいな解決策が可能であればpam、私はそれを好むでしょうsudo。if sudoが唯一の可能性である場合、それよりも問題ありません。私の反対sudoはほとんどイデオロギー的ですsudo foo。ユーザーがを使用して管理を行うという考えは好きではありません。管理を行う必要があるときは、rootとしてログインします。それ以外の場合、ユーザーとしてログインします。これら2つの異なる役割を混在させることはできません。また、既にpamインフラストラクチャがインストールされています。setuidセキュリティバグを引き起こす可能性のある別のプログラムをインストールしたくありません。
マーティンVegter 14

5
@MartinVegter sudo foo特定のコマンドを実行する必要はありません。須藤はsudo -s、シェルを起動します。sudoは、それのセキュリティを徹底的に吟味された意味は非常に一般的なユーティリティですはるかにいくつかのPAMの策略がなるより。また、タスクのルートシェルを取得することは、特定のコマンドを起動するよりもはるかに安全でないと主張します。シェルを起動すると、すべてをルートとして実行します。これらのいずれか(simpleなどls)にセキュリティの脆弱性がある場合、セキュリティホールを開いたところです。
パトリック

回答:


61

の行のすぐ下に次の行を追加pam_rootok.soします/etc/pam.d/su

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin

これらの行は、pam_succeed_if.soモジュールを使用してチェックを実行します。参照のLinux-PAM設定ファイルの構文を詳細学ぶためauthのライン。

  • 最初の行は、対象ユーザーがであるかどうかを確認しますmartin-test。そうである場合、何も起こりません(success=ignore)。次の行に進み、現在のユーザーを確認します。そうでない場合、次の行はスキップされ(default=1)、通常の認証手順で後続の行に進みます。
  • 2行目は、現在のユーザーがであるかどうかを確認しますmartin。そうである場合、システムは認証プロセスが成功したと見なし、(sufficient)を返します。そうでない場合、何も起こらず、通常の認証手順を使用して後続の行に進みます。

suグループに制限することもallowedpeopleできsuます。ここでは、グループはパスワードなしでできます。

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople

1
特定のグループに属しているかどうかを認証する場合:auth十分なpam_succeed_if.soユーザーグループ内のグループ
-shrimpwagon

@gnpスーパーありがとう!! nrpeでiCingaを操作するには、別のユーザーとしてコマンドを実行する必要があります!! たくさん助けました!!!!!! ありがとう!!!!!
サラヴァナクマル

@GnP askubuntu.com/questions/821793/で私を助けてください
Nullpointer

変更を適用する方法についても情報を追加するとよいでしょう。
キスリック

@Kyslikどういう意味ですか?必要なファイルを編集する方法の指示は答えにあります
...-GnP

12

グループを変更したりsudo、を使用したくない場合は、pamモジュールを使用pam_execして、pamステージで外部スクリプトを実行します。

あなた/etc/pam.d/supam_rootok.so行の後に行を追加します:

auth       sufficient pam_exec.so quiet /path/to/script

/path/to/script パーミッション755(rwxr-xr-x)および次のコンテンツがあります。

#!/bin/bash
if [ "$PAM_TYPE" == "auth" ] && \
[ "$PAM_USER" == "martin-test" ] && \
[ "$PAM_RUSER" == "martin" ]; then
  exit 0
else
  exit 1
fi

したがって、次の場合、このスクリプトは成功して存在しますsu

  • 認証のコンテキストで呼び出され、
  • 呼び出し元のユーザーであるmartin
  • 認証するユーザーはmartin-testです。

見る:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 

1
pam_accessを使用すると、スクリプトに依存することなく、同様の機能を提供できます。(これはpam_accessを行うようにしたものです)
jsbillings

1
@jsbillingsそれは(詳細を含めて)別の答えになりますか?
ホークレイジング14

1
どのように私は私を変更する必要があります/etc/pam.d/suを使用するようにpam_access私の状況のために?
マーティンVegter 14

3
@jsbillings実際にpam_accessはこれができません。supamスタックを通過するときは、変更元のユーザーではなく、変更先のユーザーとして実行されます。したがって、などのルールを追加する+ : martin : ALLと、誰でもに変更でき martinます。に変更martinmartin-testても、だれでも実行できます。出身のユーザーと変更するユーザーの両方を分析する必要があります。本当に、これは正確に何であるsudo...のためである
パトリック

0

ルートアカウントにはアクセスできないが、コマンドの実行に使用するユーザーのパスワードは持っている場合は、次の操作を実行できます。

  • これにより、totoのパスワードが尋ねられます。su-toto -c whoami
  • これはしません:ssh toto @ localhost whoami

totoのauthorized_keysに公開キーをインストールするだけです


思慮深い答え..しかし、誰かが実行しようとするコマンドはすでにマシン上にあります。そのため、同じサーバーに対してsshを実行しても意味がありません。
ラジャアンバザハガン

-1

私の簡単な解決策は次のとおりです。

sudo login -f martin-test

どうしてもsudoを避けたい場合は、これをスクリプトに含めることができると思います。

  1. rootが所有し、root特権で(setuidフラグを使用)
  2. 誰もが実行可能で、sudoもありません。

ただし、これを実際に機能させるにはchown rootchmod +s ToTest.shビットとビットを把握できません。

#!/usr/bin/env bash
echo howdy, I am $(whoami)
sudo login -f martin-test

エコーからわかるように、私はまだ通常のユーザーとして実行されます。そして、それでもsudoパスワードが必要です。ルートとして実行されていた場合sudo、最後の行の...


シェル(またはその他のスクリプト)スクリプトのsetuidフラグは、Linuxでは機能しませんが、これには正当な理由があります。これは、「ENV」を介してのbashに係合(かなり自己defeatingly、あなたがどこかわからないと仮定した場合ので:作業SUIDフラグが上記のスクリプトはすぐにトラップになることに注意してくださいbashで、なぜあなたはどこあなたが知っていると仮定んenvですか存在するかどうか?)しかし、最終的に、bashこれが正確に何になるかはわかりません。呼び出し元のユーザーのディレクトリから取得でき、ソースコードから1分前にコンパイルされている可能性があります。私がどこへ行くのかわかりますか?または、ユーザーがオーバーライドできますwhoami...
David Tonhofer

私の脳は現在、これらの問題から完全に把握するには遠すぎますが、詳細な説明には感謝しています。
フランクノッケ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.