비밀번호없이 sudo를 실행 하시겠습니까?


292

질문에서 영감을 얻은 ....

저는 12.04로 시스템을 사용하는 유일한 사람입니다.
내가 sudo명령을 내릴 때마다 ; 시스템은 사용자 암호를 요구합니다 (자체적으로 좋습니다).
그러나 나는 생각하고 있었다. 루트 계정 을 활성화하지 않고 ; 인증하기 위해 사용자 비밀번호를 요구하지 않는 sudo 명령을 어떻게 실행할 수 있습니까?

참고 : 암호를 통해 인증하지 않고 sudo 명령을 실행하고 싶습니다. 터미널을 통해 실행될 때만.
'Ubuntu 소프트웨어 센터'를 사용하거나 something.sh 파일을 터미널에 끌어서 bash 스크립트를 실행하는 동안 다른 기능 에서이 추가 보안 계층을 제거하고 싶지 않습니다.


2
그래서 당신은 터미널의 암호와 다른 것들이 아닌 다른 방법으로 만 물어보고 싶습니까?! 두 가지 방법으로, 보안 위반이 높다고 생각합니다
Dr_Bunsen

터미널에있을 때만 시스템이 암호를 요구하지 않기를 바랍니다 ... 다른 목적으로 시스템은 암호를 요구해야합니다. 이 요구 사항은 일시적 일 뿐이며 새 서버를 설치하는 동안 구성하는 데 사용됩니다. 새 서버 설치 중에는 sudo 명령으로 구성하는 데 몇 시간이 걸립니다. 15 분마다 암호를 발급합니다. 두통입니다. 루트 계정을 사용하고 싶지 않습니다.
Bhavesh Diwan 2016


1
시간 초과를 연장 할 수 있습니다. 또한 새로운 서버 설정을 자주 수행하는 경우 프로세스 자동화에 대해 고려해야합니다. 당신은 문제를 해결하고 쉬는 데 돈을 지불하지 않습니다.
MauganRa

답변:


82

sudo -i 시스템 (또는 다른 시스템)에서 수정하는 동안 10 분마다 암호를 입력하지 않고 시스템 파일을 수정하지 않으려는 경우 갈 수 있습니다.

sudo콘솔을 닫거나 exit사용자를 다시 입력 하면 사용자 암호를 사용하여 루트로 전환됩니다 .


2
비밀번호를 한 번만 입력하고 종료 할 때까지 비밀번호를 입력한다는 사실이 사실입니까? 날씨 5 시간 또는 15 .... sudo 명령이 실행될 때 시스템이 비밀번호로 인증을 요청하지 않습니다.
Bhavesh Diwan 2016 년

2
입력 exit하거나 터미널 에뮬레이터 창을 닫을 때 까지 @ Z9iT .
Bruno Pereira

2
감사합니다 .. 종료되지 않을 때까지 n 시간 동안 암호 인증없이 sudo 명령을 실행하는 목적을 서버로 사용하기 때문에이 답변을 받아 들였습니다. 시스템 파일을 수정하지 않는 것이 좋습니다.
Bhavesh Diwan 2016 년

3
그 시점에서 루트가 되려면 여전히 암호를 입력해야하기 때문에 이것은 실제로 질문에 대답하지 않습니다.
Adam F

2
안전한 환경에서 가상 머신을 실행 중이고 바로 무언가를 원하고 비밀번호를 처리하고 싶지 않은 경우에는 아닙니다. 이 답변은 질문에 대한 답변은 아니지만 유용한 정보입니다. 나는 Adam F
Jonathan Komar에

573

sudo비밀번호를 묻지 않도록 구성 할 수 있습니다 .

터미널 창을 열고 다음을 입력하십시오.

sudo visudo

파일 맨 아래에 다음 줄을 추가하십시오.

$USER ALL=(ALL) NOPASSWD: ALL

$USER시스템에서 사용자 이름이 어디에 있습니까 ? sudoers 파일을 저장하고 닫습니다 (기본 터미널 편집기를 변경하지 않은 경우 (있는 경우 알 수 있음), ctl + x를 눌러 종료 nano하면 저장하라는 메시지가 표시됨).

우분투 19.04부터 파일은 이제 다음과 같아야합니다

#
# 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:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

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

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

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

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

#includedir /etc/sudoers.d

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

그런 다음 sudo <whatever you want>비밀번호를 묻지 않고 터미널 창에 입력 할 수 있습니다 .

이것은 sudo터미널 에서 명령 을 사용할 때만 적용됩니다 . 소프트웨어 센터에서 패키지를 설치하려고하면 비밀번호를 입력하라는 메시지가 계속 표시됩니다.

GUI 비밀번호 프롬프트


15
sudo visudo직접 편집 하는 대신 사용 하는 것이 좋습니다 . 또한 sudoers의 권한을 변경하면 스스로 잠길 수 있습니다. 로 편집 할 때을 vim사용 :wq!하여 읽기 전용 파일에 쓰고 편집기를 종료하십시오. 이런 방식으로 권한 644가 필요하지 않습니다.
Lekensteyn

8
이는 심각한 보안 위험이므로 sudo 권한이있는 계정을 인수하는 사람은 전체 시스템을 제어하고이 컴퓨터에 대한 추가 액세스를 잠글 수 있으므로 권장하지 않습니다.
Bruno Pereira

6
@ wil93 요점을 잊어 버렸 sudo install crapware습니다.이 경우 호출하는 스크립트 는 암호를 요구하지 않으며 가지고있는 모든 것을 엉망으로 만들 수 있으며 마지막으로 확인했을 때 스크립트를 배포하기 위해 실제로 기계 옆에 있지 않아도됩니다. .. 이것은 단지 예일뿐입니다.
Bruno Pereira

12
@BrunoPereira 신뢰할 수없는 스크립트를 실행하려는 경우, (sudo는 암호를 요구하는 경우에도, 악성 스크립트는 항상 할 수있는 보안 위험이 rm -rf ~매우 몇 가지를 망치는). 전반적으로 나는 sudo에서 비밀번호 프롬프트를 간단히 제거하는 것을“심각한 보안 위험”이라고 부르지 않을 것입니다.
wil93

5
@ wil93에 동의하십시오. 신뢰할 수없는 스크립트를 실행할 때 암호를 입력하는 것만으로 프로세스를 취소 할 수있는 기회는 아니지만 대부분의 사람들에게는 쓸모가 없습니다. 요점은 스크립트의 위치와 동작을 아는 것입니다.
차드

36

루트 sudo 시간 초과는 가장 쉽고 안전한 방법입니다. 나는 모든 예를 제시하지만이 방법이 훨씬 안전하지만이 작업을 수행하는 방법은 매우 위험하다는 경고를받습니다.

sudo visudo

편집기가 열리고 sudoers 파일을 가리 킵니다. 우분투는 기본적으로 nano, 다른 시스템은 Vi를 사용합니다. 이제 시스템에서 가장 중요한 파일 중 하나를 편집하는 수퍼 유저입니다. 스트레스없는!

( (vi!)로 표시된 Vi 관련 지침 . nano를 사용하는 경우 무시하십시오.)

화살표 키를 사용하여 Defaults줄 의 끝으로 이동하십시오 .

(vi!) A (대문자 "a") 키를 눌러 현재 줄의 끝으로 이동하고 편집 모드로 들어갑니다 (줄의 마지막 문자 뒤에 추가).

이제 다음을 입력하십시오.

,timestamp_timeout=X

여기서 X는 시간 초과 만료 (분)입니다. 0을 지정하면 항상 비밀번호를 묻습니다. 음수 값을 지정하면 제한 시간이 만료되지 않습니다. Defaults env_reset,timestamp_timeout=5.

(vi!) Esc 키를 눌러 명령 모드로 돌아갑니다. 편집에 만족하면 입력 :w Enter하여 파일을 작성하고 :q Entervi를 종료하십시오. 실수 한 경우 가장 쉬운 방법은 시작부터 다시 실행하고 저장하지 않고 종료 ( Escape명령 모드로 들어가기 위해 누르는 것) 한 다음 : q!를 입력하는 것입니다. Enter.

히트 Ctrl+는 X, 다음 Y, 다음 Enter파일 종료 나노를 저장합니다.

추가 정보는 sudoers 및 vi 매뉴얼 페이지를 읽으십시오.

man sudoers
man vi

다음을 사용하여 시간 초과 값을 재설정하십시오.

sudo -k

이 지시 사항은 sudo 명령을 사용할 때 비밀번호 프롬프트를 제거하기위한 것입니다. sudo 명령은 여전히 ​​루트 액세스에 사용해야합니다.

sudoers 파일 편집

터미널 창을 엽니 다. 을 입력하십시오 sudo visudo. 파일의 끝에 다음 줄을 추가하십시오 (끝이 없으면 나중에 입력하여 무효화 할 수 있음).

<username> ALL=NOPASSWD: ALL

교체 <username>합니다 (없이 사용자 이름 <>). 이것은 우분투가 사용자 이름과 동일한 이름을 가진 그룹을 생성했다고 가정합니다. 그룹 사용자 나 소속 된 다른 그룹을 번갈아 사용할 수 있습니다. 해당 그룹에 속해 있는지 확인하십시오. 시스템-> 관리-> 사용자 및 그룹으로 이동하여 확인할 수 있습니다.

예:

michael ALL=NOPASSWD: ALL

^ X ( Ctrl+ X)를 입력 하여 종료하십시오. 파일을 저장하는 옵션을 묻는 메시지가 표시되면 Y를 입력하여 저장하십시오.

로그 아웃 한 후 다시 로그인하십시오. 이제 비밀번호를 묻지 않고 sudo 명령을 실행할 수 있습니다.

루트 계정

루트 계정 활성화

루트 계정을 활성화하는 것이 거의 필요하지 않습니다. 우분투 시스템의 관리자로서 수행해야 할 거의 모든 것은 sudo 또는 gksudo를 통해 수행 할 수 있습니다. 지속적인 루트 로그인이 실제로 필요한 경우 가장 좋은 대안은 다음 명령을 사용하여 루트 로그인 쉘을 시뮬레이션하는 것입니다.

sudo -i

그러나 루트 로그인을 활성화 해야하는 경우 다음 과 같이 수행 할 수 있습니다.

sudo passwd root

루트 계정을 다시 비활성화

어떤 이유로 루트 계정을 활성화 한 후 다시 비활성화하려면 터미널에서 다음 명령을 사용하십시오.

sudo passwd -dl root

시스템 전체 그룹 sudo

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

로그 아웃 한 후 다시 로그인하십시오.

sudo 시간 초과 재설정

다음을 실행하여 sudo가 다음에 비밀번호를 요청하도록 할 수 있습니다.

sudo -k

나는 이것을 추가하기 전에 이것을 게시했다. 이것을하기위한 시스템 넓은 방법과 다른 사람들은 여기를 읽는다 :
user209328

이 답변은 늦었지만 답변이 제공하는 옵션 측면에서 가장 포괄적입니다.
jenming

1
흠, Ubuntu 18.04 MATE에서 이것은 완벽하게 작동하지만 Ubuntu 18.04에서 동일하게 수행하면 "사용자 이름이 sudoers 파일에 없습니다 ..."문제로 인해 주름이 생겼습니다. 자, 이것이 너무 많은 pple들이 리눅스를 싫어하는 이유입니다-cuz 그것은 거의 "인과 적"이 아닙니다 : D U가 똑같이 실행되는 경우를 대비하여 ... 문제를 해결하는 방법입니다 : tecmint.com/…
Peter

EDITOR 환경 변수는 예 sudo env EDITOR=/bin/nano visudo를 들어 sudoersnano에서 안정적으로 편집하기 위해 사용되는 편집기를 설정할 수 있습니다 . (갱신 대안뿐만 아니라 편집기를 설정하는 데 사용할 수 있습니다)
게르트 반 덴 베르그

29

개인 (또는 그룹) 권한을 부여하는 기본 방법은 아래에 파일을 추가하는 것입니다. /etc/sudoers.d

이렇게하면 로컬 변경 내용이 기본 정책과 분리되고 배포 sudoers 파일이 변경되는 경우 시간이 절약됩니다.

현재 로그인 한 사용자를 sudoer로 만들고 sudo암호를 묻지 않으려면

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

이렇게하면 /etc/sudoers.d/$USER( $USER이 명령을 실행할 때 로그인 한 사용자의 사용자 이름) 파일이 생성되어 권한이 부여 된 사용자를 명확하게합니다.

$USER다른 사용자를 위해 위의 명령에서 두 인스턴스를 다른 사용자 이름으로 바꾸십시오 .

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

마찬가지로 하나의 파일을 사용하여 여러 지시문을 관리 할 수 ​​있습니다.

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

참조 /etc/sudoers.d/READMEman sudoers더 많은 정보를 얻을 수 있습니다.


내가 루트인데도 echo 명령이 실패했습니다. 그러나 파일을 추가하고 직접 편집했는데 이것은 최신 우분투에서 작동했습니다 (사용자를 sudoers에 직접 추가하는 것은 아닙니다!)
scape

1
올바른 방법은 tee명령 으로 수행하는 것입니다 .
woto

1
이것은 작동하는 더 좋은 방법입니다. sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'다음에sudo chmod 440 /etc/sudoers.d/$(logname)
paradroid

에서 sudo ... >file이 루트 쉘에서만 작동 할 수 있도록 쉘 리디렉션, 원래의 쉘에서 실행됩니다.
콘스탄틴 펠레 펠린

권한 문제없이 티 방법 :echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
카슨 Ip

7

현재 사용자에 대한 sudo 프롬프트를 제거하는 멋진 원 라이너

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'

2
난 그냥 할 수 있다고 생각 : echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudovisudo필요로 sudo하는 모든 (심지어 후 env기본 구성, IIRC 필요하지 않습니다).
muru

여기에 잘못 될 수있는 것이 많이 있습니다 (물론 모든 사용자 오류). 저는 겸손한 의견으로는 sudoer 파일을 직접 편집하고 sudo visudo(편집기가 열려있는 상태에서) 결과를 테스트하는 것이 바람직합니다. 이 "한 줄짜리"를 시도하고 싶은 새로운 사용자를 위해.
마이클

피드백 주셔서 감사합니다! 휘발성 테스트 VM에서 sudo password prompt 제거 스크립트를 신속하게 작성하려고했습니다. 개선을 제안 해
Eric Landry

sudo chmod 440 /etc/sudoers.d/$(logname)해당 디렉토리의 README에 설명 된대로 파일 권한을 수정 해야합니다 .
paradroid

6

물론 원하는 것은 권장하지 않습니다. 잠시 후 들어가는 sudo것이 너무 자동적이되어 유용성이 떨어집니다.

또 다른 방법은 sudoers 파일을 그대로두고, 100여 서버에 복잡한 작업을 수행하는 동안을 입력하는 것 sudo bash입니다. 그러면 종료 할 때까지 루트로 인증되는 쉘이 제공됩니다.


12
sudo -s또는 sudo -i아마보다 모두 더 나은 아이디어이다 sudo bash그들은 환경이 제정신 물건인지 확인하기 때문에.
Darael

2
"정상과 사물"은 일반적으로 "더 나은 아이디어"의 영역에 있지 않습니다. 누군가 sudo -s 또는 sudo -i가 sudo bash보다 나은 이유를 기술적으로 설명 할 수 있습니까? (편집 : 여기에 관련된 질문 askubuntu.com/questions/376199/… )
Nuzzolilo

2
명령이 제대로 실행 되려면 많은 sudo명령 (특히 생각 sudo pip ...)이 필요합니다 sudo -H(HOME 설정). 다른 경우에는 sudo -E(env 유지)가 필요할 수 있습니다. 달리기 sudo bash는 대부분의 경우에 효과가있을 수 있지만, 전부는 아니고 그렇지 않은 경우 이유에 대해 명확하지 않습니다.
마이클

1
sudo su는 역할을 전환하고 시스템 관리자 역할을 시작하는 전통적인 방법입니다.
user1656671

3

에서 슈퍼 사용자 좋은 답변을 제공 :

STDIN에서 비밀번호를 읽는 -S 스위치를 사용하십시오.

echo <password> | sudo -S <command>

<password>비밀번호로 교체하십시오 .


2
비밀번호는 쉘 히스토리 파일에서 명확한 유형으로 유지되므로 권장되지 않습니다. 다른 솔루션을 대신 적용하십시오.
HappyCactus

1
@HappyCactus 당신 echo은 역사에 나타나지 않도록 한 번 앞에 공간을 둘 수 있습니까?
WinEunuuchs2Unix

예. 일반 텍스트 비밀번호를 내역 파일에 노출시키지 않습니다. 그러나 항상 추가해야합니까? :-)
HappyCactus

@HappyCactus 우연히 최고의 공간을 추가하고 역사를 기억할 수 없을 때 화가납니다. 사람들은 우리의 의견을 읽고 위험과 위험 회피 단계를 알게됩니다.
WinEunuuchs2Unix

전적으로 동의합니다. 좋은 하루 보내세요!
HappyCactus

2

짧막 한 농담

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'


2

이것은 다음과 같이 파일 권한을 변경하는 한 줄 솔루션입니다 /etc/sudoer.d/README.

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)

0
  • @upteryx 아이디어로 확장.

  • 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.