암호없이 sudo 명령을 실행하는 방법은 무엇입니까?


235

어떻게 않습니다 ubuntu우분투 서버 12.04에 대한 AWS 이미지에 사용자가 암호없이이 sudo그것에 대한 구성에 없을 때 모든 명령에 대한을 /etc/sudoers?

Amazon에서 Ubuntu 서버 12.04를 사용하고 있습니다. 기본 우분투 사용자와 동일한 동작을하는 새 사용자를 추가하고 싶습니다. 특히이 sudo새로운 사용자에게는 암호가 필요하지 않습니다.

그래서 새로운 사용자를 추가하고 /etc/sudoers(물론 visudo를 사용하여) 편집했습니다 . 해당 파일을 읽음으로써 기본 ubuntu사용자는 그룹 sudo의 구성원이 암호가없는 것처럼 보였습니다 admin. 새 사용자를 추가했습니다. 작동하지 않았습니다. 그런 다음에 NOPASSWD지시문을 추가하려고 했습니다 sudoers. 어느 것도 작동하지 않았습니다.

어쨌든 지금은 궁금합니다. 어떻게 않습니다 ubuntu그들이에 정의되지 않은 경우 사용자가 암호없이 권한을 얻을 /etc/sudoers. 이것을 허용하는 메커니즘은 무엇입니까?


답변:


332

좋아, 나는 답을 찾았으므로 완전성을 위해 여기에 넣을 수도 있습니다. 마지막에 /etc/sudoers나는 단지 의견이라고 생각한 것이 있습니다.

#includedir /etc/sudoers.d

그러나 여기에는 실제로 해당 디렉토리의 내용이 포함됩니다. 그 안에 파일이 /etc/sudoers.d/90-cloudimg-ubuntu있습니다. 예상되는 내용이있는

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

이것이 기본 우분투 사용자의 sudo 구성이있는 곳입니다.

visudo를 사용하여이 파일을 편집해야합니다. 다음 명령을 사용하면 visudo로 올바른 파일을 편집 할 수 있습니다.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

그리고 다음과 같은 줄을 추가하십시오 :

aychedee ALL=(ALL) NOPASSWD:ALL

결국.


4
완전히 재부팅해야한다고 확신합니다.
aychedee

2
새로운 sudo 규칙은 새로 로그인 한 모든 사용자에게 사용되므로 최소한 다시 로그인해야합니다
bluszcz

32
'sudo service sudo restart'작동 :)
Laice

4
이후 버전 (예 : 14.04)에서는 포함 된 파일이 /etc/sudoers.d/90-cloud-init-users편집 sudo visudo -f /etc/sudoers.d/90-cloud-init-users됩니다. 생성 된 파일을 편집하는 것보다 추가 파일을 작성하는 것이 더 깨끗하지만 파일이를 포함합니다 .또는 종료 ~수 없습니다 포함.
Molomby

2
@ Phil_1984_ 대부분의 경우, 포함을 허용하지 않지만 이상한 주석으로 넘어지지 않는 다른 (표준?) 버전의 sudo와 호환되도록 주석으로 추가되었습니다. (표준은 어렵다! ;-)
jpaugh

94

여러 서버에서이 동작을 쉽게 복제하기 위해 가장 간단한 방법은 다음과 같습니다.

sudo visudo

이 줄을 바꾸십시오 :

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) ALL

이 줄에 :

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

그리고이 줄 아래 로 이동하십시오 :

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

이제 이것을 가지고 있어야합니다 :

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

그런 다음 암호로 sudo 액세스가 필요한 모든 사용자에 대해 :

sudo adduser <user> sudo

암호없이 sudo 액세스가 필요한 모든 사용자에 대해 :

sudo adduser <user> admin

마지막으로 다음을 실행하십시오.

sudo service sudo restart

그리고 그게 다야!

편집 : 기본적으로 존재하지 않는다고 생각되면 관리자 그룹을 추가해야 할 수도 있습니다.

sudo groupadd admin

이 명령을 통해 기본 AWS ubuntu사용자를 admin그룹에 추가 할 수도 있습니다 .

sudo usermod ubuntu -g admin

참고 : @hata에서 언급했듯이 사용 adm중인 Ubuntu 버전에 따라 관리자 그룹 이름 으로 사용해야 할 수 있습니다 .


3
자체 참고 사항 : 덜 제한적인 권한을 스택에서 아래로 이동하는 것이 관례입니다. 그러나 그렇게하지 않으면 기능에는 영향을 미치지 않습니다.
poweratom

2
jiminikiz가 설명했듯이 Ubuntu GNOME 16.04 LTS 에서 % sudo 뒤에 % admin 을 배치해야했습니다 . 또한 관리자 그룹 ID는 정확히 관리자가 아니라 내 우분투에서 adm 입니다. 재부팅이 필요하지 않았습니다.
hata

5

/etc/sudoers.d/ 디렉토리에 내 파일을 만들려고합니다. 업데이트시 Amazon Cloud에서 생성 한 파일을 덮어 쓸 수 있습니다. /etc/sudoers.d에 파일을 만든 후이 항목을 추가하십시오.

<your user name> ALL=(ALL) NOPASSWD:ALL

시스템을 재부팅하면 작동합니다.


2

편집기를 사용하지 않고 짧은 답변 (bash에서 테스트하여 원격 호스트에서 실행하는 것이 매우 위험합니다).

현재 사용자의 비밀번호없이 작동하도록 sudo를 구성하십시오.

echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

다음을 사용하여 편집 내용을 확인하십시오.

sudo visudo -c

비밀번호없이 sudo를 사용할 수 있는지 확인하십시오.

sudo cat /etc/sudoers | grep "$USER"

... 또는 간단히 시도해보십시오.

sudo <anything>

21
이것은 매우 위험한 조언입니다 ...이 잘못 복사하여 붙여 넣으면 자신의 서버에서 벗어날 수 있습니다. 따라서 visudo를 사용하는 것이 좋습니다. 디스크에 저장하기 전에 구문이 올바른지 확인합니다. 따라서 이것을 사용하려는 사람이라면 누구나 가능합니다. 관심있는 원격 서버에서는 수행하지 마십시오. 답변에 경고를 포함시킬 수 있습니다.
aychedee

8
visudo를 사용하지 않는 것은 끔찍한 생각입니다. 날 믿어
trognanders

1
복사 붙여 넣기 IMHO는 수동 편집보다 안전합니다. 약간의 단순화 :echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
theartofrain

4
@theartofrain-일반적으로 동의하지만 visudosudoers 파일을 분리하지 못하게하여 컴퓨터에서 (또는 적어도 sudo) 잠그지 않는 것이 특히 좋습니다.
Jon V

3
@JonV sudoers 파일의 문법에 따라 잘 구성된 변경 사항 만 저장 visudo하기 때문에 실수로 관리자 권한을 잃을 수도 있습니다 . 대부분의 실수는 구문 상 틀리므로에 해를 끼치 지 않습니다 . 경우 또는 파일 입니다 잘못 형성은 하지 사용하는 이유 인 보안 조치와 같은 사람에 대한 권한을 상승 거부 위험합니다. ( 때로는 재부팅하지 않아도 문제를 해결할 수 있습니다 .)visudovisudo/etc/sudoers/etc/sudoers.d sudovisudopkexec
Eliah Kagan

0

CICD 파이프 라인에서 사용하기 위해 임시 Docker 이미지에서 루트가 아닌 암호가없는 사용자를 구현 한 방법입니다.

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.