본문 바로가기

Tech/Linux

[Linux] 사용자 권한 (sudo, sudoers, chmod, chown)

반응형

linux 서버를 사용하기 위해서 사용자 계정을 만들어서 사용하다보면 권한 문제에 부딪히게 된다. 서로 다른 사용자가 만든 파일에 접근하거나 시스템 설정 등을 위해서 root 권한이 필요하곤 하다. 이와 관련해서 sudo 권한과 파일의 권한을 조작하는 chmod, chown 등을 정리해본다.

1. sudo

sudo Super User DO 의 줄임말로 명령어의 앞에 붙여서 사용하는 명령어이다. 일반적으로 root 권한이 없는 사용자가 sudo 를 사용하여 superuser, root 권한으로 명령어를 실행할 수 있도록 해준다. 이를 통해서 시스템의 관리자 권한을 root 계정뿐만 아니라 여러명이 사용할 수 있도록 한다.

- sudoers

sudo 명령어가 어떤 명령을 실행할 수 있는지는 /etc/sudoers 파일에 정의되어 있다. 어떤 사용자가 sudo 명령어를 사용하여 어떤 명령을 실행할 수 있는지 등이 정의되어 있으며, 이러한 규칙은 개별 사용자 또는 사용자 그룹을 대상으로 적용할 수 있다.

 

사용자가 sudo 를 사용하기 위해서는 sudoers 파일에 명시되어 있어야 하는데, 이를 위해서는 visudo 명령어를 사용하는 것을 권장한다. visudo vi  와 같은 에디터이다. 다만 파일에 문법적인 오류가 있는 경우 파일 작성을 막는다.

 

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# 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

 

/etc/sudoers 파일은 위와같이 구성되어 있다. 아래쪽에 보면 root, admin, sudo 등에 대한 설정이 되어있다. root 는 root 사용자를 의미하며, %sudo 와 %admin 과 같이 % 가 이름앞에 붙어있는 것은 그룹을 의미한다. 이 파일에서는 root 사용자와 admin, sudo 그룹에 포함된 사용자들이 sudo 권한을 사용할 수 있다.

2. sudo 권한 부여

앞에서 본 것처럼 사용자가 sudo 권한을 사용하기 위해서는 sudoers 에 해당 사용자를 추가해야한다. 그러나 sudoers 파일을 직접 수정하고 사용자를 추가하는 방식은 보안적으로 위험하기 때문에 일반적으로 sudo 그룹에 사용자를 추가하는 방식으로 sudo 권한을 부여한다.

 

우선 현재 sudo 그룹에 추가되어 있는 사용자 목록을 확인한다. linux 그룹의 정보는 /etc/group 에 저장되어 있다. 이 파일의 내용을 확인하여 다음과 같이 그룹 목록과 해당 그룹의 멤버들을 확인할 수 있다.

 

 

현재는 sudo 그룹에 dev 계정만 추가되어 있는 것을 확인할 수 있다. 여기서 사용자를 추가하기 위해서는 "usermod" 명령어를 사용한다.

 

usermod [options] LOGIN

 

usermod 명령어는 사용자 계정의 정보를 수정하는 명령어로 위의 예시와 같이 usermod 명령어 뒤에 옵션들과 해당 변경을 적용할 사용자 계정을 입력하여 실행한다. 아래의 예제에서는 test1 이라는 사용자를 sudo 그룹의 멤버로 추가한다.

 

 

usermod 명령어에 -a -G 옵션 두가지를 추가하여 사용하였다. -a append -G 옵션으로 지정된 그룹에 해당 사용자를 추가하는 옵션이다. -G 옵션은 명령을 수행할 그룹들을 지정하는 옵션이다. 이 명령어를 수행한 다음에 다시 /etc/group 파일을 확인해보면 sudo 그룹에 test1 이 추가된 것을 확인할 수 있다.

 

이와같은 방식으로 sudo 그룹에 사용자를 추가하여 sudo 그룹의 권한을 사용할 수 있도록 할 수 있다.

3. chmod, chown

앞의 예제에서 사용자의 권한을 변경하였다면 이번에는 파일이나 디렉토리의 권한을 변경해본다. 여기서는 두가지 명령어를 사용할 건데, chmod chown 두가지이다.

- chmod

chmod 는 파일이나 디렉토리의 접근 권한을 변경하는 명령어이다. 파일의 권한은 읽기, 쓰기, 실행 세가지로 구분된다.

 

 

파일의 정보를 조회하면 위와같이 조회된다. 여기서 제일 앞에 출력되는 10자리 문자열이 파일의 권한을 의미한다.

 

d|rwx|rwx|rwx

d: 파일의 종류 (디렉토리: d, 파일: -)

파일 종류 뒤의 3개의 섹션은 각각 사용자, 그룹, 그 외 모든 사용자의 권한을 의미한다.

r: 파일의 읽기 권한 (read)
w: 파일의 쓰기 권한 (write)
x: 파일의 실행 권한 (execute)

 

파일의 권한 정보는 위의 설명과 같이 각각의 섹션을 나누어서 읽을 수 있다. 이를 통해서 chmod.test 는 사용자에게는 읽기와 쓰기를 허용하고 그룹과 그 외의 사용자들에게는 읽기만 허용하는 파일이라는 것을 알 수 있다.

 

파일의 권한을 바꾸는 방법으로는 문자 코드를 사용하는 것과 숫자 코드를 사용하는 두가지 방식이 있다.

문자 코드는 r, w, x 문자를 그대로 사용하여 권한을 정의하는 방식이다. 숫자 코드는 각각 r(4), w(2), x(1) 의 숫자와 매핑이 되어 권한을 주고싶은 코드를 더한 값을 부여하여 파일의 권한을 정의하는 방식이다.

 

 

먼저 문자 코드를 사용하여 권한을 변경하였다. chmod 뒤에 +x 을 mode 값으로 입력하여서 chmod.test 의 모든 섹션에 실행 권한을 주었다.

 

 

그 다음으로 숫자 코드를 사용하여 권한을 변경하였다. 421 mode 값으로 입력하여서 chmod.test 파일의 권한을 변경하였다. 그 결과 사용자는 읽기 (4), 그룹은 쓰기 (2), 그 외 사용자는 실행 (1) 권한을 허용하도록 변경되었다.

- chown

chown 은 파일이나 디렉토리의 소유권 (소유자, 그룹) 을 변경하는 명령어이다. 파일이나 디렉토리는 각각을 생성한 사용자와 사용자의 그룹이 소유권을 가지게 된다.

 

 

chown.test 파일의 정보를 보면 파일의 접근권한 정보 다음에 "root root" 라는 정보가 출력된다. 이 정보가 chown.tset 의 소유권 정보인데 첫번째 root 가 소유자, 두번째 root 가 그룹을 의미한다. 그렇기 때문에 root 그룹의 멤버와 그 외의 사용자는 해당 파일의 읽기만 가능하고 root 계졍은 읽기와 쓰기가 허용된다.

 

파일의 소유권을 변경하기 위해서는 chown 명령어를 사용하면 된다. chown change owner 를 의미하는 명령어로 파일의 소유자와 그룹을 변경할 수 있다.

 

chown [options] [OWNER][:[GROUP]] FILE

 

chown 은 위와 같은 형식으로 사용할 수 있는데, chown 명령어 뒤에 옵션과 파일 이름을 입력한다. 이때 OWNER GROUP 에는 파일의 소유권을 변경할 소유주와 그룹의 이름을 입력해주면 된다.

 

 

사진은 chown.test 의 소유권을 test1:test1 으로 변경한 결과이다. 이를 통해서 소유권을 root 계정에서 test1 계정으로 변경하였다.

 

[Reference]

- https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/managing-sudo-access_configuring-basic-system-settings

 

23장. sudo 액세스 관리 Red Hat Enterprise Linux 8 | Red Hat Customer Portal

Access Red Hat’s knowledge, guidance, and support through your subscription.

access.redhat.com

- https://cloud-allstudy.tistory.com/778

- https://velog.io/@xangj0ng/Linux-Ubuntu-%EA%B6%8C%ED%95%9C-%EC%84%A4%EC%A0%95

 

[Linux] Ubuntu 계정 권한 설정

우분투 리눅스를 설치할 때 sudo 권한(관리자 권한)이 필요할 때가 종종 있다. sudo 권한이 없으면 접근 권한이 있는 디렉토리로 변경하거나 sudo su 명령어를 통해 root 계정으로 컴파일 설치할 수 있

velog.io

 

반응형

'Tech > Linux' 카테고리의 다른 글

[Linux] 디스크 마운트 (fdisk, mkfs, mount, df)  (0) 2023.11.30
[Linux] 사용자 계정 생성 (adduser, useradd)  (1) 2023.11.26
[Linux] 리눅스 locale 설정  (0) 2022.06.23
[Linux] df  (0) 2022.06.06
[Linux] PID, PPID  (0) 2022.01.08