사용자
리눅스는 여러 사용자가 동시에 로그인할 수 있는 멀티 유저 시스템(multi-user system)이다. 여기에서 '사용자'는 사용하는 사람이 아니라 사용자(user)라는 이름의 '계정(account)'을 의미한다. 한 사람이 여러 계정을 소유할 수 있고, 여러 계정을 동시에 사용할 수도 있다.
사용자의 종류
리눅스는 실제 사람이 사용하는 사용자 말고도 여러 사용자를 등록해 시스템을 운용한다. 리눅스의 사용자는 크게 3가지로 나눌 수 있다.
- root 사용자
- 시스템 사용자
- 일반 사용자
root 사용자
root 사용자는 리눅스 시스템의 모든 권한을 가진 관리자 계정이다. 시스템 내 모든 파일에 대한 읽기/쓰기/실행 권한이 있으며, 시스템의 주요 설정 변경, 패키지 관리, 시스템 전원 관리 및 리부팅 등을 실행할 수 있다.
시스템 사용자
시스템 사용자는 리눅스 시스템에서 만든 사용자이다. 백그라운드 서비스나 데몬(daemon)을 실행하는 등 특정 기능을 수행한다. 그래서 보통 리눅스를 설치할 때 또는 특정 드라이버나 프로그램을 설치할 때 자동으로 추가된다. 시스템 관리용이라서 일반적으로 로그인이 불가능하다.
일반 사용자
일반 사용자는 root 사용자와 시스템 사용자를 제외한 모든 사용자를 의미한다. 보통 시스템에 로그인해 리눅스를 사용하는 일반적인 사용자를 말한다.
리눅스는 왜 사용자를 구분하는가? 가장 중요한 이유는 보안을 강화하고 시스템의 효율성을 높이기 위함이다. 한 리눅스 시스템에는 여러 사용자가 존재한다. 시스템의 보안 수준을 높이려면 사용자별로 알맞은 권한을 부여하고, 권한에 맞는 작업만 허용해야 한다. 그러기 위해 목적별로 사용자를 나누고, root 사용자를 비롯해 기능별 시스템 사용자를 두어 관리하는 것이다.
root 사용자 권한으로 명령을 실행하는 방법
SSH로 접속할 때 root 사용자로 로그인이 불가능하다면, root 사용자의 권한이 필요한 작업은 어떻게 수행할까? 리눅스는 일반 사용자로 로그인한 상태에서 root 사용자의 권한을 사용할 수 있는 3가지 방법을 제공한다.
- su 명령어 사용
- sudo 명령어 사용
- runuser 명령어 사용
su 명령어 사용
사용자를 전환하는 su(switch user 또는 substitute user) 명령어를 사용하는 방법이다.
$ su [option] [-] [user]
이 명령에서 가장 중요한 것은 사용자이다. su 명령어 뒤에 사용자 이름을 입력하면 현재 셸의 사용자를 입력한 사용자로 전환하려고 시도한다. 이때 전환할 권한이 있는지 확인하기 위해 비밀번호를 묻습니다. 입력한 사용자의 비밀번호를 정확히 입력하면 현재 셸의 사용자는 입력한 사용자로 전환된다.
사용자 위치에 아무것도 입력하지 않으면 root 사용자로 전환한다는 뜻이다. 이때도 root 사용자의 비밀번호를 입력하면 셸의 사용자가 root 사용자로 변환된다. 사용자 앞에 하이픈(-)은 선택사항이다. 하이픈을 입력하면 마치 새로운 사용자가 셸에 로그인할 것처럼 현재 작업 디렉터리도 새로운 사용자의 홈 디렉터리로 변경된다.
sudo 명령어 사용
sudo(Superuser DO) 특정 사용자의 권한으로 단일 명령을 수행하는 sudo 명령어를 사용하는 방법이다.
$ sudo [option] [command]
sudo 명령어는 보통 root 사용자의 권한으로 명령을 실행할 때 사용한다. 실행할 때는 su 명령어와 마찬가지로 비밀번호를 입력해야 한다. 이때 입력하는 비밀번호는 root 사용자가 아니라 sudo 명령어를 실행한 사용자의 비밀번호이다.(*중요) sudo 명령어를 실행할 수 있는 사용자에 대한 설정이 있어서 sudo 명령어를 실행할 수 있는 사용자인지만 확인하면 되기 때문이다. (sudo 권한은 /etc/sudoers 파일을 통해서 설정한다.)
runuser 명령어 사용
runuser 명령어는 사용자를 전환하거나 다른 사용자의 권한으로 명령을 실행한다.
$ runuser [option] -u user [command]
$ runuser [option] [-] user [command]
runuser 명령어는 보통 root 사용자만 이용할 수 있다. runuser 명령어를 사용하려면 su 명령어를 사용해 root 사용자로 전환하거나 sudo 명령어로 실행해야 한다. runuser 명령어는 여러 동작을 수행할 수 있는 만큼 사용법이 복잡하다.
runuser 명령어의 주요 옵션
- -l : 다른 사용자의 셸로 시작
- -g group : 다른 사용자의 기본 그룹을 지정
- -s shell : 다른 사용자의 기본 셸을 지정
- -c command : 다른 사용자로 실행할 명령을 지정
- -P : 다른 사용자의 프로세스 ID를 지정
- -f : 다른 사용자의 환경변수를 지정
3가지 방법 중 어떤 방식이 좋은 지는 정답이 없다. 상황에 맞게 사용하면 된다.
- su나 runuser 명령어를 사용하는 방법은 root 권한으로 실행할 명령이 많거나 지속적으로 실행해야 하는 경우에 편리하다.
- sudo 명령어를 사용하는 방법은 일반 사용자 권한으로 여러 명령을 실행하다 가끔 root 권한이 필요할 경우에 편리하다.
보안 면에서는 su나 runuser 명령어를 사용하는 것보다 sudo 명령어를 사용하는 것이 더 좋다. sudo 명령어를 사용하면 root 권한이 필요한 경우에만 사용할 수 있어서 불필요한 권한 상승을 막아준다.
사용자 정보를 관리하는 /etc/passwd 파일
리눅스 시스템에 등록된 사용자에 대한 정보는 /etc/passwd라는 파일에서 관리한다. /etc/passwd 파일의 내용을 살펴보면서 사용자의 속성을 알아보자. 다음과 같이 cat 명령어로 /etc/passwd 파일을 조회하면 시스템에 등록된 사용자 목록과 정보를 확인할 수 있다.
$ cat /etc/passwd
/etc/passwd 파일은 한 사용자에 대한 정보를 한 줄로 표기한다. 각 줄에는 사용자의 여러 정보가 포함돼 있다. 정보는 각각 필드(field)로 나눠 표시하고, 각 필드는 콜론(:) 구분한다. root 계정을 예로 들어 확인해 보자.
- 사용자 이름
사용자 이름은 통상 영문자, 숫자, 밑줄(_), 마침표(.)로 구성한다. 셸에 로그인할 때 'username을 입력하라'는 프롬프트가 뜨면 여기에 사용자 이름을 입력하면 된다. 사용자 이름은 자주 사용하기 때문에 너무 길지 않으면서도 다른 사용자와 구분할 수 있게 정하는 것이 좋다. - 비밀번호
초창기 유닉스 시스템에서는 이 필드에 사용자의 비밀번호를 저장했다. 하지만 비밀번호가 쉽게 노출되는 문제가 있어서 이제는 이 방식을 사용하지 않는다. - 사용자 ID(UID, User ID)
사용자 이름이 있는데, 왜 UID를 따로 사용할까? 사람은 리눅스 사용자를 사용자 이름으로 구분하지만, 리눅스는 사용자를 UID로 구분한다. 문자열로 구성된 사용자 이름보다는 정수 값으로 된 UID가 처리하기 더 편하기 때문이다. UID는 사용자별로 다르게 할당된 값이라서 다른 사용자의 UID와 중복되지 않는다. 모든 리눅스 시스템에서 0은 root 사용자의 UID로 사용한다. - 사용자 그룹 ID(GID, Group ID)
리눅스에는 사용자를 포함하는 사용자 그룹이란 개념이 있다. GID는 이 사용자 그룹의 ID를 나타낸다. - 추가 설명
일반 사용자는 조직이나 소속, 전화번호, 이메일 등 개인 정보를 저장할 수 있고, 시스템 사용자는 해당 사용자를 추가한 소프트웨어나 패키지 이름을 넣기도 한다. 생략해도 문제는 없다. - 홈 디렉터리
홈 디렉터리는 보통 /home 디렉터리 밑에 사용자 이름과 같은 이름의 디렉터리를 설정한다. 물론, 다른 디렉터리를 홈 디렉터리로 설정할 수도 있다. 홈 디렉터리는 사용자의 데이터를 저장하는 기본 디렉터리가 된다. 사용자의 데이터를 반드시 홈 디렉터리에 저장해야 하는 것은 아니다. 하지만 일반적으로 일반 사용자에게는 홈 디렉터리 외 공간에 파일을 저장할 권한이 주어지지 않는다. 모든 사용자가 접근 가능한 공용 디렉터리는 파일 읽기/쓰기가 가능하지만, 공용 목적의 파일만 저장하는 것이 좋다. 그래서 홈 디렉터리가 사용자의 데이터를 저장하기에 가장 적합한 공간이다. - 로그인 셸
사용할 셸의 이름이 아니라 셸 실행 바이너리(실행 파일)의 위치를 절대 경로로 표시한다. 일반적으로 셸은 /bin 디렉터리에 설치되며, Bash의 실행 바이너리는 /bin/bash에 위치한다.
사용자 그룹
사용자 그룹은 여러 사용자를 편리하게 관리하기 위한 도구이다. 각 사용자는 하나 이상의 사용자 그룹에 소속된다. 사용자 그룹에는 한 사용자만 있을 수도 있고 여러 사용자가 포함되어 있을 수도 있다.
사용자 그룹 단위로 파일 접근 권한을 관리할 수 있다. 어떤 사용자 그룹에 파일이나 디렉터리에 대한 권한을 부여했다면 해당 사용자 그룹에 속한 사용자에게는 사용자 그룹에 부여한 권한이 그대로 적용된다.
사용자 그룹 정보를 관리하는 /etc/group 파일
사용자 정보를 /etc/passwd 파일에 저장하는 것처럼 사용자 그룹 정보는 /etc/group 파일에 저장한다. /etc/group 파일을 cat 명령어로 조회하면 시스템에 등록된 사용자 그룹 목록과 정보를 확인할 수 있다.
$ cat /etc/group
$ cat /etc/group | grep ubuntu
함께 읽으면 좋은 글
'프로그래밍 > 리눅스' 카테고리의 다른 글
리눅스(Linux) 소유권과 권한 (0) | 2025.01.28 |
---|---|
리눅스(Linux) 사용자(User)와 사용자 그룹(User Group) 예제 (0) | 2025.01.28 |
리눅스(Linux) 소프트 링크와 하드 링크 (0) | 2025.01.26 |
셸 스크립트(Shell Script) 디렉터리 생성, 삭제 및 파일 명령어 정리 (0) | 2025.01.25 |
리눅스(Linux) 파일에 확장자가 없는 이유 (0) | 2025.01.23 |
댓글