他のユーザーによるコマンドの実行

他のユーザーによるコマンドの実行

「machinectl shell」またはsystemd-runがダイアログウィンドウの代わりに端末にパスワードを要求するようにするにはどうすればよいですか?

以下を使用してrootとしてコマンドを実行できます。

machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'startxfce4'

ただし、ダイアログウィンドウを使用してパスワードを要求します。 ここに画像の説明を入力してください。

私はsudoと同じ動作をしたいです。 (sudoは簡単にスクリプトを書くために端末を使ってパスワードを要求します。)

SSHを使用して見つけた方法は次のとおりです。

ssh -t MyActualNormalUser@localhost

次に、上記と同じコマンドを実行します。

machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'thunar'

machineectlは、GUIダイアログの代わりに端末を使用してパスワードを要求します! ここに画像の説明を入力してください。

SSHを使用せずに同じ結果をどのように取得できますか? machineectl / pkexecが端末にパスワードを要求することを強制できますか?

なぜsudoを使用しないのですか? sudoは私が実行するコマンドのための新しいセッションを作成せず、machinectlは完全に別々のセッションを実行するので、スクリプトが簡単になります。 machineectl / pkexecを読むときに覚えている場合は、su / sudoが置き換えられます...

答え1

他のユーザーによるコマンドの実行

他のユーザーとして何かを実行するには他の方法があります。

  • 機械制御:別のセッションが作成されます。

  • SSH:別のセッションが作成されます。

  • システム実行中:別々のセッションを作成するのではなく、セッションのように制御できる別のサービスユニットを作成します。たとえば、実行すると、loginctl session-status次のエラーが発生します。Could not get properties: Caller does not belong to any known sessionセッションIDがないからです。

  • プログラムの実行: 別のセッションを作成しません。

  • Sudo: 別のセッションを作成しません。

端末でパスワードを渡す方法(GUIではありません)

私達は次を使用できます:

  • プログラムの実行: pkttyagent が必要です。

  • 機械制御:GUIを使用してパスワードを提供し、pkexec / sudoまたはsshを必要とするttyを使用してパスワードを渡す必要があります。

  • システム実行中:GUIを使用してパスワードを提供し、pkexec / sudoまたはsshを必要とするttyを使用してパスワードを渡す必要があります。

  • Sudo:sudoをpkexecに置き換える必要があります。

  • SSH:rootパスワードが必要な場合、またはpkexec / sudoまたはssh user@localhostを使用する必要があります。

結論として:

machinectlとsshだけが別々のセッションを提供し、systemd-runも良いがセッションを生成しないスクリプトでは動作します。

root権限を取得するには、pkexecを使用できます。

  • 機械制御
    timeout 3s sshpass -e pkttyagent -p $(echo $$) &
    pkexec machinectl shell --uid=root --setenv="DISPLAY=:1.0" --setenv=SHELL=/bin/bash .host /bin/bash -lc "startxfce4"
  • SSH
    timeout 3s sshpass -e pkttyagent -p $(echo $$) &
    pkexec ssh -t root@localhost  "bash -lc  'export DISPLAY=:1.0 ; startxfce4'"
  • システム実行中
    timeout 3s sshpass -e pkttyagent -p $(echo $$) &
    pkexec systemd-run --pty --pipe --wait --collect --service-type=exec --uid=root bash -lc "export DISPLAY=:1.0 ; export SHELL=/bin/bash ; startxfce4"

pkttyagent:pkexecがパスワードを求めるダイアログボックスGuiの代わりに端末を使用するように強制する必要があります。

タイムアウト3秒:pkttyagentが単独で終了しないために必要です。

答え2

ソリューション1

systemd-ask-passwordを使用してbash変数にパスワードを割り当てることができます。

はい

password=$(systemd-ask-password --echo "machinectl password: ")
machinectl login {{ user }} $password
machinectl shell {{ your command }}

ソリューション2

machinectl --no-ask-passwordルートとしてドキュメントで次のものを使用できます。

--パスワードを聞かないでください。

特権タスクに対してユーザーに認証を要求しないでください。

引用する

https://www.freedesktop.org/software/systemd/man/systemd-ask-password.html https://www.freedesktop.org/software/systemd/man/machinectl.html

関連情報