sudo 설치
CentOS 는 sudo 가 기본적으로 내장되어 있지만, 데비안은 그렇지 않기 때문에 sudo 를 별도로 설치해야 한다.
sudo 란?

출처: xkcd
리눅스 운영체제에서 최고 관리자 권한으로 실행하는 프로그램이다.
sudo 는 super user do(최고 권한 실행) 또는 substitute user do(다른 사용자의 권한으로 실행)의 줄임말로 쓰인다.
각종 명령어 맨 앞에 sudo 를 붙이면 그 명령어는 root 권한, 즉 최고 관리자 권한으로 실행된다.
sudo 명령어는 /etc/sudoer 설정 파일에 명시된 사용자만 사용 가능하다. 이를 수정하기 위해서는 visudo 명령어를 사용해야 한다.
- visudo: vim 과 비슷한 텍스트 편집기지만,- /etc/sudoer파일의 문법 오류를 미리 발견하는 기능이 있다. 이를 통해 프로그램이 오작동하지 않도록 방지한다.
설치 과정
- su -l명령어를 입력해서 root 계정으로 이동한다. - 1 2 - # 문법 su [options] [-] [user [argument...]] - su는- substitute user의 약자이다.
- 현재 접속한 사용자를 로그아웃 하지 않고, 다른 사용자의 권한을 획득할 때 사용한다.
- -l옵션은- --login옵션과 동일하다.
- user항목에 빈 칸으로 두면- root계정의 권한을 획득한다.
- 만약, 다른 유저의 권한을 획득하고 싶다면 su -l userID를 입력하면 된다.
 
- dpkg -l sudo를 입력해서- sudo가 설치되었는지 확인 - dpkg는 데비안 패키지 관리하는 프로그램이다.- .deb패키지의 설치, 삭제, 정보 제공을 위해 사용한다.
 
- 설치되어 있지 않으면 - apt install sudo를 입력한다. - apt는 advanced packaging tool 의 약자로 데비안 계열에서 소프트웨어를 설치하고 제거하는 작업을 관리한다.
- apt는 기능별로- apt,- apt-get,- apt-cache,- apt-key등으로 명령어가 나누어져 있다.
- apt와- apt-get은 기능상으로 큰 차이는 없다.
- 참고로 aptitude는apt의 기능들을 포괄적으로 포함하는 상위 레벨 패키지 매니저이다. 주요 패키지 작업 과정을 자동화해서 쉽게 작업을 진행할 수 있다. 즉, 사용자 입장에서는apt보다aptitude를 조금 더 쉽게 사용할 수 있다. 기능적으로 큰 차이는 없지만, 편리함에 있어선aptitude가 우수하다.
 
sudoer 설정
sudo 사용 시 비밀번호 정책이나 로그 기록 여부 등을 설정하는 방법은 다음과 같다.
- visudo를 입력하면 아래와 같이 sudoers 파일을 수정하는 텍스트 편집기로 진입한다. 
- secure_path를 아래와 같이 수정한다. - 1 - /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin - sudo 는 권한이 강력하기 때문에 보안상의 이유로 secure_path기능을 제공하고 있다.
- secure_path는 sudo 명령을 실행할 때 사용하는 가상 쉘의 경로를 설정하는 것이다.
- sudo 명령을 실행할 때 현재 계정의 쉘이 아닌 새로운 쉘을 생성하고 그 안에서 명령을 실행하는데, 이때 명령을 찾을 경로를 나열한 환경변수인 PATH 값이 secure_path가 된다.
- 즉, sudo 명령을 통해 실행하는 명령은 제 3의 쉘 환경에서 샌드박스 형태로 실행된다.
- 이 기능이 중요한 이유는 트로이목마 해킹 공격에 대한 1차적인 방어 기능을 제공하기 때문이다. 만약, 현재 계정의 PATH 에 악의적인 경로가 포함된 경우, secure_path를 설정하면 이를 무시함으로써 sudo 를 통해 전체 시스템이 해킹되는 경우를 방지할 수 있다.
 
- sudo 는 권한이 강력하기 때문에 보안상의 이유로 
- Defaults항목들을 다음과 같이 추가한다. - 1 2 3 4 5 6 7 - Defaults authfail_message="%d incorrect password attempts" Defaults badpass_message="Incorrect password" Defaults log_input Defaults log_output Defaults requiretty Defaults iolog_dir="/var/log/sudo/" Defaults passwd_tries=3 - authfail_message: 인증에 실패하면 표시하는 메세지.- %d를 입력하면 로그인 실패한 횟수도 같이 표시할 수 있다.
- badpass_message: 잘못된 비밀번호를 입력할 경우 표시할 메세지.
- log_input: sudo 를 이용해서 입력한 명령어를 로그 파일로 저장한다.
- log_output: sudo 를 이용해서 실행한 명령어의 실행 결과를 로그 파일로 저장한다.
- requiretty: 사용자가 실제 tty 로 로그인한 경우에만 sudo 를 실행하는 설정이다. 예컨대, batch 파일이나 cron 에 작성된 스크립트를 실행하는 경우에는 작동하지 않는 것이다. (참고자료 : tty란?)
- iolog_dir: log 가 기록될 위치를 설정한다.
- passwd_tries: 비밀번호 입력 시도 최대 회수를 설정한다.
 
- control + x→- Y→- /etc/sudoers를 입력하여 파일을 저장한다. 
- exit명령어를 입력해서 root 계정을 로그아웃한다. 정상적으로 설정되었는지 확인하기 위해 sudo 를 이용한 임의의 명령어를 입력하고 비밀번호를 틀리게 입력하면 다음과 같이- /etc/sudoer파일에 설정한 대로 출력된다. 
- 사용자에게 sudo 사용 권한을 주기 위해 다시 root 계정으로 로그인해서 - visudo를 실행시켜서 다음의 항목을 추가한다.- 1 - [사용자명] ALL=(ALL:ALL) ALL  
sudo 그룹 설정
- groupadd명령어를 사용해서 그룹을 추가한다.- 1 - groupadd user42  
- 사용자를 그룹에 추가하기 위해 - usermod명령어를 사용한다.- 1 2 - # 유저를 그룹에 추가 usermod -aG [그룹명[, ...]] [사용자명] - usermod는 root 계정만 사용 가능하며, 존재하는 사용자에 대해서만 처리할 수 있다.
- 그룹을 여러 개 추가하고자 할 때는 콤마(,)로 구분한다.
- -a옵션은- -G옵션과 함께 사용한다.
 - 1 - usermod -aG user42,sudo joonhan - id 사용자명명령어를 입력하면 해당 사용자가 속한 그룹을 표시해준다. sudo 와 user42 그룹에 정상적으로 속한 것을 확인할 수 있다.
 
참고자료
- sudo [나무위키]
- [Ubuntu] dpkg 명령어 사용법 [티스토리]
- APT [위키백과]
- 리눅스(우분투 위주) 시스템 강좌 2장. -패키지 및 패키지 툴 [tpholic]
- [Linux] Sudo 명령의 Secure Path [tuwlab]
- Sudoer Manual [sudo]
- Why is “requiretty” not working? [stack exchange]
- [리눅스/유닉스] 사용자관리 usermod 명령어, 사용자 아이디 변경, 임시 계정 발급, usermod 옵션, 사용 예시 [티스토리]
- 우분투 리눅스 - sudo 명령어에서 root 권한이 없을 때 ( … is not in the sudoers file. This incident will be reported.) [티스토리]
 
 









