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/sudoers
COMMANDSセクションが表示されます。具体的には:
## 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 su
rootアカウントのパスワードを求めるプロンプトを表示せずに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
簡単に言うと:
ルートとして、
- で、
/etc/pam.d/su
他の行の前に次の行を追加します。auth sufficient pam_wheel.so trust
- 実装する
getent group wheel || groupadd wheel
- 実行
usermod -aG wheel joeuser
(名前がユーザーの場合joeuser
)
より長い説明
wheel
Unixシステムでは、グループを使用してユーザーに管理者/ルート権限を付与するのが一般的です。ただし、権限エスカレーションはデフォルトで有効になっていません。最新のLinuxシステム(少なくとも15年、おそらくそれ以前)では、PAMに1行を追加するだけです。 構成ファイル次/etc/pam.d/
- 具体的にはsu
ファイルです。この行は、「ユーザーがホイールグループにいる場合は認証に十分です」と言います。
もちろん、実際にはホイールグループを配置する必要があるので、グループが存在しない場合は、グループの指示を作成し(通常はLinuxディストリビューションはインストール時に作成しないため、通常はそうです)追加します。
それはすべてです。 Joeユーザーはsu
パスワードを入力せずに実行できるようになりました。
メモ:
- これはsudoより古いメカニズムであり、それに依存しません。
- グループの作成に関する質問を確認してください。グループがまだ存在しない場合、グループを生成する短いコマンドはありますか?
グループを生成するコマンドについて。