비밀번호를 입력하지 않고 "su"를 사용하여 로그인

비밀번호를 입력하지 않고 "su"를 사용하여 로그인

su터미널에서 한 줄의 명령을 사용하여 로그인하는 방법은 무엇입니까? 나는 이 sudo명령이 이것을 할 수 있다는 것을 알고 있습니다:

echo [password] | sudo -S [command]

su하지만 명령에서 힌트를 주려고 하면 다음과 같습니다 .

echo [password] | su [username]

오류가 발생합니다.

standard in must be tty

계정 에 대한 액세스 권한이 없으므로 파일 sudo에 액세스하거나 편집할 수 없습니다 sudoers.

기본적으로 올바른 구문은 다음과 같습니다.

su [username]

제가 하고 싶은 것은 su매번 비밀번호를 입력하지 않고 별칭에 명령을 추가하는 것 입니다.

답변1

6년 2개월 전 질문

내가 어떻게 할 수있는로그인터미널에 한 줄의 명령이 있습니까?

이는 사용하기 위한 것입니다.스도매번 비밀번호를 묻는 메시지를 표시하지 마세요.

/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비밀번호 없이 루트 계정을 실행하고 실행하는 것입니다.

내가 설명한 것은 우수한 보안을 유지하면서 암호 프롬프트 없는 기능을 얻는 방법에 대해 내가 아는 가장 좋은 방법입니다. /etc/sudoers여기서는 이 문서가 보안에 중점을 둡니다.

파일 권한은 권한 440이 있는 소유자와 그룹 모두에 적용 /etc/sudoers되어야 합니다 .root-r--r-----

노트:을 사용하면 abc123 ALL=(ALL) NOPASSWD: ALL사용자 계정이 작업을 수행 sudo su하고 루트 계정의 비밀번호를 묻는 메시지가 표시되지 않고 루트 계정으로 전환할 수 있습니다.

답변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".

이는 보안 측면에서 여전히 끔찍한 생각이지만 비밀번호가 일반 텍스트로 표시되지 않는다는 극히 약간의 이점도 있습니다.

수행하려는 작업에 따라 루트가 아닌 다른 사용자로 변경되고, 다른 쉘을 실행하도록 코드를 변경할 수 있습니다.

그러나 기본적으로 보안이 덜한 상태에서 바퀴( susudo)를 재발명하게 됩니다.

답변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에 한 줄을 추가하면 됩니다. 구성 파일다음 /etc/pam.d/- 구체적으로 su파일입니다. 이 줄은 "사용자가 휠 그룹에 있으면 인증에 충분합니다"라고 말합니다.

물론 실제로 휠 그룹을 넣어야 하므로 그룹이 존재하지 않으면 그룹의 지침을 생성한 다음(일반적으로 Linux 배포판은 설치 시 생성하지 않기 때문에 일반적으로 그렇습니다) 추가합니다.

그게 다야. Joe 사용자는 su이제 비밀번호를 제공하지 않고도 실행할 수 있습니다.

노트:

그룹을 생성하는 명령에 대해.

관련 정보