[Linux] 사용자 관리

JIWON·2025년 5월 22일

Linux

목록 보기
12/20
post-thumbnail

🙂 사용자관리

1️⃣ 사용자 계정 관련 파일

💠 /etc/passwd

  • 사용자 계정 정보가 저장된 파일

  • 구조 : 로그인ID:x:UID:GID:설명:홈디렉토리:로그인셸

    • 로그인ID : 사용자 계정 이름
    • x : 유닉스 시스템에서는 이 자리에 암호를 기록했는데 리눅스에서는 별도의 파일에 기록
    • UID : 사용자 ID 번호로 시스템이 사용자를 구별하기 위해서 부여하는 번호로 일반적으로 0-999번과 65534번시스템 사용자 용으로 예약되어 있고 일반 사용자1000번부터 할당
    • GID : 그룹을 구별하기 위한 번호
    • 설명 : 사용자의 실명이나 부서명 등 일반적인 정보가 기록되는 부분
    • 홈디렉토리 : 사용자가 로그인했을 때 처음 접속하는 디렉토리
    • 로그인셸 : 로그인했을 때 사용할 수 있는 셸
  • 파일 확인 more /etc/passwd


💠 /etc/shadow

  • 계정의 비밀번호를 저장하고 있는 파일
  • root 사용자만 조회 가능
  • 파일 구조 : 로그인ID:비밀번호:최종변경일:MIN:MAX:WARNING:INACTIVE:EXPIRE:Flag
    • 로그인ID
    • 비밀번호 : 암호화해서 저장
    • 최종변경일 : 1970년 1월 1일을 기준으로 해서 지나온 날 수
    • MIN : 비밀번호를 변경하고 이 날짜 만큼은 사용을 해야 함
    • MAX: 최대로 사용할 수 있는 날 수
    • WARNING : 암호가 만료되기 전에 경고를 시작하는 날 수
    • INACTIVE : 암호가 만료된 후에도 지정한 날 수 동안은 로그인이 가능하도록 해주는 날 수
    • EXPIRE : 계정이 만료되는날로 최종변경일과 동일하게 계산
    • Flag : 미래를 위해서 남겨둔 항목

확인

  • more /etc/shadow
  • root 계정
  • 사용자 계정
  • 비밀번호 : 암호화해서 저장
  • 비밀번호가 없으면 비어있고 시스템 계정은 *로 되어있음
  • 사용자 계정의 암호는 해독할 수 없도록 만들어져있음
  • 사용자가 비밀번호를 입력하면 이를 암호화해서 비교하도록 한다

비밀번호 저장
1. 비밀번호를 그대로 저장 abc -> abc /확인 조건 abc == abc
2. 암호화해서 저장

  • 평문 <-> 암호 : abc (+1) -> bcd (-1) -> 원래 비밀번호 알 수 있음
  • 평문 -> 암호 : abc -> asfsa (해시사용) -> 원래 비밀번호 알 수 없음

💠 /etc/login.defs

  • 사용자 계정의 설정과 관련된 기본값을 정의한 파일

💠 /etc/group

  • 리눅스의 사용자는 반드시 하나의 그룹에 속해야 한다

  • 그룹에 관련된 정보를 가지고 있는 파일

  • 파일 구조 : 그룹이름:x:GID:그룹멤버


💠 /etc/gshadow

  • 그룹의 암호 관련 파일
  • 파일구조 : 그룹이름:그룹암호:관리자:그룹멤버

2️⃣ 사용자 계정 생성

💠 useradd

  • 기본 형식 : useradd [옵션] [로그인ID]
  • 옵션
    • u uid : uid 설정
    • o : uid의 중복 허용
    • g gid : gid 설정
    • G gid : 2차 그룹 아이디
    • d 디렉토리 : 홈디렉토리 설정
    • s 셸 : 기본 셸 설정(꼭 배시 셸을 쓸 필요 없음)
    • c 설명 : 설명 설정
    • D 기본 값을 설정하거나 출력
    • e 유효기간 : EXPIRE 설정(YYYY-MM-DD)
    • f 비활성일수 : INACTIVE 설정
    • k 디렉토리 : 계정 생성 시 복사할 초기 파일이나 디렉토리를 설정해놓은 디렉토리 설정
    • m : 사용자 홈 디렉토리에 자동 생성

🔍 useradd 명령 실습

  • 옵션 없이 user1 계정 생성

    • sudo useradd user1
  • 계정 확인

    • tail -2 /etc/passwd
  • user1으로 로그인 시도

    • 접속 실패(비밀번호가 없음)
  • 패스워드 확인

    • sudo more /etc/shadow
    • 비밀번호 : ! 상태
  • user1의 암호 설정

    • sudo passwd user1
  • user1으로 로그인

    • su user1
    • 암호를 설정한 후 로그인을 하면 dash셸로 로그인 된다.
    • jiwoni 는 셸이 bash, user1은 셸이 sh (= dash) 이기 때문에 프롬프트 모양이 다르다
      jiwoni@mylinux:~$ : bash
      $ : dash

🔸 기본 설정 값 확인

  • useradd -D

  • 기본값 설정 파일 확인

    • cat /etc/default/useradd
    • 이파일을 수정하면 유저를 생성할 때 기본값이 변경되는데 파일을 직접 변경하는 것 보다는 useradd -D를 이용하는 것을 권장함

🔍 기본값 설정 실습
sudo useradd -D -e 2025-12-31


🔸 /etc/skel 디렉토리

  • 사용자 계정을 생성할 때 시스템 운영 정책에 따라 사용자 계정의 홈디렉토리에 공통으로 배포해야 할 파일이 있을 때 이 파일을 복사하기 위한 디렉토리
  • ls -a /etc/skel

💡 연습

  • 옵션을 사용해서 user2을 생성
    sudo useradd -s /bin/bash -m -d /home/user2 -u 2000 -g 1000 -G 3 user2
  • 계정 확인 : grep user2 /etc/passwd
  • 옵션을 사용해서 user3을 생성
    sudo useradd -e 2025-04-22 -f 5 -c "user3 test" user3
  • 계정 확인 : grep user3 /etc/passwd

💠 adduser

  • 기본형식 : adduser [옵션] 로그인ID

  • 옵션 :

    • --uid UID : UID를 지정
    • --gid GID : 기본 그룹의 GID를 지정
    • --home DIR : 홈 디렉터리를 지정
    • --shell 셸 : 기본 셸을 지정
    • --gecos 설명 : 사용자의 이름 등 부가적인 설명을 지정

🔍 adduser 실습

  • 옵션없이 생성

    • sudo adduser user4
  • 계정 생성 확인

    • tail -1 /etc/passwd
  • 옵션과 함께 생성

    • sudo adduser --uid 2002 user5
  • 계정 생성 확인

    • tail -1 /etc/passwd

🔸 기본값 확인

  • more /etc/adduser.conf

3️⃣ 사용자 계정 수정

💠 usermod

  • 사용자계쩡을 수정할 수 있는데 UID,GID,홈디렉토리,기본셸, 설명, 로그인ID, 패스워드 에이징 값을 수정하는 것이 가능

  • 기본 형식 : usermod [옵션] [로그인 ID]

  • 옵션 :

    • -u uid: UID를 수정
    • -o: UID의 중복을 허용
    • -g gid: 기본 그룹을 수정
    • -G gid: 2차 그룹을 수정
    • -d 디렉터리명: 홈 디렉터리를 수정
    • -s 셸: 기본 셸을 수정
    • -c 설명: 부가적인 설명을 수정
    • -f inactive: 계정 비활성화(INACTIVE) 날짜를 수정
    • -e expire: 계정 만료(EXPIRE) 날짜를 수정
    • -l: 계정 이름을 변경

🔍 usermod 실습

  • user2의 UID를 2000번에서 1003번으로 수정
    sudo usermod -u 1003 user2

4️⃣ 패스워드 에이징 관련 명령

💠 패스워드 에이징

  • 사용기간이나 inactive와 같은 것
  • 관련 명령:
    • useradd
    • usermod
    • passwd
    • chage : 패스워드 에이징을 관리하는 별도의 명령

🔍 패스워드 에이징 실습

  • user2의 패스워드 에이징 값 확인

    • sudo grep user2 /etc/shadow
  • user2의 패스워드 에이징 값 수정

    • sudo usermod -f 10 -e 2026-12-31 user2
    • sudo passwd -n 2 -x 100 -w 5 user2
  • chage 명령 사용

    • sudo chage -l user2

5️⃣ 사용자 계정 삭제

💠 userdel

  • 기본형식 : userdel [옵션] [로그인 ID]

  • 옵션 :

    • -r : 홈디렉터리 삭제
    • -f : 사용자가 로그인 중이어도 강제로 삭제
  • 사용 예:

    • userdel user4
    • userdel -r user2

🔍 사용자의 홈디렉토리를 설정하지 않은 경우 삭제
user1을 생성할 때 아무 옵션도 주지 않았기 때문에 실제 홈디렉토리는 루트디렉토리(/)이다. 따라서 -r 옵션으로는 지울 수 없다. 이런 경우는 찾아서 지워야한다
sudo find / -user UID -exec rm -r {} \;

user3 계정 디렉토리 삭제 후 계정삭제 :

  • sudo find / -user 2001 -exec rm -r {} \; 이후에 계정 삭제
  • userdel user3

나중에 계정을 만들 때 홈디렉토리 설정하는 것이 좋음

  1. -m 옵션
  2. adduser 파일에서 홈디렉토리 옵션을 적어주기

💡 계정 생성 연습

  • useradd 명령을 이용해서 test01 과 test02계정을 생성하는데 아래 조건에 맞춰서 생성
로그인셸UID2차그룹설명
test01본셸21003test01.user
test02배시셸22004test02.user
  • adduser 명령을 이용해서 test03계정을 생성하는데 아래 조건에 맞춰서 생성
로그인셸UID2차그룹설명
test03배시셸2300test03.user
  • test01 생성
    sudo useradd -m -u 2100 -G 3 -c "test01.user" -s /bin/sh test01
  • test02 생성
    sudo useradd -m -u 2200 -G 4 -c "test02.user" -s /bin/bash test02
  • test03 생성
    sudo adduser --uid 2300 --shell /bin/bash --gecos "test03.user" test03
  • 생성 확인 : tail /etc/passwd

💡 패스워드 에이징 연습

  • MIN: 4 MAX:200 WARNING:10 INACTIVE:5 EXPIRE:2026-12-31
  • test01 의 패스워드 에이징 값 확인 :
    sudo grep test01 /etc/shadow
  • 패스워드 에이징
    sudo chage -m 4 -M 200 -W 10 -I 5 -E 2026-12-31 test01
  • 변경 확인

💡 계정 정보 수정

  • test03의 UID를 2010으로 계정의 이름을 test33으로 수정
    sudo usermod -u 2010 -l "test33" test03

계정 삭제 연습

  • test02 계정 삭제
    sudo userdel -r test02

👪 그룹 관리

1️⃣ 그룹생성

💠 groupadd

  • 기본 형식 : groupadd [옵션] [그룹이름]

  • 옵션 :

    • -g gid : 그룹의 GID 지정
    • -o : GID 중복 허용
  • 옵션 없이 생성하면 gid 가 마지막 번호 +1 생성
    sudo groupadd gtest01
  • 그룹정보확인 : tail /etc/group
    grap gtest01 /etc/group
  • 사용 예:
    • gid 지정해서 생성 : sudo groupadd -g 3000 gtest02
    • gid 중복해서 생성 : sudo groupadd -g 3000 -o gtest03

💠 addgroup

  • 기본 형식 : addgroup [옵션] [그룹이름]

  • 옵션 :

    • -gid GID : 그룹의 GID 지정
    • -o : GID 중복 허용
  • 사용 예:
    • 옵션 없이 생성하면 gid 가 마지막 번호 +1 생성
      sudo addgroup gtest04
    • 옵션과 함께 생성
      sudo addgroup -gid 3001 gtest05

2️⃣ 그룹수정

groupmod

  • 기본 형식 : groupmod [옵션] [그룹이름]

  • 옵션 :

    • -g GID : 그룹의 GID 수정
    • -o : GID 중복 허용
    • -n 그룹이름 : 그룹명을 다른이름으로 바꾼다
  • 사용 예:

    • gid 변경 : sudo groupmod -g 3001 -o gtest01
    • 그룹이름 바꾸기 : sudo groupmod -n gtest11 gtest01

3️⃣ 그룹삭제

💠 groupdel

  • 기본 형식 : groupdel [그룹이름]

  • 사용 예:

    • groupdel gtest11

4️⃣ 그룹 암호 설정

💠 gpasswd

  • 기본 형식 : gpasswd [옵션] [그룹이름]

  • 옵션 :

    • -a 사용자계정 :사용자 계정을 그룹에 추가
    • -d 사용자계정 : 사용자 계정을 그룹에서 제거
    • -r : 그룹 암호를 삭제
  • 사용 예:

    • 그룹암호 설정 : gpasswd gtest02
    • 사용자 계정 그룹 추가 : gpasswd -a test33 gtest02
    • 그룹 암호를 삭제 : sudo gpasswd -r gtest02

🔸 그룹암호 설정이유

  • 그룹을 변경할 때 함부로 바꾸지 못하도록 할 때 사용

5️⃣ 소속 그룹 변경하기

💠 newgrp

  • 기본 형식 : newgrp [그룹명]

  • 사용 예:

    • 소속그룹 확인 : id jiwoni
    • jiwoni의 소속그룹을 gtest02로 수정
      newgrp gtest02
    • 자신의 2차 그룹이 아닌 그룹으로 gid를 변경할때 비밀번호를 물어봄

📰 사용자 정보 관리

1️⃣ UID와 EUID

UID(= RUID) : 로그인한 ID
EUID : 명령을 실행한 ID

  • 보통의 경우는 UID와 EUID 는 동일하다

  • UID와 EUID가 달라지는 2가지 경우

    • 실행파일에 setuid가 설정되어 있는 경우 : 해당 파일을 실행한 프로세스의 UID는 사용자 계정의 UID가 아니라 실행 파일 소유자의 UID가 되는데 이때 실행파일소유자의 UID를 EUID라고 함

    • su 명령을 사용하여 다른 계정으로 전환한 경우


2️⃣ 사용자 확인 명령

  • 사용자의 로그인 정보 확인 : who, w

💠 who

  • 기본형식 : who [옵션]
  • 옵션 :
    • -q : 사용자이름
    • -H : 출력 항목의 제목도 출려
    • -b : 마지막으로 재부팅한 날짜와 시간
    • -m : 현재 사용자 계정의 정보를 출력
    • -r : 런레벨을 출력
  • 사용예 :
    • who

💠 w

  • 기능 : 현재 시스템을 사용하는 사용자의 정보와 작업정보를 출력한다
  • 기본 형식 : w [사용자명]

💠 last

  • 사용자명과 로그인한 시간, 로그아웃한 시간, 터미널 번호나 IP 주소를 출력
  • 이 정보를 보면 누가 언제 로그인해서 로그아웃 했는지를 한눈에 알 수 있음
  • 기본형식 : last

💠 UID와 EUID 확인하기

  • 현재 작업 중인 내가 누구인지, UID와 EUID는 무엇인지 확인하는 명령은 whoami, who am i, id

  • 각 명령은 다음과 같이 구별

    • UID 출력: who am i,who -m
    • EUID 출력: whoami, id


3️⃣ 소속그룹 확인

💠 groups

  • 사용자 계정이 속한 그룹 출력
  • 기본형식 :groups

4️⃣ root 권한 사용 방법

  1. su 명령을 사용하여 root 계정으로 전환하는 것인데 이는 간단한 방법이기는 하지만 일반 사용자가 모든 시스템 관리 권한을 가지게 되어 보안상 매우 위험한데 예를 들어 시스템 관리자가 출장을 가면서 필요시 시스템 관리 작업을 할 수 있도록 su 명령을 사용하여 일반 사용자가 root로 전환되게 했다면 위험한 일이기 때문

  2. 일반 사용자에게 시스템 관리 작업 중 특정 작업만 수행할 수 있는 권한을 주는 것으로 예를 들면 사용자를 추가하거나 시스템을 종료할 수 있는 권한만 부여하는 것인데 sudo 명령으로 이와 같은 제한적인 권한 부여가 가능

💠 sudo 권한 설정

  • 일반사용자가 sudo 명령으로 root 권한을 실행하려면 특정 권한을 부여 받아야 한다.

  • 이 권한은 /etc/sudoers 파일에 설정

  • vi 편집기로 편집해도 되고 visudo 명령을 사용해도 되는데 visudo 명령을 사용하는 것을 권장(문법 검사를 수행하기 때문)

  • 설정형식 : 사용자계정 호스트=명령

  • 호스트 : 사용하는 컴퓨터

  • root는 root ALL=(ALL) 로 설정되어 있다.

  • 권한설정 예제:
    • user1에게 useradd 권한과 usermod 권한을 부여
      user1 ALL=/usr/sbin/useradd, /usr/sbin/usermod

💡 권한 부여 연습

  1. 계정 생성 : sudo useradd -m yam
    • 홈디렉토리 옵션만 설정해서 계정생성
  2. 계정 확인 : tail /etc/passwd
  3. 홈 디렉토리에 있는지 확인 : ls /home
  4. 로그인 할 수 있도록 비밀번호 설정 : sudo passwd yam
  5. 필요한 sudo 권한 부여(useradd) :
    • useradd 명령의 위치 확인 : whereis useradd
      -> /usr/sbin/useradd
    • yam 계정에는 sudo 명령은 권한이 없기 때문에 권한을 부여해야 사용가능하다su - yam
    • sudoers 파일을 편집할 수 있는 모드로 진입 : sudo visudo
    • 명령 작성 후 저장하고 나가기
      yam ALL=/usr/sbin/useradd
  1. 다시 yam 계정으로 접속해서 계정생성 명령해보기: su - yam
  2. 계정 확인 : tail /etc/passwd

💡 계정 삭제 연습

  1. yam에서 만든 계정 user10 삭제
    sudo userdel -r user10

  2. yam 계정 삭제 하면 안된다
    sudo userdel -r yam

  3. yam 계정 강제 삭제
    sudo userdel -r -f yam


💠 암호를 잠그고 해제하기

🔸passwd -l 유저 : 암호 잠금

  • 로그인을 할 수 없음

🔸 passwd -u 유저 : 잠금 해제


5️⃣ 파일 소유자와 소유 그룹 변경

💠 chown : 소유자 변경

  • 기본 형식 : chown [옵션] [사용자 계정] [파일명 또는 디렉토리명]

  • 옵션 :

    • -R : 서브 디렉토리의 소유자도 변경된다
  • 사용 예:

    • sudo chown -R user1 linux_ex

💠 chgrp : 그룹 변경

  • 기본 형식 : chgrp [옵션] [그룹이름] [파일명 또는 디렉토리명]

  • 옵션 :

    • -R : 서브 디렉토리의 소유 그룹도 변경된다

연습문제

  • 현재계정에서 temp 디렉토리 생성
    mkdir temp

  • temp 소유자 확인
    ls -l

  • test100이라는 계정생성하고 chown 명령을 사용할 수 있도록 설정

sudo useradd -m test100 # 계정생성 
sudo passwd test100 # 비번설정

sudo visudo # 권한설정 파일 열기
test100 ALL=/user/bin/chown
  • 현재 계정의 temp라는 디렉토리의 소유자를 test100으로 수정
sudo chown test100 temp
ls -l


6️⃣ 디스크 사용량 설정

💠 quota 라는 패키지 설치

sudo apt install quota

💠 쿼터 설정

edquota [옵션] [계정이나 그룹]

  • 옵션 :
    • -u : 사용자 쿼터
    • -g : 그룹 쿼터
    • -p : 쿼터 설정을 복사
  • 사용예:
    • sudo edquota -u user1

💠 쿼터 확인

quota [옵션] [계정이나 그룹]

  • 옵션 :
    • -u : 사용자 쿼터
    • -g : 그룹 쿼터
  • 사용예:
    • sudo quota jiwoni

💠 쿼터 정보 요약 출력

repquota

0개의 댓글