본문 바로가기
서버/Linux

[Linux] sudo (Substitute User DO)

by 느링 2017. 10. 11.

sudo (Substitute User DO)

su 명령을 이용하여 root계정으로 들어가면 모든 권한을 가지게 되어 보안상 매우 위험합니다.

그래서 특정 작업만 수행할 수 있는 권한을 주는 것이 가능한데, sudo 명령으로 이와 같은 제한적인 권한 부여가 가능합니다.

 

- Substitute user do ( 다른 사용자의 권한으로 명령을 이행하라 )

- 특정 계정에게 명령어 사용 권한을 부여하기 위해 사용되는 파일

- Alias 형태로 명령어를 묶어 설정할 수 있다.

- 명령어를 입력할 때 절대 경로를 입력하여 명령어를 설정

☞ root 계정이 아닌 다른 계정에서는 사용할 수 없는 명령어들이 있는데 그런 명령어들을 sudo를 이용하여 사용할 수 있게 해준다.

 

※  설정 방법 ※

# vi /etc/sudoers : vi를 이용하여 /etc/sudoers 파일 수정 (vim도 가능)

# visudo : 1. 명령어 visudo를 이용하여 /etc/sudoers 파일 수정

        2. 문법에 맞지 않는 설정을 할 경우 확인해준다.

      ※ visudo는 vim으로는 수정할 수 없다.

 

→ 형식 [계정명][호스트 명]=[옵션][명령어1], [명령어2]....[명령어N]

root 계정은 모든 서버에서 모든 명령어를 사용할 수 있습니다.

 

<예제 1>

sudo_test 계정에 sudo를 이용하여 명령어 등록하기

#useradd sudo_test

#passwd sudo_test

 

먼저 sudo_test계정 생성 후 비밀번호를 설정해줍니다.

 

 

경로를 찾는 명령어 which를 이용하여 사용하고 싶은 명령어 경로를 탐색해줍니다.

useradd, usermod, userdel

 

 

# visudo로 들어가서

sudo_test계정에 명령어를 등록해줍니다.

- sudo_test계정은 Server-A라는 호스트 네임을 가진 서버에서

명령어 useradd, usermod, userdel을 사용할 수 있는 권한이 있습니다.

 

→ 테스트 해보기

 

 

sudo_test계정으로 전환하여 useradd를 사용해봅니다.

허가 거부가 나온 이유는 sudo를 이용하여 명령어를 사용할 때는 앞에 sudo를 입력해주어야 합니다.

 

 

sudo를 입력하고 명령어를 입력하면 경고 메시지와 함께 패스워드를 입력하라고 합니다.

(원래 이 계정에서 사용하지 못하는 명령어이기 때문에 사용자에게 신중을 요하는 것입니다.)

 

 

패스워드를 입력해준뒤에,

cat /etc/passwd | tail -1을 통해 sudo_test1 계정이 만들어졌는지 확인해줍니다.

 

+ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ+

sudo를 사용할 때 명령어의 경로(/usr/sbin/useradd 등)를 찾아 하나하나 입력하였습니다.

하지만 명령어의 수가 많아지거나 적용해야 할 대상이 많아진다면 일일이 다 입력하는 것은 효율적이지 않습니다.

그래서 sudoers alias를 사용하면 좀 더 효율적으로 이용할 수 있습니다.

 

sudoers alias 사용법

User_Alias - 사용자 계정 alias를 사용하기 위한 지시어

Cmnd_Alias - 명령어 alias를 사용하기 위한 지시어

 

→ 형식

User_Alias [이름] = [계정명1], [계정명2], [계정명3] . . . [계정명N]

Cmnd_Alias [이름] = [명령어1], [명령어2], [명령어3] . . . [명령어N]

<예제1>

user1, user2, user3 계정 생성 후 비밀번호를 설정해줍니다.

# useradd user1

# useradd user2

# useradd user3

# passwd user1

 

 

# visudo를 이용하여

USER라는 이름에 user1, user2, user3을 포함시켜줍니다.

 

COMMAND라는 이름에 명령어들을 지정해줍니다.

 

USER ALL=COMMAND

→ USER에 해당하는 계정(user1, user2, user3)들에게 모든 호스트에서

COMMAND에 해당하는 명령어(useradd, usermod, userdel)를 사용할 수 있는 권한을 부여해줍니다.

 

※ 그룹은 앞에 %를 붙여야 group으로 인식합니다.

ex) %[group] ALL=/sbin/useradd

→ [group] 그룹에 속한 계정들에게 모든 호스트에서 명령어 useradd를 사용할 수 있는 권한을 부여합니다.

NOPASSWD [옵션]:사용

sudo사용 시 암호 입력 없이 사용하도록 하는 옵션

ex) USER ALL=NOPASSWD:COMMAND

계정 전환 시 비밀번호 외에 다른 비밀번호는 요구하지 않습니다.

 

 

 sudo와 su의 차이점

sudo (Substitute User DO) 수퍼유저(root)의 권한으로 프로그램을 실행합니다.

su (SubstituteUser) 사용자의 아이디를 잠시 다른 아이디로 바꿉니다.

 

 su와 su - 의 차이점

만약 su를 통해서 root로 로그인 한다고 가정한다면,

su만 사용할 경우에는 root권한에 포함되어 있는 환경변수는 하나도 가져오지 않습니다.

즉, root권한의 PATH나 기타 여러가지의 환경변수가 포함되지 않고 단지 로그인 계정만 바꾼다는 것입니다. 환경이 바뀌지 않는다는 것을 확인할 수 있는 것은 su명령만으로 로그인을 해 보면 일반 사용자가 지금 위치해 있는 디렉토리에 그대로일 것입니다. 결국 환경 변수는 제외하고, 권한만 바뀌어진다는 것입니다.

그렇기 때문에 su - 의 경우 환경변수까지 다 가져오게 되는데 위에서 했던 방법처럼 su - 하고 로그인 해 보면 기본 /root 디렉토리로 이동해 있을 것입니다. 환경변수를 가져온다는 말입니다.