[Linux] Ubuntu 사용자 관리

angie·2024년 9월 9일

1. 사용자 계정 관련 파일

1) /etc/passwd

개요

  • 사용자 계정 정보가 저장된 기본 파일
  • 초창기에는 암호도 저장되었지만 지금은 암호는 /etc/shadow에 저장

구조
로그인ID:x:UID:GID:설명:홈디렉터리:로그인쉘

  • 7개의 항목으로 구성되면 각 항목은 콜론으로 구분한다.
  • x : 예전에 비밀번호를 저장하던 영역으로 호환성 문제 때문에 남아있다.
  • UID : 사용자를 구분하기 위한 번호. 일반적으로 0~9999번과 65534는 시스템 사용자를 위한 UID로 예약되어 있고, 일반 사용자는 1000번 부터 할당한다. root가 0번, 시스템 데몬이 1번, 명령어를 위한 관리 계정이 2번
  • GID : 사용자가 속한 그룹의 ID로 사용자를 등록할 때 정해지고 특별히 소속 그룹이 지정하지 않는 경우 로그인 ID가 그룹으로 등록. 그룹에 대한 정보는 /tex/group에 저장
  • 설명 : 사용자의 실제 이름이나 부서명 같은 것을 적을 수 있는 부분
  • 홈디렉터리 : 로그인을 했을 때 자동으로 로그인 되는 디렉토리의 절대 경로
  • 로그인 쉘 : 로그인했을 때 처음 보여지는 쉘

2) /etc/shadow

  • 사용자 암호에 대한 정보를 저장한 파일
  • 9개 영역으로 구성
    1. ID
    2. 비밀번호, 단방향 암호화를 이용해서 저장. 시스템 계정은 *
    • 단방향 암호화: 암호화한 내용과 평문을 비교해서 일치여부는 알 수 있지만 암호화된 내용을 이용해서 원래 내용으로 만드는 것은 안되는 방식
    • 양방향 암호화: 암호화한 내용을 기반으로 원래 내용을 만들 수 있는 방식
    1. 비밀번호 변경한 날짜
      "1970년 1월 1일을 기준으로 지나온 날짜"
    2. 비밀번호를 변경하고 사용해야 하는 최소 날짜
    3. 비밀번호를 변경하고 사용해야 하는 최대 날짜
    4. 경고를 발생할 날짜
    5. 비밀번호가 유효한 마지막 날짜
    6. 미래를 위해서 만든 항목

3) /etc/login.defs

  • 로그인과 관련된 기본 설정 파일
  • 주요 설정 값
    MAIL_DIR -> /var/mail : 기본 메일 디렉터리
    PASS_MAX_DAYS -> 99999
    PASS_MIN_DAYS -> 0
    PASS_WARN_AGE -> 7
    UID_MIN, UID_MAX -> 1000~60000 : 사용자 계정의 UID 범위
    SYS_UID_MIN, SYS_UID_MAX -> 100~699 : 시스템 계정의 UID 범위
    GID_MIN, GID_MAX -> 1000~60000 : 사용자 계정의 GID 범위
    SYS_GID_MIN, SYS_GID_MAX -> 100~699 : 시스템 계정의 GID 범위
    DEFAULT_HOME -> yes : 사용자 홈 디렉터리 생성 여부
    UMASK -> 0002 : umask 값 설정
    USERGROUP_ENAB -> yes: 계정 삭제 시 그룹 삭제 여부
    ENCRYPT_METHOD -> SHA512: 암호화 기법

4) /etc/group

  • 그룹의 정보가 저장된 파일
  • 리눅스에서 사용자는 하나 이상의 그룹에 속해야 한다.
  • 기본 그룹은 /etc/passwd에 작성되어 있고 2차 그룹에 대한 내용을 /etc/group에 작성
    그룹이름:x:GID:그룹멤버

5) /etc/gshadow

  • 그룹 암호가 저장된 파일
  • 유닉스에는 없는 파일

2. 계정 관리 명령

1) 사용자 계정 생성

  • 형식
    useradd [옵션] [로그인ID]
  • 옵션
    u: UID 지정
    o: UID 중복 허용
    g: GID 지정
    G: 2차 그룹 지정
    d: 홈 디렉터리 지정
    s: 기본 쉘
    c: 부가적인 설명
    D: 기본값을 설정하거나 출력
    e: EXPIRE 항목을 설정
    f: 비활성 설정
    k: 계정 생성할 때 사용할 초기화 파일을 저장한 디렉토리 설정
  • 사용자 계정을 생성할 때는 passwd 명령을 이용해서 비밀번호를 설정을 해야한다.
  • 사용자 계정이 만들어질 때의 옵션 확인: useradd -D
  • -1 => 1의 2의 보수 / 모든 자리가 다 1, 즉 제일 큰 수 의미한다 / 양수만 있는건지 음수도 있는건지 같이 확인해야한다. 양수만 존재하면 -1은 가장 큰 수
$ useradd -D
GROUP=100   	-- 그룹 ID
HOME=/home  	-- 홈 디렉터리의 생성 위치
INACTIVE=-1 	-- 0으로 설정하면 암호가 만료되자마자 바로 계정이 잠김
EXPIRE=  	    -- 계정 종료일
SHELL=/bin/sh   -- 기본 로그인 쉘을 설정
SKEL=/etc/skel  -- 홈 디렉터리의 복사할 기본 환경 파일의 경로
CREATE_MAIL_SPOOL=no  -- 메일 디렉터리 생성 여부  
  • 사용자 계정 시 설정된 옵션은 vi를 이용해서 /etc/default/user 파일을 수정해서 변경할 수 있지만 되도록이면 -b, -e, -f, -g, -s 와 같은 옵션을 수정하는 것을 권장

  • 옵션을 이용한 사용자 계정 생성
    sudo useradd -s /bin/bash -m -d /home/user3 -u 2000 -g 1000 -G 3 user3

  • adduser 명령

    • 사용자 계정을 생성하는 명령
    • 형식
      adduser [옵션] 로그인ID
      • 옵션
        --uid
        --gid
        --home
        --shell
        --gecos : 설명을 붙여주는 옵션
    • 생성할 때 옵션 적용 내용이 출련된다.
    • sudo adduser user4
    • adduser로 유저를 생성할 때는 /etc/adduser.conf 파일을 기반으로 한다.

2) 계정 수정

  • 명령 형식
    usermod [옵션] [로그인ID]
    • 옵션
      u : UID 수정
      o : UID 중복 허용
      g : 기본 그룹 수정
      G : 2차 그룹 수정
      d : 홈 디렉토리 수정
      s : 기본 쉘 수정
      c : 보충 설명 수정
      f : 계정 비활성화 날짜를 수정
      e : 계정 만료날짜 수정
      i : 계정 이름 변경
  • UID를 수정해서 중복을 허용하게 되면 사용자 아이디가 달라도 동일한 계정으로 로그인한 것으로 간주

3) 패스워드 에이징

  • aging : 시간이 지남에 따라 우선 순위가 높아지는 것

  • 비밀번호의 유효 기간을 설정하는 것을 패스워드 에이징이라고 한다.

  • 관련 명령

    useradd, usermod, passwd 명령 수정chage 명령으로 수정
    MINpasswd -n 날짜change -m
    MAXpasswd -x 날짜change -M
    WARNINGpasswd -w 날짜change -W
    INACTIVEuseradd -f 날수, usermod -f 날수change -I
    EXPIREuseradd -e 날짜, usermod -e 날짜change -E
  • 변경

    • 기존의 값을 확인 : sudo cat /etc/shadow | grep user3
    • 변경: sudo usermod -f 10 -e 2-24-12-31 user3
    • 기존의 값을 확인: sudo cat /etc/shadow | grep user3

4) 계정 삭제

  • 형식
    userdel [옵션] [로그인ID]
    • 옵션
      r : 홈 디렉터리까지 삭제
      f : 로그인 중이어도 강제 삭제

5) 사용자 계정 명령 실습

  • useradd 명령으로 test01, test02 계정을 생성 : 비밀번호 설정 없이 계정을 생성(원격 접속 불가) 하고 계정이 생성될 때 수행하는 기본 작업을 보여주지 않는다.

    로그인ID로그인쉘UID2차그룹설명
    test01sh(본쉘)21003test01.user
    test02bash22004test02.user
    • sudo useradd -m -u 2100 -G 3 -s /bin/sh -c "test01 user" test01
    • sudo useradd -m -u 2200 -G 4 -s /bin/sh -c "test02 user" test02
  • adduser 명령으로 test03 계정을 생성 : 초기 설정 과정이 화면에 출력되고 비밀번호 설정 메시지가 제공된다.

    로그인ID로그인쉘UID설명
    test03bash2300test03.user
    • sudo adduser --uid 2300 --shell /bin/bash --gecos "test03 user" test03
  • 패스워드 에이징(유효 기간 수정)

    MIN(m)MAX(M)WARNING(W)INACTIVE(I)EXPIRE(E)
    42001052024-12-09

    chage 명령으로 수정

    • sudo chage -m 4 -M 200 -W 10 -l 5 -E 2024-12-09 test01
  • test03 계정의 UID를 2010으로 계정의 이름을 test33으로 수정. usermode 명령을 이용. uid를 u 옵션을 이용. 계정의 이름 변경은 l 옵션 사용.

    • sudo usermod -u 2010 -l test33 test03
  • test02 계정을 삭제 - 사용자의 홈디렉토리까지 삭제

    • sudo userdel -r test02
  • public cloud 에서 IaaS 서비스로 머신을 제공할 떄 계정을 추가할 수 있도록 하는데 이 경우 계정만 추가하도록 해주는 경우도 있고 /home 디렉토리를 만들어주는 경우도 있다.

3. 그룹 관리 명령

1) 개요

  • 리눅스는 모든 유저가 하나 이상의 그룹에 속하도록 한다.
  • 시스템을 사용하는 사용자가 많아지면 업무나 기능에 따라 사용자들을 적절히 나누고 권한을 조정해야 합니다.
  • 시스템 관리자가 수행하는 작업
  • 관련 명령은 groupadd, addgroup, groupmod, groupdel

2) 그룹 생성(groupadd)

  • groupadd [옵션] [그룹이름]
    • 옵션
      g : 그룹 아이디
      o : 그룹 아이디 중복 허용
    • 옵션 없이 생성하면 마지막에 생성된 그룹 아이디 다음 번호로 그룹 아이디를 설정해서 생성
  • 옵션 없이 그룹 생성
    • sudo groupadd gtest01
    • sudo cat /etc/group | grep gtest01
  • 그룹 아이디를 직접 설정
    • sudo groupadd -g 3000 gtest02
  • addgroup 명령으로 생성가능한데 이 때는 옵션이 --gid
    • sudo addgroup --gid 3001 gtest04

3) 그룹 수정(groupmod)

  • groupmod [옵션] [그룹아이디]
    • 옵션
      g : 그룹 아이디를 변경
      n : 그룹 이름 변경
  • sudo groupmod -g 2500 -n gtest05 gtest04

4) 그룹 삭제(groupdel)

  • groupdel

5) 그룹 암호 설정 및 사용

  • gpasswd [옵션] [그룹이름]
    • 옵션
      a : 사용자 계정을 그룹에 추가
      d : 사용자 계정을 그룹에서 삭제
      r : 그룹 암호를 삭제
      옵션이 없으면 암호 설정
  • 그룹에 멤버 추가
    • sudo gpasswd -a test01 gtest01
  • 그룹에서 멤버 삭제
    • sudo gpasswd -d test01 gtest01
  • 그룹 암호 설정
    • sudo gpasswd gtest01
  • 암호를 설정하는 이유는 한명의 유저가 서로 다른 2개 이상의 그룹에 소속된 경우그룹을 변경하고자 할 때 사용한다. 이 때 사용하는 명령은 newgrp [그룹이름]

4. 사용자 정보 관리 명령

1) UID와 EUID

  • UID(RUID): 사용자가 로그인할 떄 사용한 계정의 UID
  • EUID: 현재 명령을 수행하는 주체의 UID
  • 대부분의 경우는 UID와 EUID가 일치하지만 달라지는 경우
    • 실행 파일에 setuid가 설정된 경우
    • su 명령을 이용해서 계정을 변경한 경우

2) who와 w

  • who : 현재 로그인한 사용자 정보를 출력
    옵션을 설정하면 일부 정보만 확인 가능
  • w 명령은 현재 시스템에 로그인 한 사용자의 정보 외에 사용자가 현재 실행 중인 작업에 대한 정보를 출력. 옵션에 사용자 이름을 설정하면 사용자 이름에 해당하는 작업만 출력
  • last 명령을 이용하면 시스템에 로그인 하고 로그아웃 정보를 출력

3) UID와 EUID 확인

  • 현재 사용 중인 유저 확인(EUID 출력) : whoami
  • 로그인 한 유저 확인(RUID - UID) : who am i
  • 아이디 확인 : id
  • 소속 그룹 확인 : groups [유저아이디]
    유저 아이디를 생략하면 현재 사용자 계정이 속한 그룹

4) 권한 수정

  • 다른 계정으로 전환해서 권한을 사용

    • su 명령으로 root 계정으로 전환해서 기능 사용
    • root 계정으로 전환해서 권한을 사용하는 것을 위험한데 이는 시스템 관리 권한을 갖기 떄문
  • 계정 별로 특정한 작업을 수행할 수 있도록 권한을 부여

    • sudo 명령으로 root 권한을 실행하려면 특정 권한을 부여받아야 하는데 이 권한은 /etc/sudoers 파일에 설정.
      사용자 계정 호스트 = 명령어 형태로 설정
    • sudoers 파일은 기본적으로 읽기 전용이므로 수정을 하고자 하면 sudo chmod 명령으로 w 권한을 설정하고 해야 한다.

    root ALL=(ALL) ALL

    • user2에게 유저를 생성하고 유저를 수정하는 권한을 갖도록 수정
      user2 ALL=/usr/sbin/useradd, /usr/sbin/usermod
  • 처음 로그인 한 유저가 관리자 명령 실행 권한이 없어서 명령을 수행을 못하는 경우 위처럼 sudoers 파일을 수정해서 해도 되고 su를 이용해서 관리자로 로그인 하고 usermod -aG sudo 계정으로 계정에 모든 관리자 명령을 수행할 수 있도록 설정하기도 한다.

5) 파일 및 디렉터리 소유자 외 소유 그룹 변경

  • 파일이나 디렉터리를 생성하고 생성한 사용자의 계정과 그룹이 소유자와 소유 그룹으로 설정

  • 파일이나 디렉터리의 소유자를 변경할 필요가 있을 때 사용하는 명령

  • 파일 소유자를 변경하는 chown

    • 형식
      chown [옵션][사용자 계정][파일 or 디렉터리 경로]
      옵션
      R : 서브 디렉토리까지 적용

    • 예시
      chown user2 file -> file1의 소유자를 user2로 변경
      chown user2:grp01 file1 -> file1의 소유자를 grp01의 user2로 변경
      chown -R user2 file1 -> file1의 소유자를 user2로 변경하는데 하위 디렉터리가 있으면 같이 변경

    • 소유자 변경보다는 권한 변경을 하는 경우가 많음

    • 실습

      1. 홈 디렉터리에 linux_ex 디렉터리를 생성
        linux_ex 디렉터리 안에 autoever라는 디렉터리를 생성
        autoever 디렉터리 안에 temp 라는 디렉터리를 생성
        -> mkdir -p ~/linux_ex/autoever/temp
        (웹 서버를 만들어서 파일 업로드 기능을 만드는 경우나 DataLake를 구성하는 경우, 날짜를 가지고 디렉터리를 만들어서 데이터를 보관하는 경우가 있는데 이 경우 디렉터리 생성할 때 날짜를 계층 별로 이용하는 디렉터리를 생성하는 경우가 있다)
        Datawarehouse: 업무에 맞는, DataLake: 모든 데이터
      2. temp 디렉터리 안에 /etc/hosts 디렉터리의 모든 내용을 복사
        -> cp /etc/hosts ~/linux_ex/autoever/temp
      3. temp 디렉터리 안에 /etc/services 디렉터리의 모든 내용을 복사
        -> cp /etc/services ~/linux_ex/autoever/temp
      4. 소유자와 그룹 확인(소유자와 그룹이 파일을 복사할 때 로그인 중인 유저가 된다)
        -> ls -l
      • hosts 파일의 소유자를 owner1으로 수정
        -> sudo chown owner1 hosts
      • services 파일의 소유자를 owner1으로 소유 그룹도 owner1으로 변경
        -> sudo chown owner1.owner1 services
  • 파일의 소유 그룹을 변경하는 chgrp

    • 형식
      chgrp [옵션][사용자 계정][파일 or 디렉터리 경로]
    • chown 명령 사용시 주의사항
      • 스크립트를 이용해서 자동화하는 경우 권한 문제가 발생할 수 있음
        chown 명령을 사용하는 스크립트의 경우는 앞에 sudo를 추가해서 필요한 권한을 전부 취득하고 하는 것이 좋다.
      • 디렉터리 관련 작업을 할 때 -R 옵션을 추가하면 하위 디렉터리까지 같이 작업을 수행한 후 할 수 있다면 find 명령을 수행하고 하는 것이 바람직: 그렇지 않으면 성능 이슈가 발생할 수 있다.

5. 디스크 사용량 설정

1) 개요

  • 리눅스는 기본적으로 여러 사용자가 한꺼번에 사용하는 시스템
  • 디스크 사용량을 제한하는 기능을 제공. 이를 디스크 쿼터라고 한다.
  • 설정 방식
    • 사용자가 사용할 수 있는 파일의 전체 용량을 설정
    • 파일의 개수를 제한
  • 쿼터 설정시 한계치 설정
    • hard limit: 절대로 넘어설 수 없는 용량을 설정
    • soft limit: 일정 시간 동안은 용량을 넘어설 수 있는 방식

2) 사용하는 패키지: quota

sudo apt update
sudo apt install -y quota

3) 준비

  • 파일 시스템의 마운트 옵션에 쿼터 속성을 설정
    • usrquota : 개별 사용자의 쿼터를 제한할 수 있는 속성
    • grpquota : 개별 그룹의 쿼터를 제한할 수 있는 속성
  • 쿼터 속성 설정은 /etc/fstab 파일에 설정

4) 루트에 실습을 위한 디렉토리와 계정 설정

sudo mkdir /home2

sudo mount /dev/sda2 /home2
마운트 - 디렉토리를 어떤 디스크에 생성할 것인가 설정

sudo useradd -m -d /home2/qtest1 qtest1
sudo useradd -m -d /home2/qtest2 qtest2

ls /home2
tail -2 /etc/passwd

-- 현재 파일 시스템 확인
df -TH

  • 쿼터 속성 설정 - /etc/fstab 파일
    파일시스템이름 디렉토리경로 파일시스템종류 defaults,usrquota 1 1
    /dev/sda2 /home2 ext4 default,usrquota 1 1
  • remount
    sudo mount -o remount /home2
  • mount 정보 확인
    mount

5) 쿼터 데이터베이스 파일 생성

  • 명령 - quotacheck
    • 쿼터 파일을 생성 및 확인 그리고 수정하기 위해서 파일 시스템을 스캔하는 명령
    • 형식: quotacheck [옵션] [파일 시스템]
      • 옵션
        a : 전체 파일 시스템을 체크
        u : 사용자 쿼터를 확인
        g : 그룹 쿼터를 확인
        m : 파일 시스템을 리마운트하지 않음
        v : 명령 진행 상황을 상세하게 출력
  • 명령 실행
    quotacheck -ugvm /home
    • 2개의 데이터베이스 파일이 생성
      aquota.user : 사용자 쿼터 데이터베이스 파일
      aquota.group : 그룹 쿼터 데이터베이스 파일
  • 쿼터 사용 활성화 : quotaon
    quotaon [옵션][파일시스템]
    • 옵션
      a : 전체 파일 시스템에 적용
      u : 사용자 쿼터를 활성화
      g : 그룹 쿼터 활성화
      v : 명령 진행 상황을 상세하게 출력
    • 명령 수행
      sudo quotaon -uv /home2
  • 쿼터 설정 및 확인
    • 명령: edquota
    • 형식
      edquota [옵션][사용자 계정 or 그룹]
      • 옵션
        u : 사용자 쿼터 설정
        g : 그룹 쿼터 설정
        p : 쿼터 설정을 복사
      • -u 옵션을 이용하면 쿼터 편집 창이 나오게 되는데 원하는 크기를 soft와 hard에 설정하고 저장한 후 빠져나오면 된다.
      • 주의할 점은 단위가 KB라는 것이다.
      • 설정을 할 때 값을 0으로 설정하면 무한대
      • 쿼터 확인
        quota [옵션][사용자 계정 및 그룹]
        옵션은 u와 g
profile
열심히 달리는 개발자

0개의 댓글