활용하기

리눅스 sudo 명령어 패스워드 입력 과정 생략하기

sudo 명령어는 현재 로그인 된 사용자가 루트 권한(root)을 획득하여 슈퍼유저 권한이 필요한 특정 동작을 처리할 수 있도록 해줍니다.

물론 sudo 명령어를 어느 사용자이던지 사용할 수 있는 것은 아닙니다. 보통 sudoers 파일(/etc/sudoers)에 등록된 설정에 따라 sudo 명령을 사용하여 권한을 취득할 수 있는 계정을 지정합니다.

/etc/sudoers 파일에는 다음과 같이 지정되어 있을 것입니다.

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##  user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere 
root    ALL=(ALL)   ALL
lee    ALL=(ALL)   ALL

lee 라는 계정은 sudo 명령어를 사용하도록 허용하여 root 권한을 빌릴 수 있도록 설정되어 있습니다. 만약 이 부분에 현재 계정에 대한 내용이 없을 경우 sudo 명령어를 사용할 수 없게 됩니다.

이제 lee 계정으로 sudo 명령어를 사용해보겠습니다.

[lee@myServer ~]$ sudo /root/adminscript.sh
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for lee:

이 때 일반적인 경우 lee 계정의 패스워드를 묻게 됩니다.

리눅스 sudo 패스워드 입력 건너뛰기

로그인 시 특정 명령어를 지속적으로 실행해야 할 때 패스워드를 매 순간 마다 입력하는 것이 번거로워질 수 있습니다.

따라서 전체 또는 특정 명령어를 입력할 때 이러한 패스워드를 입력하는 과정을 생략하도록 하겠습니다.

주의: 아래 방법들을 사용하면 보안상 안전하지 않을 수 있으므로 필요한 경우에만 최소한으로 사용해주세요.

첫 번째 방법 패스워드를 미리 입력하는 것입니다. 사용법은 다음과 같습니다.

$ echo '[Password]' | sudo -kS [Command]

간단히 sudo 명령어에 k (reset-timestamp) 그리고 대문자 S (stdin) 옵션을 붙입니다. 표준 입력을 사용하여 암호를 입력받게 됩니다. k 옵션은 일정 시간 동안 암호를 입력하지 않아도 되는 상태를 초기화하여 예기치 못한 입력 문제를 방지합니다.

만약 adminscript 스크립트 파일을 lee 유저(패스워드 p@ssw0rd)가 사용할 경우 다음과 같이 입력합니다.

$ echo 'p@ssw0rd' | sudo -kS /root/scripts/adminscript.sh

그러나 이 방법은 명령어 히스토리(hitsory)에 패스워드가 그대로 남아버리기 때문에 보안 상 권장되지 않습니다.

두 번째 방법패스워드 프롬프트가 나타나지 않도록 설정하여 암호 입력을 무시하는 방법입니다. 이 과정은 root 계정으로 전환한 후에 진행합니다.

여기서는 앞서말했던 /etc/sudoers 파일을 수정해야 합니다. 직접 수정하는 것도 좋지만 안전을 위해 visudo 명령어를 실행하여 sudoers 파일 편집기를 실행합니다.

[root@myServer ~]# visudo

파일의 하단에 다음과 같이 내용을 추가합니다.

lee  ALL=(ALL) NOPASSWD:/root/script/adminscript.sh

sudoers의 문법은 보통 다음과 같이 사용됩니다.

[계정명] [허용되는 장치]=([전환 가능한 계정]) [옵션-규칙]:[명령어1], [명령어2]…

간단히 말하자면 lee 계정은 모든 장치에서 모든 계정의 권한을 취득할 수 있으며 다음 명령어(/root/script/adminscript.sh)를 실행할 때에는 패스워드를 묻지 않도록 합니다.

만약 특정 사용자의 권한에 대해서만 허용할 경우에는 괄호 안에 유저명을 입력해야 합니다. 괄호가 존재하지 않거나 (ALL)인 경우 모든 유저의 권한을 취득할 수 있도록 합니다.

lee  ALL=(user1, user2, user3) NOPASSWD:/root/script/adminscript.sh

패스워드를 묻지 않을 명령어를 모두 지정하려면 명령어 대신 ALL을 붙입니다.

lee  ALL=(ALL) NOPASSWD:ALL

만약 여러 명령어를 지정하고 싶은 경우에는 콤마(,)로 구분지어 작성합니다.

lee  ALL=NOPASSWD:/root/script/adminscript.sh, passwd, yum update

이렇게 원하는 명령어를 작성한 후 저장하고 편집기에서 빠져나오면 다른 유저가 다시 로그인 하는 시점에 규칙이 적용됩니다.

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

1개월 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

7개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

9개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

9개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

9개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

9개월 ago