web-dev-qa-db-ja.com

systemdで同等のsudo

「machinectlShell」またはsystemd-runにダイアログウィンドウではなくターミナルでパスワードを要求させる方法は?

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

machinectl Shell --uid=root --setenv='DISPLAY=:1.0' --setenv=Shell=/bin/bash .Host /bin/bash -lc 'startxfce4'

ただし、ダイアログウィンドウを使用してパスワードを要求します enter image description here

Sudoと同じ動作をしたい(Sudoは端末を使用してパスワードを要求するので、簡単にスクリプトを作成できます)

私が見つけた途中で、次のようなsshを使用しています。

ssh -t MyActualNormalUser@localhost

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

machinectl Shell --uid=root --setenv='DISPLAY=:1.0' --setenv=Shell=/bin/bash .Host /bin/bash -lc 'thunar'

これで、machinectlは、GUIダイアログウィンドウの代わりにターミナルを使用してパスワードを要求します。 enter image description here

Sshを使用せずに同じ結果を得るにはどうすればよいですか? machinectl/pkexecにターミナルでパスワードを要求させることは可能ですか?

sudoを使ってみませんか? Sudoは、実行するコマンドに対して新しいセッションを作成しません。machinectlは、完全に分離されたセッションを実行するため、スクリプト作成が容易になります。そして、私がmachinectl/pkexecを読んだとき、私が間違っていなければ、su/Sudoが置き換えられます...

2
Badr Elmers

別のユーザーとしてコマンドを実行する

別のユーザーとして何かを実行するには、さまざまな方法があります。

  • machinectl:これは別のセッションを作成します

  • ssh:これは別のセッションを作成します

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

  • pkexec:これは別のセッションを作成しません

  • Sudo:これは個別のセッションを作成しません

端末でパスワードを渡す方法(GUIではない)

使用できるもの:

  • pkexec:これにはpkttyagentが必要です

  • machinectl:これはguiを使用してパスワードを要求します。パスにttyを使用するには、pkexec/Sudoまたはsshが必要です。

  • systemd-run:これはguiを使用してパスワードを要求します。パスにttyを使用するには、pkexec/Sudoまたはsshが必要です。

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

  • ssh:これにはrootパスワードが必要です。または、pkexec/Sudoまたはsshuser @localhostを使用する必要があります。

結論:

machinectlとsshだけが分離されたセッションを提供してくれました。systemd-runも悪くはありませんが、セッションを作成するためではなくスクリプト用です。

ルートを取得するには、pkexecを使用できます

  • machinectl
    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'"
  • systemd-run
    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:ダイアログGuiの代わりに端末を使用してpkexecにパスワードを要求させるために必要です

タイムアウト3秒:pkttyagentが単独で死ぬことはないため、必要です。

2
Badr Elmers

解決策1

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

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

解決策2

Rootユーザーとして、machinectl --no-ask-passwordを使用できます。ドキュメントから:

--no-ask-password

特権操作の認証についてユーザーに照会しないでください。

参考文献

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

0
Phenyl