리눅스는 여러 사용자가 동시에 로그인할 수 있는 멀티 유저 시스템(multi-user system)이다.
여기서 사용자
는 사용하는 사람
이 아니라, 사용자(user)라는 이름의 계정(account)
을 의미한다.
다중 사용자 시스템으로 설계되었다는 것은, 단순히 여러 사람이 동시에 시스템을 사용할 수 있다는 것 이상의 의미를 가진다. 각 사용자는 독립된 작업 환경과 권한을 가지며, 이를 통해 시스템의 보안과 안정성을 유지한다.
리눅스는 실제 사람이 사용하는 사용자 말고도 여러 사용자를 등록해 시스템을 운용한다. 리눅스의 사용자는 크게 3가지로 나눌 수 있다.
root 사용자는 리눅스 시스템의 모든 권한을 가진 관리자 계정. 시스템 내 모든 파일에 대한 일기/쓰기/실행 권한이 있으며, 시스템의 주요 설정 변경, 패키지 관리, 시스템 전원 관리 및 리부팅 등을 수행할 수 있다. 즉, 절대적인 권한을 가짐.
시스템 사용자는 리눅스 시스템에서 만든 사용자. 백그라운드 서비스나 데몬(daemon)을 실행하는 등 특정 기능을 수행한다. (특정 서비스나 프로세스를 실행하기 위해 존재)
그래서 보통 리눅스를 설치할 때 또는 특정 드라이버나 프로그램을 설치할 때 자동으로 추가된다. 시스템 관리 용이라서 일반적으로 로그인이 불가능하다.
일반 사용자는 root 사용자, 시스템 사용자를 제외한 모든 사용자를 의미한다. 시스템에 로그인해 리눅스를 사용하는 일반적인 사용자. 제한된 권한을 가짐
sudo
명령어를 통해 임시로 관리자 권한을 얻어야 한다.리눅스가 사용자를 구분하는 이유 중 가장 중요한 이유는 보안을 강화하고 시스템의 효율성을 높이기 위함이다. 한 리눅스 시스템 안에는 여러 사용자가 존재한다. 시스템의 보안 수준을 높이려면 사용자별로 알맞은 권한을 부여하고, 권한에 맞는 작업만 허용해야 한다. 그러기 위해 목적별로 사용자를 나누고, root 사용자를 비롯해 기능별 시스템 사용자를 두어 관리하는 것이다.
root 사용자는 시스템 내 모든 파일에 대해 읽기/쓰기/실행 권한이 있어서 시스템의 모든 설정을 변경할 수 있다. 또한, 시스템 업데이트, 주요 소프트웨어 및 패키지 설치/업데이트/제거, 시스템 복구 등 시스템에 중요한 일을 모두 담당한다.
-> 이처럼 root 사용자는 권한이 막강해서 비밀번호 유출 등으로 권한이 탈취되면 시스템 전체가 탈취당했다고 해도 과언이 아니다. 그만큼 root 사용자는 보안에 각별히 신경써야 한다.
root 사용자로 로그인하지 못하게 설정하면 보안은 한층 더 단단해진다.
-> root 사용자가 네트워크를 통해 SSH로 접속할 수 있게 설정한다면 악성 코드나 해커에게 시스템에 로그인할 수 있는 방법을 제공하는 것이나 마찬가지. 따라서 root 사용자가 SSH로 로그인하는 것을 제한하는 것이 좋다.
SSH로 접속할 때 root 사용자로 로그인이 불가능 하다면, root 사용자의 권한이 필요한 작업은 어떻게 수행해야 하는가 ?
-> 리눅스는 일반 사용자로 로그인한 상태에서 root 사용자의 권한을 사용할 수 있는 3가지 방법을 제공한다.
사용자를 전환하는 su(switch user 또는 substitue user) 명령어를 사용하는 방법이다.
기본 문법 : su [옵션] [-] [사용자]
su 명령어는 현재 세션에서 다른 사용자로 전환할 수 있게 해준다. root로 전환하면 모든 관리자 권한을 얻게 된다. su 명령어를 단독으로 사용하면 root 사용자로 전환을 시도하며, 이때 root 비밀번호가 필요하다. 다른 사용자로 전환하려면 su username
형식으로 사용한다.
사용자 앞 하이픈(-
)은 선택사항이다. 하이픈을 입력하면 마치 새로운 사용자가 쉘에 로그인한 것처럼 현재 작업 디렉토리도 새로운 사용자의 홈 디렉토리로 변경된다. 또한 환경변수도 새로운 사용자의 환경변수로 설정된다. 하이픈을 입력하지 않으면 현재 사용자의 현재 작업 디렉토리와 환경 변수를 그대로 유지한다.
su 명령어는 완전한 사용자 전환을 제공하지만, 이는 root 비밀번호 노출될 위험이 있어 보안상 권장되지 않는다.
기본 문법 : sudo [옵션] 명령어
sudo는 현재 사용자 계정을 유지하면서 일시적으로 관리자 권한을 얻을 수 있게 해준다. sudo는 특정 명령어에 대해서만 관리자 권한을 부여하므로, su보다 더 안전한 방식.
sudo를 사용할 때는 현재 사용자의 비밀번호를 입력하며, 해당 사용자가 sudo 권한을 가지고 있어야 한다. 이 권한은 /etc/sudoers 파일에서 관리된다. sudo는 명령어 실행 기록이 남기 때문에 시스템 관리 측면에서도 유용하다.
runuser는 특정 사용자의 권한으로 명령을 실행할 수 있게 해주는 명령어이다. su와 비슷하지만, root 사용자만 실행할 수 있으며 더 안전한 방식을 제공한다. runuser는 PAM(Pluggable Authentication Modules) 인증을 거치지 않고 직접 전환하므로, 보안 정책이 엄격한 환경에서 유용하다.
runuser는 root 사용자가 다른 사용자의 권한으로 명령을 실행할 때 사용하는 명령어이다.
1. root 사용자만 실행할 수 있다.
2. 비밀번호 입력이 필요하지 않다.
3. PAM 인증을 사용하지 않는다.
일반적인 사용 상황은 자동화된 스크립트나 시스템 서비스에서 특정 사용자 권한으로 명령을 실행해야 할 때이다. 예를 들어, 시스템 백업 스크립트가 root로 실행되지만 특정 작업은 다른 사용자 권한으로 수행해야 할 때 runuser를 사용할 수 있다.
옵션 | 설명 |
---|---|
-l(—-login) | 다른 사용자의 쉘을 시작한다. |
-g(—group) | 다른 사용자의 기본 그룹을 지정한다. |
-s shell | 다른 사용자의 기본 쉘을 지정한다. |
-c command | 다른 사용자로 실행할 명령을 지정한다. |
따라서 일반적인 관리 작업에는 sudo를 사용하고, runuser는 자동화된 시스템 작업이나 서비스에서 특정 사용자 권한이 필요한 경우에 사용하는 것이 좋다.(runuser는 주로 시스템의 감사 및 책임 추적을 위해 사용되기 때문 ?? 어떤 작업이 어떤 사용자 권한으로 실행되었는지 정확히 기록하는 것이 중요해서 runuser를 사용한다고 생각하자)
일상적인 시스템 관리 작업에는 sudo를 사용하는 것이 권장된다. sudo는 명령어 실행 기록을 남기고, 특정 명령어에 대해서만 권한을 부여할 수 있어 보안성이 높음.
자동화된 시스템 작업이나 서비스 실행의 경우:
시스템 서비스나 데몬 프로세스는 전용 시스템 사용자 계정을 생성하여 실행한다. 예를 들어, 웹 서버는 www-data
사용자로, 데이터베이스는 mysql
사용자로 실행된다. 이러한 서비스를 실행하거나 관리할 때 runuser를 사용하여 해당 시스템 사용자의 권한으로 전환한다.
sudo 명령어의 실행 권한은 /etc/sudoers
파일을 통해 관리된다.가장 일반적인 방법은 사용자를 sudo 권한을 가진 그룹에 추가하는 것이다.
Ubuntu와 같은 많은 리눅스 배포판에서는 sudo
또는 wheel
그룹이 이러한 목적으로 사용된다.
사용자를 sudo 그룹에 추가하는 방법 :
usermod -aG sudo username
우분투는 설치할 때 추가한 기본 사용자를 sudo 그룹에 포함한다. /etc/sudoers
파일에는 sudo 사용자 그룹이 실행하는 모든 명령을 허용하도록 설정돼 있다. 그래서 우분투를 설치할 때 추가한 사용자는 sudo 명령어를 사용할 권한이 있다.
사용자 그룹은 여러 사용자를 편리하게 관리하기 위한 도구이다. 각 사용자는 하나 이상의 사용자 그룹에 소속된다.
사용자 그룹 단위로 파일 접근 권한을 관리할 수 있다. 어떤 사용자 그룹에 파일이나 디렉토리에 대한 권한을 부여했다면 해당 사용자 그룹에 속한 사용자에게는 사용자 그룹에 부여한 권한이 그대로 적용된다. 또한 특정 사용자 그룹의 내부 사용자에게만 정보를 공유할 수도 있다.
사용자 정보를 /etc/passwd
파일에 저장하는 것처럼 사용자 그룹 정보는 /etc/group
파일에 저장한다. /etc/group
파일을 cat 명령어로 조회하면 시스템에 등록된 사용자 그룹 목록과 정보를 확인할 수 있다.
기본 형식 : adduser [옵션] 사용자_이름
adduser 명령어는 새로운 사용자를 시스템에 추가한다. 사용자 생성 과정을 대화형으로 진행하며, 홈 디렉토리 생성과 기본 설정 파일 복사 등을 자동으로 처리함.
sudo adduser username
--ingroup
옵션으로 사용자 그룹을 지정한다.기본 형식 : deluser [옵션] 사용자_이름
deluser는 시스템에서 사용자 제거. 기본적으로 사용자의 홈 디렉토리는 유지되며, --remove-home
옵션을 사용하면 홈 디렉토리까지 함께 삭제할 수 있다.
sudo deluser username
sudo deluser --remove-home username
addgroup 명령어로 새로운 그룹 생성. 그룹은 여러 사용자에게 공통된 권한을 부여하는데 사용된다.
sudo addgroup groupname
delgroup 명령어로 그룹 삭제.
sudo delgroup groupname
passwd
명령어는 사용자 비밀번호를 변경한다. 일반 사용자는 자신의 비밀번호만 변경할 수 있고, root 사용자는 모든 사용자의 비밀번호를 변경할 수 있다.
# 자신의 비밀번호 변경
passwd
# root가 다른 사용자의 비밀번호 변경
sudo passwd username