ログインが無効になっているユーザーとしてコマンドを実行する方法は?


21

suコマンドを使用してアプリケーションを別のユーザーとして実行しようとしています

この場合、私はirssiを実行しようとしています

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

gksuを実行して同じパラメーターを設定すると動作しますが、ユーザーのパスワードを要求されません。問題は何ですか?そして、どうすれば解決できますか?

ユーザーがこのように作成されたことに注意してください

adduser --system --disabled-login [username]

それが違いを生むなら....ため息。


irssiを起動する-cフラグを忘れていませんか?(su -c irssi)
-eephyne

あまりにも...懸命のrunasにmanページがそれを望んでいると正確にthatsの...しかし、何も起こりませんgrrrr WTFなぜ千もの...しようとしたことを試してみました
user123361

それはちょうどそれは可能性irssiの問題があり、suコマンドが動作することを?
ナネ

irssiを実行するための '[ユーザー名]'の適切な権利はありますか?
ドカ

回答:


28

この回答は、質問の編集を考慮に入れても、あなたを助けます。特に、で作成されたアカウントに --disabled-loginはパスワードが設定されておらず、他のログイン手段もありませんがsudo、ユーザーとしてコマンドまたはシェルを実行するために使用することができます(以下で説明)。実際、これがrootUbuntuでのアカウントの設定方法 です。

コマンドには複数の問題がありますsu - irssi

このコマンドは、という名前のユーザーが所有するシェル起動しようとしますirssi

次の場合に失敗します。

  • irssiユーザーはいません。
  • irssiユーザーのアカウントが無効になっています。
  • irssiユーザーのアカウントは、対話的なログインのために無効になっています。アカウントがFTPなどのサービスの使用を許可されている場合でも、シェルをすぐに終了するようなシェルに設定することにより、通常のログインを禁止されることがあります/bin/false。その後、メッセージなしでログインがすぐに終了します。
  • 入力するパスワードは、irssiユーザーにとって正しくありません。

この-フラグにより​​、シェルは初期ログインシェルをシミュレートします。つまり、としてログオンするのと非常によく似ていirssiます。なしで-あればフラグ、suコマンドが成功した、あなたはまだが所有しているシェルを取得したいirssiが、のような環境変数はHOME変わらないだろう。

あなたの代わりにプログラムを実行する場合と呼ばれるが irssi、あなたが呼び出す必要がありsu、異なります:

su username - -c irssi

省略した場合、--it はコマンドをrootとして実行しようとしますと同じです。-c username-c root

または、シェルを起動してからコマンドを実行できます

  1. でシェルを開始します。su username -
  2. シェルで、コマンド(irssi)を実行します。
  3. 完了したら、を実行してシェルを終了しますexit

コマンドを実行する root

irssiとして実行する場合は、実行する方法rootsuはありません。ルートログインはUbuntuでデフォルトで無効にされており、それらを再度有効にする理由はほとんどありませんrootログインを有効にしている場合は、を使用suしてになることができるはずrootです。それが有効に不要だ理由rootアカウントは、あなたはまだのようにコマンドを実行することができないかどうか、つまりroot持ちますsudo

あなたが持つコマンドを実行するとsudo、あなたはに入れ、あなたの、パスワードではないアイデンティティあなたが実行するコマンドを望むの下でユーザーのパスワードを。唯一の管理者として任意のコマンドを実行することrootsudo(あなたが再構成しない限りsudo、もちろん、他の人がそうすることを許可します)。そのため、システムの管理を許可されていないユーザーはroot、自分のパスワードを使用してコマンドを実行することはできません。

irssi同じように実行するにrootsudo

sudo irssi

そして、プロンプトではなくパスワードを入力しますroot

入力するパスワードを除き、これは次と同じことを行います。

su -c irssi

ただし、アカウントを有効にsudoする必要がないため、バージョンは成功するroot可能性があります。

と同様にsu別の非ユーザーとしてコマンドsudo実行rootするために使用できます。とirssi同じように実行するにusernamesudo

sudo -u username irssi

に関して、つまりターゲットユーザーの環境変数を使用する場合のsudo ように動作するsu -HOME場合は、次のフラグを使用してHOME実行できます。sudo-H

sudo -H irssi
sudo -H -u username irssi

でできるように、シェル全体を起動できsudoますsu。誰のパスワードを入力するかを除いて、このコマンドの効果はsu次のとおりです。

sudo -s

また、このコマンドの効果はsu -次のとおりです。

sudo -i

初期ログインシェルi略です。)

別のユーザーとしてシェルを起動することもできます。

sudo -u username -s
sudo -u username -i

さらに読む sudo

の詳細についてはsudo、以下をご覧ください。

うまくいかなかっgksusuのになぜ働いたのですか?

gksuおそらく実行して動作しましたsudo

gksu以下のためのフロントエンドです両方 susudo。Ubuntuでは、デフォルトで使用されますsudo(Ubuntuでは、su通常はになるために使用されないためroot、他の非rootユーザーになるための二次的な方法にすぎません)。

を実行gksuするsuと、フロントエンドとして使用できgksu --su-modeます。

あなたはかどうかを知ることができgksuているsuモードやsudo(必要に応じて)モード、および実行することによって、この設定を変更しますgksu-properties。これはユーザーごとの設定です。

gksusudoモードの場合、と同じように動作しますgksudo

さらに読む gksu


ソリューション後の分析

最終的に、次のコマンドで必要なコマンドを実行できることがわかりました。

sudo -u username irssi

(上記のテクニックです。)

最終的に、あなたは2つの情報を報告しました。これらの情報は、他の手法が失敗した理由を説明するには十分ですが、成功しました。

  1. usernameアカウントが使用して作成された--disabled-loginことはありません可能フラグ、パスワード(およびログ記録の無い他の手段で)を。パスワードがなくても、空白のパスワードでログインできるというわけではありません。認証に十分なパスワードないことを意味します。他の認証手段の排除と組み合わせて、この手段usernameはまったく認証できません。

    したがって、すべてのsuベースのソリューションが出ています。sudoただし、sudo偽装しようとしているユーザーとして認証されないため、動作します。代わりに、あなたはそれらになりすますことを許可されなければなりません、そして、あなたはあなた自身として認証します(すなわち彼らのパスワードではなく、あなた自身のパスワードを入力します)。

    アカウントにパスワードを設定することができます。これにより、ログインの障壁がなくなります。

    sudo passwd username

    ただし、ユーザーがログインを許可されない正当な理由がある可能性があります。たとえば、このユーザーがログインを許可され、グラフィカルにログインされた場合、ユーザーの環境または特権がX11アプリの実行にあまり適していないために悪い問題が発生します?このユーザーがログオンできる場合、そのユーザーとしてリモートでログオンできるようになりますか(ネットワークサービスを公開しているコンピューターの場合)。

    再度無効にする場合:

    sudo passwd -dl username

    関連:アカウントを一時的に有効にした後rootアカウントを再度無効にします。

  2. usernameアカウントがあり/bin/false、そのログインシェルとして。

    のようなシェルがbashログインシェルとして実行されると、環境が設定され、マシンを制御するための対話型プロンプトが表示されます。

    ときに/bin/false実行するには、他の一方で、それは何もしませんし、失敗を報告します。(/bin/true何もせず、成功を報告します。)

    falseそしてtrueコマンドは、スクリプトに有用であり、様々なテスト目的のために、だけでなく、そう、そのアカウントを無効にする際に、そのログインセッションはすぐに終了の誰かがログイン。そうすれば、パスワード(または他の認証手段)を有効にでき、シェルアクセスではなく、ユーザーがログインできます。たとえば、FTPサーバーがある場合でも、FTP経由でアカウントにアクセスできます。SSHサーバーがある場合、SSHを介してシェルを取得することはできませんが、ファイルを使用sftpscpてファイルを転送することはできます。

    以来usernameのログインシェルの非機能的だった、コマンドが好き、、、と仕事ができませんでした。su usernamesu - usernamesudo -u username -ssudo -u username -i

    しかし、シェルを提供しないコマンド、またはそれでも機能するコマンド。sudo -u username commandsu username -c 'command'

    以来のコマンドを実行することができ、あなたができる機能的な何かに、ユーザのログインシェルを変更します。

    sudo chsh -s /bin/bash username

    ただし、ユーザーの対話型ログインを無効にする正当な理由があるため、これも注意して行う必要があります。

ここでは、username両方ともパスワード「無効」シェルを無効にしました。動作するパスワードがないため、すべてのsuベースのソリューションが動作しませんでしたが、動作する対話型ログインシェルがないため、すべてのシェル生成ソリューションが動作しませんでした(手動でシェルを呼び出すなどを除く)。sudo -u username bash

sudo -u username command 残ったものです。


回答の作成中に多くの編集を行って申し訳ありません。ワオ。ありがとうございました。cat / etc / passwdを実行すると、構成したユーザーの最後に/ bin / falseが表示されます。これが失敗の原因です。それを修正する方法はありますか?
user123361

なんらかの理由で、sudo -u username irssiを使用するとうまくいきます。長く、よく説明された答えをありがとう!
user123361

@dbうまくいったことを嬉しく思います!(ところで、編集について謝罪する必要はありません。編集は非常に優れており、編集の結果としてあなたの質問が他の人にも役立つでしょう。)他の質問に関しては、私は私の答えを編集しました最後に分析セクションを含めます。
エリアケイガン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.