Linux

사용자와 그룹 관리

VioletEvgadn 2023. 2. 16. 16:21

사용자 관리

◎ 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 네트워크 기능 활용법을 알아보기 전에 (면접 준비도 겸해서) 네트워크 공부를 먼저 하는게 좋다고 생각하여 한동안 네트워크 관련 공부를 하기로 결정했다.