[리눅스마스터 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/useradd
의 EXPIRE 필드를 따른다.-f, —inactive - 패스워드 만료일 이후 유효기간을 설정한다.
- 1 이상의 숫자면 해당 일수만큼 패스워드가 유효하다.
- 0 이면 만료되자마자 패스워드가 잠긴다.
- -1이면 해당 기능을 사용하지 않는다.
- 설정하지 않으면/etc/default/useradd
의 INACTIVE 값을 따른다.-g, —gid GROUP - 사용자 그룹을 설정한다. 이미 존재하는 그룹이어야 한다.
- 설정하지 않으면/etc/login.defs
의USERGROUPS_ENAB
변수가 yes이면 사용자 이름과 동일 그룹에 설정한다.
- no이면/etc/default/useradd
의 GROUP을 지정한다.-G, —groups - 기본 그룹 외에 추가 그룹을 설정할 때 사용한다.
- .을 통해 여러 그룹을 지정할 수 있다.- k, —skel SLEL_DIR -m
옵션을 통해 홈 디렉터리를 생성할 때 복사할 기본 파일을 지정한다.-m, —create-home - 홈 디렉터리를 지정할 때 사용하고, 디렉터리가 없으면 생성한다.
--k
옵션과 사용해서 홈 디렉터리 생성 시 복사할 기본 파일 경로를 지정한다.
- 이 옵션을 사용하지 않고,/etc/login.defs
에CREATE_HOME
변수도 지정되어 있지 않으면 홈 디렉터리를 생성하지 않는다.-M CREATE_HOME
이 설정되어 있더라도 홈 디렉터리를 생성하지 않는다.-N, —no-user-group - 사용자와 동일 이름으로 그룹을 생성하지 않는다.
- 그러나-g
옵션이나/etc/default/useradd
의 GROUP 변수에 지정된 그룹으로 사용자가 추가될 수 있다.- p, —password PASWORD - 시스템 계정을 생성한다.
- 사용자에게 패스워드 노출이 가능하므로 사용을 권장하지 않는다.-r, —system - 시스템 계정을 생성한다.
--m
옵선을 사용하지 않는 한 홈 디렉터리를 생성하지 않는다..-s, —shell SHELL - 사용자가 사용할 셸을 지정한다.
- 지정하지 않으면/etc/default/useradd
의 SHELL 변수를 사용한다.-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
에 잘못된 내용이 있는지 점검