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
이렇게 원하는 명령어를 작성한 후 저장하고 편집기에서 빠져나오면 다른 유저가 다시 로그인 하는 시점에 규칙이 적용됩니다.
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…
언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…
애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…