사용자와 그룹 관리
사용자 관리
◎ Linux Account 유형
- Root Account
- Super User로써 관리자 계정 역할을 담당
- System Account
- 시스템 운용에 필요한 Account
- System의 특정 기능을 수행할 수 있음
- User Account
- 일반적인 서버 사용 User
- Critical System 파일 및 디렉터리에 Access가 제한되어 있음
◎ 사용자 추가
1. Uesr ID 추가
useradd [Option] [Username]
Option
- -d [Path] : 계정의 Home Directory
- -c "[Name]" : 계정의 사용자 이름
- -s [Shell] : Login 할 떄 사용할 Shell 정보 입력
- 대부분 /bin/bash를 사용함(Linux에서 기본적으로 사용하는 Shell)
- -g [GID] : GID에 해당하는 Group에 속하도록 함
- -u [UID] : 사용자 UID를 직접 지정함
- -e : 계정 만기일을 지정함
2. Password 설정
1번에서 추가한 계정에 대한 Password를 설정해줘야 한다.
만약 설정하지 않을 경우 해당 Username으로 로그인할 수 없게 된다.
passwd [Username]
◎ 사용자 수정
usermod [Option] [Username]
Option
- -d [Path] : 계정의 Home Directory 변경
- -m : Home Directory 변경 시 기존 Home Directory에 있는 파일들을 옮김
- -g : 사용자 Group 변경
- -s : Login 할 떄 사용할 Shell 변경
- -u : User의 UID 변경
- -e : 계정 만기일 변경
- -I : 사용자 ID(Username) 변경
- -L : 패스워드 Lock(로그인 불가)
- -U : 패스워드 Lock 해제
◎ 사용자 삭제
userdel [Option] [Username]
Option
- -r : 계정 및 계정의 Home Directory 삭제
◎ 사용자 정보 확인
id [Option] [User]
# User를 입력하지 않을 경우 현재 로그인한 계정의 User 정보를 출력
Option
- -G : User가 속해 있는 모든 Group ID(GID) 출력
- -n : UID 대신 User Name을 출력
- -u : Effective User ID만 출력
- -r : Effective ID 대신 Real ID 출력
- -n, -r은 무조건 g, G, u 옵션 중 1개와 같이 사용되어야 함
여기에 "Effective ID"와 "Real ID"라는 새로운 개념이 나타난다.
Real User는 프로세스를 실행했을 경우 명령어를 실행시킨 User이고 Effective User는 프로세스가 실행되면서 Access 할 파일 등에 대한 권한을 가지는 user이다.
대부분의 경우 Real User와 Effective User가 같으며 만약 둘이 다를 경우 꽤 복잡한 조건이 필요하다.
먼저 A라는 파일이 777(rwxrwxrwx) 권한을 가지고 있고 A 파일을 실행시킬 경우 770(rwxrwx---) 권한을 가지는 B 파일이 수정된다고 가정하자.
만약 Other에 속하는 사람이 A 파일을 실행시켰다고 가정하자. 이 때 A 파일 자체는 Other도 실행시킬 수 있으므로 실행은 되겠지만 B 파일에 대해서는 어떤 작업도 수행하지 못하므로 권한 문제가 발생할 것이다.
이때 Program에 "chmod u+s A"를 통해 실행 권한을 "rwsrwxrwx"로 만들 수 있다.
이 경우 A 파일을 실행하는 Real User는 Other에 속하는 사람이지만 Effective User는 파일의 Owner로 간주되어 프로세스 전체를 실행할 수 있는 것이다.
(물론, Other에 속하는 사람은 여전히 A 파일을 제외하면 B 파일에는 접근 불가하다)
◎ 존재하는 모든 사용자 확인
users
Group 관리
◎ Group이란?
Linux에는 User 이외에도 Group이라는 개념이 있다.
회사에서 부서 사람들만 볼 수 있는 파일을 만들 듯 Multi-User OS인 Linux에서도 특정 User들에게 파일을 공유하고 싶을 수 있는데 이때 특정 User들을 Group으로 묶어 Group 내 사람들은 파일에 접근할 수 있게 만드는 것이다.
Group은 따로 설정하지 않을 경우 기본적으로 User를 생성할 때 Username과 동일한 이름으로 같이 생성된다.
◎ Group 추가
groupadd [Options] [GroupName]
Options
- -g [숫자] : Group 고유 값인 GID를 입력 숫자값으로 설정함
- -r : System Account를 위한 Group을 생성하는 것으로써 500번 이하의 가장 빠른 GID를 생성함
◎ Group Password 변경(거의 일어나지 않는 상황)
gpasswd [Option] [GroupName]
Options
- -r : Group에 Password 삭제
◎ Group 변경
groupmod [Option] [GroupName]
Options
- -g [숫자] : Group 고유 값인 GID를 입력 숫자값으로 변경함
- -n [New GroupName] : 새로운 Group Name으로 변경
◎ Group 삭제
groupdel [Option] [GroupName]
Options
- -f : 강제로 Group을 삭제
◎ 존재하는 모든 Group 확인
groups
User & Group 정보 직접 수정
User들에 대한 정보는 /etc/passwd, 암호(Password)에 관한 정보는 /etc/shadow, Group에 관한 정보는 /etc/group에 저장되어 있다.
이 파일들에 접근하여 직접 User와 Group들에 대한 설정을 수정해줄 수도 있다.
/etc/passwd & /etc/group은 모두 Root 계정이 소유하고 있는 파일들이며 644(rw-r--r--)의 권한을 가지고 있으므로 Root 계정만 파일을 수정할 수 있다.
/etc/shadow는 한 층 더 중요한 정보로써 640(rw-r-----)의 권한을 가지고 있어 Root 계정이 아닌 계정은 파일을 읽을 수 조차 없다.
◎ /etc/passwd 형식
Username:Password:UID:GID:Comment:Home Directory:Login Shell
◎ /etc/shadow형식
Username:$alogorithm_id$salt$암호화된 패스워드:마지막 Password 변경일:Password 최소 사용기간:Password 최대 사용기간:경고:비활성화:만료일
- algorithm_id : 암호화시킨 Hash ID
- 1 : MD5
- 2 : BlowFish
- 5 : SHA-256
- 6 : SHA-512
- salt : 각 Hash에 첨가할 랜덤 값으로써 이 값과 Hash Function에 의해 암호화가 수행된다.
- 마지막 변경일 : 1970년 1월 1일 기준으로 일수로 표시함
- 패스워드 최소 사용 기간 : 패스워드를 변경한 후 최소 이 값의 일수가 지난 후 암호 변경이 가능함
- 패스워드 최대 사용 기간 : 마지막 패스워드 변경 이후 패스워드가 만료되는 일수
- 경고 : 패스워드 만료일에 이 값 전부터 패스워드 만료에 대한 경고문을 보냄
- 비활성화 : 패스워드 만료된 이후 계정이 잠기기 전까지 일수(Date). 만약 만료 후 이 값 동안 패스워드를 변경하지 않을 경우 계정이 잠김
- 만료일 : 계정 만료일. 1970년 1월 1일 기준으로 일수로 표시함
◎ /etc/group 형식
Group Name:Password:GID:그룹에 속한 사용자 이름들
위 3개 파일들을 형식에 맞게 수정하여 User 및 Group에 대한 설정값을 직접 변경할 수 있다.
이후에 배울 Linux는 네트워크에 관련된 설정들이다.
필자는 Linux 네트워크 기능 활용법을 알아보기 전에 (면접 준비도 겸해서) 네트워크 공부를 먼저 하는게 좋다고 생각하여 한동안 네트워크 관련 공부를 하기로 결정했다.