パスワードを入力せずに「su」でログイン

パスワードを入力せずに「su」でログイン

su端末で1行のコマンドを使用してログインする方法は?私はこのsudoコマンドがこれを行うことができることを知っています:

echo [password] | sudo -S [command]

suしかし、コマンドでヒントを与えようとすると、次のようになります。

echo [password] | su [username]

エラーが発生します。

standard in must be tty

アカウントへのアクセス権がないため、ファイルsudoにアクセスまたは編集できませんsudoers

デフォルトでは、正しい構文は次のとおりです。

su [username]

私がしたいのは、su毎回パスワードを入力せずにエイリアスにコマンドを追加することです。

答え1

6年2ヶ月前質問

どうやってできるかログイン端末に1行のコマンドがありますか?

これは使用するためのものです。Sudo毎回パスワードの入力を求めないでください。

/etc/sudoersファイル経由 visudo または編集sudo visudo

少なくともRHEL / CentOS 7では、ファイルの下部に/etc/sudoersCOMMANDSセクションが表示されます。具体的には:

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL

## Same thing without a password
# %wheel    ALL=(ALL)   NOPASSWD: ALL

デフォルトでは... RHEL / CentOSの場合、他のLinuxディストリビューションでこれをどのように使用するかはわかりません...最初の項目をコメントアウトし、構文が機能するように行を作成し#ますNOPASSWD: ALL。または、次の構文を入力してください。

つまり%wheel、このアカウントはホイールで定義されたグループです/etc/group。行を追加し、%users次のすべてのアカウントを許可するように作成できます。ユーザー以下を使用する場合は、このパスワードのない機能をグループ化してください。ユーザーこのようにグループ化されます(gid 100)。

~のためどうやってできるかあなた、%wheel文法と%手段ホイールグループです。特定のユーザーアカウントを指定するには、%グループ名を削除してそのユーザーアカウントに置き換えます。たとえば、

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

ユーザーアカウント名が次の場合にのみこれを実行してください。abc123

abc123  ALL=(ALL)   NOPASSWD: ALL

そのユーザーアカウントがホイールグループの一部であり、このステートメントの上で有効な場合は、このステートメントを上書きまたは元に戻さないようにファイルの一番下に置くことをお勧めします。ユーザーファイルの上部にある説明です。

使用時にパスワードプロンプトをキャンセルする方法がわかりません。上記と同じ方法ですが、

あなたができることは、sudo su <username>パスワードを求めるメッセージを表示せずにsudo suパスワードなしでrootアカウントを実行して実行することです。

私が説明したのは、優れたセキュリティを維持しながらパスワードプロンプトのない機能を取得する方法を知っている最良の方法です。/etc/sudoersここでは、この文書はセキュリティに焦点を当てています。

ファイル権限は、権限440を持つ所有者とグループの両方に適用する必要/etc/sudoersがあります。root-r--r-----

メモ:を使用すると、abc123 ALL=(ALL) NOPASSWD: ALLユーザーアカウントは操作を実行し、sudo surootアカウントのパスワードを求めるプロンプトを表示せずにrootアカウントに切り替えることができます。

答え2

正解は次のとおりです。
これは危険です!そうしないでください!それはあなたのセキュリティを完全に破壊します!

しかし...
セキュリティに興味がない場合は、次のようにすることができます。

  • main.c次の内容でファイルを作成します。
#include <stdlib.h>
#include <unistd.h>

int main() {
  setuid(0);
  system("/bin/bash"); //you can replace bash by another shell if wanted
  return 0;
}
  • このコードをコンパイルしてsuidシェルに変換します。
gcc main.c -o mysuidshell
sudo chown root mysuidshell && sudo chmod u+s mysuidshell

これで、LXGAの回答に関するコメントで述べたエイリアスを作成できます。

alias switch="/path/to/mysuidshell"

これはセキュリティの面ではまだひどい考えですが、パスワードがプレーンテキストで表示されないという非常にわずかな利点もあります。

実行したい操作によっては、root以外のユーザーに変更され、他のシェルを実行するようにコードを変更できます。

ただし、基本的にセキュリティが低い状態でホイール(suおよびsudo)を再発明することになります。

答え3

これがExpectが設計された理由です。もともとはTcl / Tk用に書かれていましたが、うまく使用できません。事実その言語が使用されるため、Pythonのバージョンは次のようになります。

#!/usr/bin/python3
import os,sys,pexpect

child = pexpect.spawn("sudo head /etc/shadow")

# Give it a list of expected responses (only one here)    
Result = child.expect([" password for"])

# Did we find the zeroth answer in our list?
if Result==0:
    # Yes, then send the password
    child.sendline('<your password>')
    # Output its response
    print(child.read())
else:
    print("Didn't get expected response")

目的に合わせて編集する必要があります。これが始まるのに十分であることを願っています。

答え4

簡単に言うと:

ルートとして、

  1. で、/etc/pam.d/su他の行の前に次の行を追加します。auth sufficient pam_wheel.so trust
  2. 実装するgetent group wheel || groupadd wheel
  3. 実行usermod -aG wheel joeuser(名前がユーザーの場合joeuser

より長い説明

wheelUnixシステムでは、グループを使用してユーザーに管理者/ルート権限を付与するのが一般的です。ただし、権限エスカレーションはデフォルトで有効になっていません。最新のLinuxシステム(少なくとも15年、おそらくそれ以前)では、PAMに1行を追加するだけです。 構成ファイル/etc/pam.d/- 具体的にはsuファイルです。この行は、「ユーザーがホイールグループにいる場合は認証に十分です」と言います。

もちろん、実際にはホイールグループを配置する必要があるので、グループが存在しない場合は、グループの指示を作成し(通常はLinuxディストリビューションはインストール時に作成しないため、通常はそうです)追加します。

それはすべてです。 Joeユーザーはsuパスワードを入力せずに実行できるようになりました。

メモ:

グループを生成するコマンドについて。

関連情報