또이리의 Server Engineer

sudo 권한 부여하기, 리눅스 su su - 차이 본문

Linux Engineer

sudo 권한 부여하기, 리눅스 su su - 차이

또이리 2020. 11. 21. 16:14

sudo 권한 부여하기, 리눅스 su su - 차이

root permission 관리자 권한

일반 유저에게 관리자 권한을 부여하는 방법을 알아보겠습니다. 정확히 말하면 관리자가 허락한 유저에게, 명령어 실행 권한을 부여하는 방법을 알아보겠습니다.

 

관리자란 흔히 루트(root), OS 최상위 관리자, 루트 권한을 가진 자를 말합니다.

현재 test OS는 ubuntu server 18.04.4 LTS입니다. 관리자 권한 부여는 Linux 계열은 대부분 동일한 것으로 알고 있습니다.

 

관리자란?

리눅스 OS에서 명령어를 실행할 때, 관리자 권한이 반드시 필요한 명령어가 있습니다. 그리고 그 권한이 없는 경우에는 명령어가 실행되지 않습니다.

 

리눅스 OS를 설치하게 되면 root라는 최상위 사용자가 생성이 됩니다. 이 root는 모든 권한을 가지고 있는 관리자입니다. 즉, 모든 디렉터리나 파일에 접근할 수 있고, 수정, 생성은 물론 가장 위험한 삭제까지 진행할 수 있습니다.

 

장점이 있으면, 단점이 존재하기 마련입니다. 관리자 권한에서 제일 조심해야 되는 것이 수정과 삭제입니다. 타이핑 실수 하나로 어마어마한 정보를 날려버릴 수 있습니다.

 

돌이킬 수 없는 경우가 종종 발생합니다. 국가기관이나 연구기관은 루트 권한을 가진 자가 실수를 하게 되면, 위험한 상황이 발생하게 됩니다.

 

그래서 관리자는 매우 중요한 역할이며, 최대한 root 로그인은 사용하지 않아야 안전합니다. 그런 이유로 유저를 생성하고 유저에게 sudo 권한을 부여해서 사용하는 것입니다.

 

su와 sudo의 차이점

su의 경우, root에서 사용자 계정으로 전환하고, root 계정의 패스워드를 알고 있어야 합니다.

하지만, sudo의 경우 root 권한으로 단일 명령어를 수행할 뿐 root 계정으로 전환되지 않습니다.

 

그래서 root 계정의 패스워드를 요구하지 않습니다.

이해가 좀 되시나요?

 

su는 Super User라고도 하지만, Switch User라는 말도 맞습니다.

정확한 의미는 Substitute User 대리인, 대체자라는 뜻입니다.

 

사용자를 전환하는 용도입니다.

하지만 sudo는 관리자의 권한으로 단일 명령을 수행하는 것입니다.

우리가 명령어 앞에 sudo를 붙이는 것이 이런 이유에서 입니다.

 

su와 su - 차이점

어차피 설명드리는 거 확실하게 알고 넘어가 보겠습니다.

그럼 su와 su - 의 차이는 무엇일까요.

두 명령어다 user를 스위치 하는 명령어는 맞습니다.

 

su jcil <---유저

현재 환경변수에서 jcil 계정으로 전환됩니다. jcil의 계정 패스워드를 입력해주면, 기존 유저의 환경변수 중 일부와 워킹 디렉터리를 유지합니다.

 

su - jcil <---유저

"-"   "-l"   "--login" 동일한 옵션입니다.

새로운 사용자로 로그인됩니다. jcil 계정의 패스워드를 입력하면, jcil의 환경변수를 사용합니다.

기존의 환경은 사라지고 새로운 유저의 환경변수와 워킹 디렉터리를 사용하게 됩니다.

 

일반 사용자가 명령어를 사용할 경우

아래 코드 블록을 보시면 jcil이라는 유저를 생성해서 jcil 계정으로 이동했습니다.

그전에 저는 root 권한이라 유저를 생성하고 jcil계정으로 전환을 할 수 있습니다.

 

jcil이라는 user 계정으로 apt-get update를 실행해 보았습니다.

permission denied라는 메시지가 출력됩니다.

root@ubuntu:~# adduser jcil
Adding user `jcil' ...
Adding new group `jcil' (1001) ...
Adding new user `jcil' (1001) with group `jcil' ...
The home directory `/home/jcil' already exists.  Not copying from `/etc/skel'.
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for jcil
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]

root@ubuntu:~# su - jcil
jcil@ubuntu:~$ apt-get update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
jcil@ubuntu:~$

퍼미션 디나이, 뭐 승인 거부, 허가 거부 이런 뜻입니다.

서버 엔지니어들은 작업 시, 관리자를 통해 루트 패스워드를 제공받거나 루트 권한을 부여받게 됩니다.

 

하지만 엔지니어들은 시스템 재부팅만 할 수 있다면 루트 패스워드를 바꿀 수 있기 때문에 크게 문제가 되지 않습니다. 단 특수한 경우가 아니면 루트 패스워드 변경은 사용하면 안 됩니다.

 

시스템 관리자의 허가 없이 root passwd를 변경하는 것은 범죄이기 때문입니다.

 

이제 유저 jcil에게 관리자와 같은 명령어를 사용할 수 있도록,

sudo 사용 권한을 부여해 보겠습니다.

 

저는 현재 root 권한입니다. visudo라는 명령어를 사용하시면, /etc/sudoer 파일에 접근할 수 있습니다.

일반 사용자는 sudo visudo, sudo vim /etc/sudoer라는 명령어로 수정하시면 됩니다.

 

어쨌든 관리자가 허가해야만, sudo 권한도 부여할 수 있습니다.

# 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

저는 visudo로 진입했습니다. command 라인에 jcil을 추가해 주려고 합니다.

%jcil   ALL=(ALL:ALL)   ALL을 입력해 주면 되겠습니다.

# 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
%jcil   ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

아래는 권한을 부여하지 않았을 때의 화면 출력입니다.

jcil@ubuntu:~$ sudo apt-get update
[sudo] password for jcil:
jcil is not in the sudoers file.  This incident will be reported.
jcil@ubuntu:~$

권한을 부여한 후 결과를 보겠습니다.

jcil@ubuntu:~$ sudo apt-get update
[sudo] password for jcil:
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Get:3 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1,761 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [1,162 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [1,162 kB]
Err:6 http://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages
  Hash Sum mismatch
  Hashes of expected file:
   - Filesize:1162480 [weak]
   - SHA256:884fe8e7f484136d3199b928f208942763228e8cae8274ec7ac3b1b924cbb2ab
   - SHA1:f0c487161834f3f3099ca768ed365d48c76eb9b5 [weak]
   - MD5Sum:4174cff32e3375437d187d132e40e6d4 [weak]
  Hashes of received file:
   - SHA256:855c113fa6700a68e809e37b7c6826c4796decfdf08444db90afbeacada8cfc0
   - SHA1:0df216c812597da32cbf04ddcd89540b0322e559 [weak]
   - MD5Sum:da6d259b1ca4a0bc6e75c311ad63bdc9 [weak]
   - Filesize:1162480 [weak]
  Last modification reported: Sat, 21 Nov 2020 00:24:56 +0000
  Release file created at: Sat, 21 Nov 2020 04:51:14 +0000
Get:8 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1,692 kB]
Err:8 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages

Get:9 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages [1,547 kB]
Err:9 http://us.archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages

Fetched 4,654 kB in 6s (810 kB/s)
Reading package lists... Done

jcil@ubuntu:~$

sudo와 명령어를 입력 후 현재 사용자의 패스워드를 입력하면, root와 같은 권한으로 명령어가 실행되는 것을 알 수 있습니다. 이런 방법을 통하여 관리자 권한을 얻은 후 명령어를 실행해 보았습니다.

 

서론과 개념 정리는 좀 길었지만, 실제로 sudo 권한 부여는 간단합니다.

vim /etc/sudoer

Comments