[리눅스마스터 1급] 이기적 이론서 4회차 정리 - 사용자 관리

🏁 이기적 이론서 학습 범위

  • PART 01 리눅스 실무적 이해
    • CHAPTER 02 네트워크의 이해 (SECTION 01 사용자 관리)

사용자 관리

텍스트 관련 명령어

  • cat
    • 텍스트 파일의 내용을 보거나, 다른 새로운 파일로 복사하거나, 기존의 텍스트 파일과 합친다.
    • 형식

        cat [option] file
      
    • 옵션

      옵션설명
      -b, —number-nonblank빈 줄을 제외하고 행 번호를 붙여준다.
      -n, —number모든 줄에 행 번호를 붙인다.
      -E, —show-ends각 줄의 끝에 ‘$’를 표시한다.
      -T, —show-tabs탭 문자를 ‘^’로 표시한다.
      -v, —show-nonprinting인쇄 불가한 문자도 표시한다.
      -A, —show-all-vET 명령어와 동일하다.
      -s, —squeeze-blank반복되는 빈 줄은 무시한다.
    • 예제

        # 파일을 읽어서 화면에 출력
        $ cat readme.txt
        OR
        $ cat < readme.txt
              
        $ cat readme.txt readme2.txt # 두 파일을 모두 화면에 출력
              
        $ cat readme.txt > newreadme.txt # readme를 읽어서 newreadme를 생성, 이미 존재한다면 덮어씀
              
        $ cat readme.txt >> another-readme.txt # readme를 읽어서 another-readme의 뒷부분에 붙임. 존재하지 않으면 생성
      
  • head
    • 지정한 파일의 앞 부분을 출력한다.
    • 옵션을 지정하지 않으면 첫 10줄을 출력한다.
    • 형식

        head [option] file
      
    • 옵션

      옵션설명
      -n, —lines- 출력할 줄 수를 지정한다.
      - 숫자 앞에 ‘-’를 붙이면 모두 출력하되, 지정한 수만큼 마지막에 출력하지 않는다.
      -c, —byte- 출력한 바이트 수를 지정한다.
      - 숫자 앞에 ‘-’를 붙이면 모두 출력하되, 지정한 바이트 수만큼 마지막에 출력하지 않는다.
    • 예제

        $ head readme.txt # readme.txt를 읽어 처음 10줄만 보여줌(기본값)
              
        # readme.txt를 읽어 처음 5줄만 보여줌
        $ head -n 5 readme.txt
        OR
        $ head -5 readme.txt
              
        # readme.txt를 읽어 마지막 5줄을 제외하고 모두 출력
        $ head -n -5 readme.txt
      
  • tail
    • 지정한 파일의 끝 부분을 출력한다.
    • 기본값은 10줄만 출력한다.
    • 로그 파일이나 실시간 이벤트 확인 시 최근 정보를 확인할 때 유용하다.
    • 형식

        tail [option] file
      
    • 옵션

      옵션설명
      -n, —lines파일의 마지막에서 지정한 줄만큼 출력한다.
      -c, —bytes파일의 마지막에서 지정한 바이트 수만큼 출력한다.
      -f, —follow새로운 데이터가 들어올 때까지 모니터링한다. 데이터가 추가되면 출력을 반복한다.
    • 예제

        $ tail readme.txt # readme의 마지막 10줄 출력
              
        $ tail -n 5 readme.txt # readme의 마지막 5줄 출력
              
        $ tail -f readme.txt # readme의 마지막 10줄 출력하고 새로운 줄이 추가되기를 모니터링
      
    • 로그 모니터링
      • tail 을 사용하여 특정 IP에 대한 로그가 발생하는지 모니터링한다.
        # access.log 파일의 갱신을 모니터링하다가 192.168.100.100 IP 주소에 대한 로그 추가시 해당 내용을 출력한다.
        $ tail -f access.log | grep 192.168.100.100 
      
  • more
    • 텍스트 파일의 내용이 많을 때 한 페이지씩 보여준다.
    • 형식

        more [option] file
      
    • 옵션

      옵션설명
      -num스크린에 한 번에 보여줄 줄 수를 설정한다.
    • 예제

        # /etc/passwd 파일을 읽어서 화면에 출력
        $ more /etc/passwd
              
        # /etc/passwd 파일을 읽어서 한 화면에 10줄씩 출력
        $ more -10 /etc/passwd
              
        # /etc/passwd 파일을 읽어서 한 화면씩 출력
        $ cat /etc/passwd | more
      
  • less
    • 텍스트의 파일 내용을 페이지 단위로 보여준다.
    • 프로그램 시작 전 텍스트 파일을 모두 읽어 메모리에 올리지 않아 프로그램의 시작이 빠르다.
    • 커서 키를 사용해 상하좌우 화면 이동이 가능하다.
    • vi 에서 사용하는 익숙한 명령어도 사용 가능하다.
    • 형식

        less [option] file
      
    • 옵션

      옵션설명
      -c, —clear-screen화면을 지우고 최상단부터 결과를 출력한다.
      -s, —squeeze-blank-lines연속된 빈 줄을 합쳐 하나의 빈 줄로 만든다.
      -e파일 끝에서 한 번 더 파일 끝으로 이동하면 자동으로 프로그램이 종료된다. 기본 동작은 ‘q’를 입력해야 종료된다.
      -N각 줄마다 행 번호를 함께 출력한다.
    • 예제

        $ less /var/log/yum.log # 지정한 파일을 한 페이지씩 출력
              
        $ less -N /var/log/yum.log # 지정한 파일을 각 줄마다 행 번호를 붙여 한페이지씩 출력
              
        $ less +80 /var/log/yum.og # 지정한 파일의 80줄부터 한 페이지씩 출력
      
  • grep
    • 텍스트 파일을 한 줄씩 읽어서 지정한 패턴과 일치하는 문자열을 보여준다.
    • 형식

        grep [option] pattern file ...
      
    • 옵션은 너무 많아 생략..
    • 예제

        # /etc/passwd에서 francis 문자열을 찾는다.
        $ grep francis /etc/passwd
        OR
        $ cat /etc/passwd | grep francis # cat 명령어와 파이프를 통해 grep에게 파일 내용을 보내 패턴을 찾는다.
              
        # 루트의 www 디렉터리 이하의 모든 파일에서 francis 문자열을 찾는다.
        $ grep -r francis /www/
              
        # 지정한 파일에서 francis와 정확히 일치하는 단어가 있는 경우 출력한다.
        $ grep -w francis /etc/passwd
              
        # /etc/passwd에 francis와 일치하는 줄이 몇 줄인지 출력한다.
        $ grep -c francis /etc/passwd
              
        # /etc/ 디렉터리에 지정한 패턴과 일치하는 파일의 이름을 모두 출력한다.
        $ sudo grep -lr francis /etc
              
        # 정규표현식으로 패턴을 지정한다.
        $ grep "[a-z]" readme # 소문자 a~z를 포함하는 줄을 모두 출력한다.
      
  • wc
    • 지정한 파일에 대해 단어, 개행문자, 문자 개수 등을 셀 수 있다.
    • 형식

        wc [option] file ...
      
    • 옵션

      옵션설명
      -l, —lines줄 수를 센다.
      -w, —words단어의 개수를 센다.
      -c, —bytes바이트 수를 센다.
      -L, —max-line-length가장 긴 줄의 길이를 출력한다.
    • 예제

        $ wc /etc/passwd # 36줄이고 55개의 단어 1706개의 문자로 구성된다.
        36  55 1706 /etc/passwd
              
        $ wc -l /etc/passwd # 줄수를 센다.
              
        $ wc -L /etc/passwd # 가장 긴 줄을 센다.
      
  • sort
    • 텍스트 파일을 한 줄씩 읽어서 정렬한다.
    • 형식

        sort [option] file
      
    • 옵션 생략
    • 예제

        $ sort -r person.txt # person을 정렬하고 결과를 반대로 출력
              
        $ sort -r person.txt -o person_sort.txt # person을 정렬하고 person_sort에 저장
              
        $ sort -k 3 person.txt # person.txt를 3번째 필드 기준으로 정렬
              
        $ sort -k 3.3 person.txt # person을 3번째 필드 3번째 글자 이후를 기준으로 정렬
              
        $ sort -k 2.1.2.2 person.txt # 2번째 필드의 첫 번째, 두 번째 글자를 기준으로 정렬
      
  • cut
    • 텍스트 파일을 한 줄 또는 여러 줄을 잘라낼 수 있다.
    • 형식

        cut [option] file ...
      
    • 옵션

      옵션설명
      -c, —characters각 줄의 문자를 선택한다.
      -f, —fields각 줄의 필드를 선택한다.
      -d, —delimiter필드 구분자를 변경한다. 기본값은 TAB이다.
    • 예제

        $ cat > scores.txt # scores를 생성하여 3번째 필드를 출력
              
        $ cut -f 1-2 scores.txt # 1, 2번째 필드를 출력
              
        $ cut -c 1-3 scores.txt # 각 줄에서 3개 글자만 출력
      
  • split
    • 파일을 고정 크기의 여러 파일로 분할한다.
    • 형식

        split [option] file [file_name]
      
    • 옵션

      옵션설명
      -b, —bytes각 파일당 저장할 크기를 지정한다.
      -C, —line-bytes각 파일당 행의 크기를 주어진 값에 맞춰서 쓴다.
      -l, —lines각 파일당 줄 수를 지정한다.
    • 예제

        $ split -l 10 /etc/passwd # /etc/passwd를 10줄씩 나눠 파일 분리
              
        # /etc/passwd를 1024바이트 단위로 분리해 newpasswd로 시작하는 이름으로 저장
        $ split -b 1024 /etc/passwd newpasswd 
      

☑️ 루트(root) 계정 관리

루트 계정

  • 시스템 접근에 대한 제한을 받지 않고 완전한 권한을 갖는 사용자
  • 슈퍼유저라고 불린다.
  • 제한없이 어떤 명령어든 사용할 수 있다.
  • 해당 시스템의 대표 관리자가 루트 계정을 보유한다.
  • 루트 계정의 UID는 0이다.

권한 획득 방법

  • root 사용자로 로그인
    • root의 패스워드를 설정해 root로 로그인할 수 있다.

        $ sudo passwd root
      
    • su 를 사용해 root 사용자로 전환하여 로그인할 수 있다.
    • su — 를 사용해 root 사용자의 환경변수를 로드하며 로그인할 수 있다.


        $ su
        OR
        $ su -
      
  • root 사용자로 임시 전환
    • 일반사용자는 필요시 root 사용자의 권한으로 실행할 수 있다.
    • 명령어 실행 시 비밀번호를 입력해야 하며, 해당 명령어가 종료되면 권한도 사라진다.
    • sudo 를 통해 root 권한으로 명령어를 실행한다.

        $ sudo vi /etc/passwd
      
  • 현재 사용자를 root 사용자로 지정
    • /etc/passwd 파일에 사용자의 UID를 0으로 입력하면 root 권한을 갖게 된다.

루트 계정 관리 방안

  • 시스템 초기 환경설정 시에만 root 사용자를 이용하고, SSH를 통해 root 사용자 로그인이 되지 않도록 한다.
  • /etc/passwd 를 조사해 UID가 0인 사용자가 없도록 한다.
  • PAM(Pluggable Authentication Modules) 를 통해 root 사용자로 로그인할 수 없어야 한다.
  • 환경변수 TMOUT으로 **자동 로그아웃을 설정한다.
  • 필요시 sudo 명령을 사용해 명령어를 실행하도록 한다.

루트 패스워드 분실 대응

# 1. GRUB2 부트 메뉴에서 환경설정을 변경하기 위해 'e'를 입력한다.
# 2. linux16의 옵션 중 "ro" 를 "rw"로 변경하고, "init=/sysroot/bin/sh"를 추가로 입력한다.
# 3. Ctrl + X를 눌러 단일 사용자 모드로 부팅을 시도한다.

:/# chroot /sysroot # 4. 시스템에 접근한다.

:/# passwd root # 5. root의 패스워드를 변경한다.

:/# touch /.autorelabel # 6. selinux 정보를 갱신한다.

:/# exit # 7. chroot를 종료한다.

:/# reboot # 8. 시스템을 재부팅한다.
  • ssh 서비스의 루트 로그인 막기

      # 1. sshd_config 파일을 root 권한으로 수행한다.
      $ sudo vi /etc/ssh/sshd_config
        
      # 2. 파일 내용 중 PermitRootLogin 항목을 no로 설정한다.
      # 주석 처리시, 주석을 해제한다.
        
      # 3. sshd 서비스를 재시작한다.
      $ sudo service restart sshd
      OR
      $ sudo servcie sshd restart
    

☑️ 시스템 계정 관리

시스템 계정

  • 메일 관리, SSH 연결 등 시스템의 특정 서비스에 대한 권한을 행사할 수 있다.
  • ex. bin, daemon, adm, lp, sync, shutdown, halt, mail 등
  • /etc/passwd 파일에서 UID가 1~499를 갖는 계정이다.
    • 기본으로 설정되는 시스템 계정은 보통 0~999의 범위를 갖는다.
    • 레드햇 계열인 경우 100~499
    • 데비안 계열인 경우 100~999

시스템 계정 관리 방안

  • 서비스별로 권한을 분리해 시스템 계정을 생성한다.

☑️ 사용자 계정 관리

사용자 계정

  • 시스템 파일과 디렉터리에 제한적으로 접근하도록 설정하여 시스템을 보호한다.
  • 그룹에 속할 수 있다.
  • 리눅스는 그룹 단위로 파일 접근 권한설정과 프로세스 관리를 수행할 수 있다.
  • 레드햇 계열 6 버전은 500 이상, 레드햇 계열 7 이후의 버전과 오픈수세, 데비안은 1000 이상의 UID를 갖는다.
  • 일반 사용자 계정의 UID 범위는 /etc/login.defs 에 정의되어 있다.

      $ vi /etc/login.defs
    

사용자 생성하기

  • useradd

      useradd [options] username
    
    • 옵션
    옵션설명
    -d, —home- 홈 디렉터리를 지정한다.
    - 기본값은 기본 경로에 사용자 이름으로 생성한다.
    - 지정한 홈 디렉터리의 상위 경로가 존재해야 한다.
    -D, —defaults기본값을 보거나 설정한다.
    -e, —expiredate- YYYY-MM-DD 형식으로 계정 만기일을 지정한다.
    - 지정 날짜가 지나면 계정은 비활성화된다.
    - 지정되지 않으면 만기일은 없다.
    - 지정하지 않으면 /etc/default/useraddEXPIRE 필드를 따른다.
    -f, —inactive- 패스워드 만료일 이후 유효기간을 설정한다.
    - 1 이상의 숫자면 해당 일수만큼 패스워드가 유효하다.
    - 0 이면 만료되자마자 패스워드가 잠긴다.
    - -1이면 해당 기능을 사용하지 않는다.
    - 설정하지 않으면 /etc/default/useraddINACTIVE 값을 따른다.
    -g, —gid GROUP- 사용자 그룹을 설정한다. 이미 존재하는 그룹이어야 한다.
    - 설정하지 않으면 /etc/login.defsUSERGROUPS_ENAB 변수가 yes이면 사용자 이름과 동일 그룹에 설정한다.
    - no이면 /etc/default/useraddGROUP을 지정한다.
    -G, —groups- 기본 그룹 외에 추가 그룹을 설정할 때 사용한다.
    - .을 통해 여러 그룹을 지정할 수 있다.
    - k, —skel SLEL_DIR-m 옵션을 통해 홈 디렉터리를 생성할 때 복사할 기본 파일을 지정한다.
    -m, —create-home- 홈 디렉터리를 지정할 때 사용하고, 디렉터리가 없으면 생성한다.
    - -k 옵션과 사용해서 홈 디렉터리 생성 시 복사할 기본 파일 경로를 지정한다.
    - 이 옵션을 사용하지 않고, /etc/login.defsCREATE_HOME 변수도 지정되어 있지 않으면 홈 디렉터리를 생성하지 않는다.
    -MCREATE_HOME이 설정되어 있더라도 홈 디렉터리를 생성하지 않는다.
    -N, —no-user-group- 사용자와 동일 이름으로 그룹을 생성하지 않는다.
    - 그러나 -g 옵션이나 /etc/default/useraddGROUP 변수에 지정된 그룹으로 사용자가 추가될 수 있다.
    - p, —password PASWORD- 시스템 계정을 생성한다.
    - 사용자에게 패스워드 노출이 가능하므로 사용을 권장하지 않는다.
    -r, —system- 시스템 계정을 생성한다.
    - -m 옵선을 사용하지 않는 한 홈 디렉터리를 생성하지 않는다..
    -s, —shell SHELL- 사용자가 사용할 셸을 지정한다.
    - 지정하지 않으면 /etc/default/useraddSHELL 변수를 사용한다.
    -u, —uid UID- 사용자의 유일한 UID 값을 설정한다.
    - 값은 음수이면 안되고, UID_MIN보다 크고 UIX_MAX보다는 작아야 한다.
  • 예제

      $ useradd blue # 사용자 생성
        
      $ useradd -d /home/color/blue # 홈디렉터리를 지정하여 생성 (/home/color 경로는 미리 생성되어 있어야 한다.)
        
      $ useradd -u 999 -g color blue # UID와 그룹을 지정하여 사용자 생성 (color 그룹은 미리 생성되어 있어야 한다.)
        
      $ useradd -e 2019-12-25 blue # 사용자 계정 만료일을 지정하면서 생성
        
      $ sudo useradd -D # 사용자 생성 시 기본 옵션 열람
    
  • useradd vs adduser

    • 레드햇 계열에서는 차이가 없지만, Ubuntu에서는 차이가 존재한다.
    • useradd 사용 시, -m 옵션으로 홈 디렉터리를 지정하고 passwd 로 패스워드 지정이 필요하다.
    • adduser 사용 시, 대화식으로 사용자 정보를 입력해 생성할 수 있다.

passwd로 패스워드 설정하기

  • useradd로 사용자 생성 시, 패스워드를 설정하기 전까지 로그인할 수 없다.
  • passwd를 사용하여 패스워드를 설정해야 한다.
  • 패스워드 입력 후 사용자 패스워드를 삭제하거나 변경 기간을 설정하는 등의 관리 목적으로 사용 가능하다.
  • 형식

      passwd [options][username]
    
  • 예시

      $ sudo passwd blue # root 사용자만 사용자의 패스워드를 설정할 수 있다.
        
      $ passwd # 현재 사용자의 패스워드 변경
        
      $ sudo passwd -e test # 지정한 사용자의 패스워드를 만료한다. 다음 로그인 시 패스워드를 재지정해야 한다.
        
      $ sudo passwd -S blue # 지정한 사용자의 패스워드 상태 출력
        
      $ sudo passwd -l blue # 지정한 사용자의 패스워드에 락을 건다. 관리자가 -u 옵션을 사용해 언락할 때까지 로그인할 수 없다.
        
      $ sudo passwd -d blue # 지정한 사용자의 패스워드를 삭제한다. 아이디만 입력해도 로그인 할 수 잇다.
        
      # 패스워드를 변경한 후 7일 간 다시 변경할 수 없다. 365일간 사용할 수 있고, 5일전부터 패스워드 변경 경고를 한다. 패스워드 만료 후 10일의 유예기간이 있다. 
      $ sudo passwd -n 7 -x 365 -w 5 -i 10 blue 
    

su로 사용자 전환하기

  • substitute user or switch user의 약자이다.
  • 현재 로그인 세션에서 다른 사용자의 권한으로 실행하고자 할 때 사용한다.
  • 보통 root 권한이 필요한 경우 일반 사용자로 로그인 → su 로 root 사용자로 전환해 필요한 작업 수행 → exit 로 원래 사용자로 돌아온다.
  • 형식

      su [options] username
    
  • 예제

      $ su # root 사용자로 전환
        
      # root 사용자의 로그인 환경 설정 후 root 사용자로 전환
      $ su -
      OR
      $ su -l
      OR
      $ su -login
        
      # 사용자 전환을 하지 않고 일시적으로 지정한 명령을 실행
      $ su root -c "vi /etc/passwd"
        
      # 지정한 사용자로 전환한다. 
      # root 사용자의 경우 패스워드 입력이 필요없으나, 일반 사용자는 입력해야 한다.
      $ su - blue
    

usermod로 사용자 설정 변경하기

  • 사용자 셸, 홈 디렉터리, 그룹, UID, GID 등 사용자 설정을 변경한다.
  • 형식

      usermod [options] username
    
  • 예시

      $ usermod -d /home/whiteblue blue # 사용자의 홈 디렉터리를 변경한다. (-m 사용 시 내용 복사함)
        
      $ usermo -g photo blue # blue 사용자 그룹을 photo로 변경
    

userdel로 사용자 계정 삭제하기

  • 사용자 계정을 삭제한다.
  • 형식

      userdel [option] username
    
  • 예제

      $ userdel blue # 사용자 계정 삭제 (홈 디렉토리 및 그 안의 파일은 존재)
        
      $ userdel -r blue # -r로 사용자 계정 삭제. (홈 디렉토리 및 그 안의 파일도 모두 삭제)
        
      $ userdel -f blue # -f로 사용자 계정 삭제. 사용자가 로그인 되어있더러도 강제로 삭제.
    

chage로 패스워드 관리하기

  • 사용자의 패스워드 만료 정보를 설정한다.
  • 형식

      chage [options] username
    
  • 예제

      $ sudo chage -l test # 지정한 사용자의 패스워드 만료 정보를 보여준다.
        
      # test 계정의 패스워드 최소 사용 날짜는 7일이고, 최대 사용 날짜는 365일이다.
      # 만료 5일 전부터 경고 메시지를 보여주고, 만료 후 3일까지는 비활성화되지 않는다.
      $ sudo chage -m 7 -M 365 -W 5 -l 3 test
        
      $ sudo chage -E 2019-12-24 test # 만료일을 2019-12-24로 지정
        
      $ sudo chage -d 10000 test # 패스워드 변경일을 10000으로 설정
    

☑️ 그룹 계정 관리

그룹(group)

  • 그룹 : 사용자를 하나로 묶어 관리 가능하게 하는 메커니즘
  • 모든 사용자는 그룹에 속하며, 사용자 식별자인 UID와 그룹 식별자인 GID를 갖는다.
  • 각 그룹에게 보안 설정, 접근 설정, 권한 등을 주고 일괄적으로 그룹의 사용자에게 적용할 수 있어 편하다.
    • 파일, 디렉터리, 장치에 대한 접근도 그룹 단위로 설정 가능하다.
  • 레드햇 계열은 사용자 생성 시, 사용자 이름과 동일한 그룹을 생성하여 포함한다.
    • 시스템 관리자가 의도치 않게 사용자를 기본 그룹에 추가하여 기본 권한을 갖는 것을 방지하기 위함이다.

groupadd로 그룹 생성

  • 새로운 그룹 생성을 위한 명령어
  • GID값을 지정해 특정 값으로 설정할 수 있다.
  • 형식

      grooupadd [options] groupname
    
  • 예제

      $ sudo groupadd colors # 그룹 생성
        
      $ sudo groupadd -g 550 colors # GID를 지정하여 그룹 생성
    

groupmod로 그룹 정보 변경하기

  • 그룹 관련 설정 파일인 /etc/group, /etc/gshadow, /etc/passwd에서 그룹 관련 속성을 변경한다.
  • 형식

      groupmod [options] groupname
    
  • 예제

      $ sudo groupmod -n newcolors colors # colors 그룹을 newcolors 그룹으로 이름을 변경
        
      $ sudo groupmod -g 567 colors # colors 그룹의 GID를 567로 변경. (정수면서 유일한 값이어야 함)
    

groupdel로 그룹 삭제하기

  • 지정한 그룹을 삭제한다.
  • 주 그룹에 존재하는 사용자는 없어야 하고, 있다면 사용자를 삭제한 후 그룹을 삭제할 수 있다.
    • 파일 중 그룹이 설정된 파일이 없어야 한다.
  • 자동으로 그룹 설정되어 있는 파일은 체크하지 않고, 사용자가 직접 찾아 다른 그룹으로 설정해야 한다.
  • 형식

      groupdel [options] groupname
    
  • 예제

      $ sudo groupdel colors # 그룹 삭제
    

gpasswd로 그룹 패스워드 변경하기

  • 그룹의 패스워드를 변경한다.
  • /etc/group/etc/gshadow 에 그룹 패스워드 정보가 저장되어 있다.
  • 형식

      gpasswd [options] groupname
    
  • 예제

      $ gpasswd -a blue colors # colors 그룹에 blue 사용자를 추가
        
      $ gpasswd -d blue colors # colors 그룹에서 blue 사용자를 삭제
        
      $ gpasswd colors # colors 그룹에 패스워드 지정
        
      $ gpasswd -r colors # colors 그룹의 패스워드를 제거. 패스워드는 빈 값이 입력된다.
        
      $ gpasswd -R colors # colors 그룹의 접근 제한. 패스워드는 "!" 값이 입력된다.
        
      $ gpasswd -A blue colors # colors 그룹의 관리자로 blue를 설정
        
      $ gpasswd -M red, blue colors # colors 그룹의 멤버로 red, blue를 설정
    

newgrp으로 그룹 참여하기

  • 현재 로그인되어 있는 세션의 GID를 변경한다.
    • ‘-’이 인자에 포함되어 있으면 사용자 환경이 초기화된다.
    • 포함되어 있지 않다면 현재 로그인 환경을 따른다.
    • newgrp은 지정한 그룹의 GID로 현재 GID를 변경하며, 지정하지 않는다면 /etc/passwd 에 명시된 그룹으로 변경한다.
  • root 사용자와 소속된 일반 사용자의 경우 newgrp 사용 시 패스워드 입력 없이 가능하다.
    • 그룹 패스워드 존재 시, 그룹에 속하지 않는 사용자의 경우 패스워드 입력이 필요하다.
  • 형식

      newgrp groupname
    
  • 예제

      $ newgrp colors # 현재 그룹 대신 colors 그룹으로 전환
    

☑️ 사용자 환경설정 파일

  • 사용자 계정과 그룹 정보는 /etc 디렉터리 이하에 존재하낟.
  • useradd 로 사용자 추가 시 기본 설정이나 홈 디렉터리 구성이 필요한 정보를 담고 있는 설정 파일도 존재한다.

/etc/passwd

  • 로그인 시 필요한 UID, GID, 홈 디렉터리, 셸 등 사용자 계정 정보를 포함한다.
  • 모든 사용자에 대해 읽기 권한을 가졌다.
  • 루트 사용자나 루트 권한을 획득한 사용자만 쓰기 가능하다.

      $ vi /etc/passwd
    
  • 파일 구조

      ftp : x : 14 : 50 : FTP User : /var/ftp : /sbin/nologin
      [1]  [2]  [3]  [4]   [5]          [6]           [7]
    
    • [1] 사용자명: 로그인할 때 사용하며, 1에서 32의 길이를 가진다.
    • [2] 비밀번호: x는 암호화된 패스워드를 /etc/shadow에 보관한 것. 변경하기 위해서는 passwd를 사용해야 한다.
    • [3] UID: 사용자 ID
    • [4] GID: /etc/group 파일에 보관된 주 그룹 ID
    • [5] 사용자 설명: 사용자에 대한 추가 설명을 할 수 있는 필드
    • [6] 홈 디렉터리: 사용자에게 할당된 기본 디렉터리이며 절대 경로로 설정한다.
    • [7] 셸: 셸의 위치를 절대 경로로 지정한다.

/etc/shadow

  • 사용자 패스워드를 해시 알고리즘으로 암호화한 값과 패스워드와 관련된 여러 속성을 담고 있다.
  • /etc/passwd 파일의 각 사용자들에 대한 암호 정보를 담고 있다.
  • 파일 구조

      francis : $6$KtSH4cZAWFPX60$AddoPJ4TUiAVziJnPauQT : 18119 : 
         [1]                      [2]                      [3] 
       0 : 99999 : 7 : ____ : _____
      [4]   [5]    [6]  [7]    [8]
    
    • [1] 사용자명: 로그인 사용자 이름
    • [2] 패스워드: 암호화된 사용자 패스워드. 형식은 $id$salt$hashed 이다.
      • $id : 암호화 알고리즘
      • $salt : 암호화 해독을 어렵게 하기 위한 솔트를 의미
      • $hashed : 실제 사용자 패스워드의 해시값
    • [3] 마지막 변경일: 마지막으로 패스워드를 변경한 날짜를 1970년 1월 1일 이후 계산한 값이다.
      • ex. 1이라면 마지막 패스워드 변경일은 1970년 1월 2일이다.
    • [4] 패스워드 최소 사용일: 변경 후 최소 유지해야 하는 일수이다.
    • [5] 패스워드 최대 사용일: 패스워드가 유효한 최대 일수이다.
      • 9999이면 패스워드를 변경할 필요는 없다.
    • [6] 패스워드 만료 경고일: 만료되어 사용자에게 패스되어 변경하라고 경고하는 일수이다.
    • [7] 유예기간: 패스워드 만료 후 계정이 비활성화될 때까지의 일수이다.
    • [8] 만료일: 사용자 계정이 비활성화 날짜를 1970년 1월 1일 이후로 계산한 값이다.

/etc/default/useradd

  • useradd로 사용자 생성 시 사용되는 기본 설정 값이 저장된 환경설정 파일
  • /etc/default/useradd 파일을 직접 열어보거나, useradd-D 옵션을 사용해 파일의 내용을 확인할 수 있다.

      $ sudo vi /etc/default/useradd
      OR
      $ useradd -D
    

/etc/login.defs

  • 쉐도우 패스워드 스위트를 위한 읽기 전용 환경설정 파일
  • 패스워드 최대 사용일 (PASS_MAX_DAYS), 패스워드 최소 사용일(PASS_MIN_DAYS), 패스워드 만료 경고일(PASS_WARN_AGE) 등을 설정한다.
  • 한 줄에 하나의 환경설정을 기재할 수 있다.
  • ‘이름’과 ‘값’의 쌍으로 구성되고 공백으로 구분된다.

      $ cat /etc/login.defs
    

/etc/group

  • 그룹에 속한 사용자를 관리하는 파일
  • 그룹에는 여러 사용자가 속할 수 있고, 한 사용자는 여러 그룹에 속할 수 있다.
  • /etc/passwd 에 기재된 GID는 사용자의 주 그룹이고, /etc/group은 사용자의 보조 그룹에 대한 정보가 포함되어 있다.
  • 구조

      mail : x : 12 : mal.opstfix
       [1]  [2]  [3]      [4] 
    
    • [1] 그룹명: 그룹 이름
    • [2] 패스워드: 그룹의 암호화된 패스워드이다. ‘x’는 /etc/gshadow 를 사용한다.
    • [3] GID: 그룹 식별을 위한 유일한 숫자이다.
    • [4] 멤버 목록: 그룹에 속한 사용자

/etc/gshadow

  • 그룹의 암호화된 비밀번호 정보를 포함한다.
  • 일반 사용자는 읽을 수 없고, 루트 권한 사용자만 접근 가능하다.
  • 구조

      test : $6$KtSH4cZAWFPX60$AddoPJ4TUiAVziJnPauQT : test : francis
       [1]                   [2]                        [3]    [4] 
    
    • [1] 그룹명: 그룹 이름
    • [2] 패스워드: 그룹의 암호화된 패스워드. /etc/passwd 와 동일하게 $id$salt$hased 의 형식을 갖는다.
    • [3] 그룹 관리자: 여러 사용자가 관리자가 될 수 있고, 관리자는 그룹의 패스워드를 변경 또는 그룹 멤버를 관리한다.
    • [4] 멤버 목록: 그룹에 속한 사용자이며, 다수가 속할 수 있다.

☑️ 사용자 및 그룹 정보 관련 명령어

users

  • 현재 호스트에 로그인되어 있는 모든 사용자를 출력한다.
  • 예제

      $ users # 현재 로그인한 사용자를 출력한다.
    

who

  • 현재 호스트에 로그인되어 있는 모든 사용자의 정보를 출력한다.
  • 터미널 종류, 로그인 시각 등이 출력된다.
  • 형식

      who [options]
    
  • 예제

      $ who # 현재 로그인한 모든 사용자 정보 출력
        
      $ who am i # 현재 로그인한 사용자 정보 출력 (-m 옵션을 사용한 것과 동일)
        
      $ who -aH # 사용자에 대한 모든 정보를 각 컬럼에 헤더와 함께 출력
    

whoami

  • 현재 로그인한 사용자의 사용자명을 출력한다.
  • id 명령어에 -un 을 사용한 것과 동일하다.
  • 예제

      $ whoami # 현재 로그인한 사용자 출력
    

w

  • 현재 로그인한 사용자가 어떤 시스템에서 로그인했는지, 어떤 프로세스를 실행중인지 출력한다.
  • 형식

      w [options] [user]
    
  • 예제

      $ w
        
      18:25:10 up 5 days, 13:32, 2 users, load average: 0.00. 0.00. 0.00 # 현재 시각은 818시 25분 10초이며, 부팅한 지 5일 13시 32분이 경과되었다. 로그인한 사용자는 현재 2명이다.
        
      $ w francis # 로그인 사용자 중 francis에 대한 정보 출력
    

logname

  • 현재 로그인한 사용자의 로그인 이름을 출력한다.
  • 예제

      $ logname # 현재 로그인 사용자는 francis
      francis
    

id

  • 지정한 사용자의 사용자 정보와 그룹 정보를 출력하거나 현재 사용자의 정보를 출력한다.
  • 형식

      id [options][username]
    
  • 예제

      $ id # 현재 사용자의 UID와 GID 등의 정보 출력
        
      $ id -Gn francis # francis가 속한 그룹의 GID 대신 그룹 이름으로 출력
      francis test
    

groups

  • 특정 사용자나 현재 로그인한 사용자가 속한 그룹을 표시한다.
  • 예제

      $ groups # 현재 로그인한 사용자는 francis, test 그룹에 속한다.
      francis test
        	
      $ groups francis # francis 사용자는 francis, test 그룹에 속해있다.
      francis : francis tes 
    

lslogins

  • wtmp 및 btmp 로그를 바탕으로 시스템 전체 사용자를 출력한다.
  • /etc/shadow/etc/password 파일을 참조하라.
  • 형식

      lslogins [options]
    
  • 예제

      $ lslogins # 모든 사용자 정보를 출력
        
      $ lslogins -u # 시스템 사용자를 제외한 사용자 정보 출력
    

pwconv, pwunconv, grpconv, grpunconv

  • pwconv : /etc/passwd 파일을 기반으로 /etc/shadow 파일을 생성
  • pwunconv : /etc/passwd/etc/shadow를 기반으로 /etc/passwd를 갱신하고 /etc/shadow를 삭제
  • grpconv : /etc/group 파일을 기반으로 /etc/gshadow 파일을 생성
  • grpunconv : /etc/group/etc/gshadow를 기반으로 /etc/group을 갱신하고 /etc/gshadow를 삭제
  • 예제

      $ sudo cat /etc/asswd | grep francis
      francis:x:500:500:francis:/home/francis:/bin/bash
        
      $ sudo pwunconv # /etc/shadow는 지워지고, /etc/passwd의 패스워드 항목에 암호화된 패스워드가 설정된다.
    

pwck, grpck

  • pwck : /etc/passwd에 잘못된 내용이 있는지 점검
  • grpck: /etc/group에 잘못된 내용이 있는지 점검

© 2021. All rights reserved.

yaejinkong의 블로그