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 계정의 패스워드를 묻게 됩니다.
로그인 시 특정 명령어를 지속적으로 실행해야 할 때 패스워드를 매 순간 마다 입력하는 것이 번거로워질 수 있습니다.
따라서 전체 또는 특정 명령어를 입력할 때 이러한 패스워드를 입력하는 과정을 생략하도록 하겠습니다.
주의: 아래 방법들을 사용하면 보안상 안전하지 않을 수 있으므로 필요한 경우에만 최소한으로 사용해주세요.
첫 번째 방법은 패스워드를 미리 입력하는 것입니다. 사용법은 다음과 같습니다.
$ 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
이렇게 원하는 명령어를 작성한 후 저장하고 편집기에서 빠져나오면 다른 유저가 다시 로그인 하는 시점에 규칙이 적용됩니다.
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…