리눅스는 다중 사용자(Multi-User) 기반 운영체제로, 시스템 자원을 보호하고 효율적으로 공유하기 위해 사용자, 사용자 그룹, 그리고 권한이라는 세 가지 핵심 개념을 사용합니다.
1. 사용자 및 그룹의 개념
리눅스 시스템은 개별 사용자를 식별하기 위해 사용자 이름과 비밀번호를 사용하며, 각 사용자는 고유한 UID(User ID)를 부여받습니다.
- 루트(root) 사용자: 시스템의 모든 자원에 접근할 수 있는 최상위 관리자 계정입니다. 시스템 설정 변경 및 주요 실행 권한을 독점합니다.
- 일반 사용자: 시스템 설치 시 생성하거나 관리자가 추가한 계정으로, 자신의 홈 디렉토리 외에는 제한된 권한을 가집니다.
- 사용자 그룹: 여러 사용자를 하나의 논리적인 단위로 묶은 것입니다. 특정 파일이나 디렉토리에 대해 그룹 단위로 권한을 부여함으로써 협업 효율성을 높입니다.
2. 계정 전환 및 관리자 권한 획득
보안상의 이유로 평소에는 일반 계정을 사용하다가 관리 업무가 필요할 때만 루트 권한을 사용합니다.
# 루트 계정의 비밀번호 설정 및 변경
sudo passwd root
# 일반 사용자에서 루트 사용자로 전환
sudo -i
# 또는 (비밀번호 설정 후)
su - root
# 현재 접속 중인 사용자 확인
whoami
3. 사용자 계정 제어 명령어
시스템 관리자는 다음 명령어들을 통해 사용자 계정을 생성, 수정, 삭제할 수 있습니다.
사용자 생성 (useradd)
# 홈 디렉토리를 생성하며 새로운 개발자(dev_user) 추가
sudo useradd -m -s /bin/bash dev_user
# 특정 그룹(dev_team)에 소속된 상태로 사용자 생성
sudo useradd -g dev_team -m junior_dev
사용자 수정 및 삭제 (usermod, userdel)
# 사용자의 소속 그룹 변경
sudo usermod -g admin_group dev_user
# 사용자를 보조 그룹에 추가 (기존 그룹 유지)
sudo usermod -aG docker dev_user
# 사용자 계정 및 홈 디렉토리 강제 삭제
sudo userdel -rf old_user
비밀번호 관리 (passwd)
# 특정 사용자의 비밀번호 설정
sudo passwd dev_user
# 특정 계정 잠금(lock) 및 해제(unlock)
sudo passwd -l dev_user
sudo passwd -u dev_user
4. 사용자 그룹 관리
협업 환경을 구축하기 위해 그룹을 생성하고 관리하는 방법입니다.
# 'project_alpha'라는 이름의 새로운 그룹 생성
sudo groupadd project_alpha
# 그룹 이름 변경 (project_alpha -> alpha_team)
sudo groupmod -n alpha_team project_alpha
# 그룹 삭제
sudo groupdel alpha_team
# 시스템 내 모든 그룹 목록 확인
cat /etc/group
5. 파일 소유권 및 권한 관리
리눅스의 모든 파일과 디렉토리는 읽기(r), 쓰기(w), 실행(x) 권한을 가집니다.
소유권 변경 (chown)
# 파일의 소유자를 dev_user로 변경
sudo chown dev_user README.md
# 파일의 소유자와 그룹을 동시에 변경 (사용자:그룹)
sudo chown dev_user:dev_team app.py
# 디렉토리와 그 하위 모든 파일의 소유권 재귀적 변경
sudo chown -R admin:admin /var/www/html
권한 설정 (chmod)
권한은 문자 표기법과 숫자 표기법 두 가지 방식으로 설정할 수 있습니다. 숫자는 읽기(4), 쓰기(2), 실행(1)의 합산으로 계산됩니다.
- 문자 표기법: 대상(u:소유자, g:그룹, o:기타, a:전체)과 연산자(+, -, =)를 사용합니다.
- 숫자 표기법: 세 자리 숫자로 표현하며, 첫 번째는 소유자, 두 번째는 그룹, 세 번째는 기타 사용자의 권한을 의미합니다.
# 문자 방식: 그룹에 쓰기 권한 추가, 기타 사용자의 모든 권한 제거
chmod g+w,o-rwx script.sh
# 숫자 방식: 소유자(rwx=7), 그룹(rx=5), 기타(없음=0) 권한 설정
chmod 750 secure_data.txt
# 모든 사용자에게 실행 권한 부여
chmod a+x run_server.sh
이러한 사용자 및 권한 체계를 적절히 활용하면 다수의 사용자가 협업하는 서버 환경에서도 데이터의 무결성과 보안을 유지할 수 있습니다.