📖 사용자 계정 관련 파일
📌 사용자 관리
리눅스는 다중 사용자 시스템이므로 사용자를 구별하고 사용자에게 적절한 자원을 할당해주는 방법이 필요하다.
사용자 계정은 사용자가 시스템에 접근할 수 있는 유일한 방법이다.
📌 etc/passwd 파일
사용자 계정 정보가 저장된 기본 파일이다.
한 행에 사용자 한 명에 대한 정보가 기록되며, 콜론( : )으로 구분되는 일곱개의 항목으로 구성

- 로그인 ID : 사용자 계정의 이름, 32자를 넘을수 없으나 8자로 제한하는 것이 좋다.
- x : 초기 유닉스 시스템에서 사용자 암호를 저장하던 항목, 요즘은 /etc/shadow 파일에 별도로 보관한다.
- UID : 사용자 ID 번호로 시스템이 사용자를 구별하기 위해 사용하는 번호이다.
- 0~999번과 65534 번은 시스템 사용자를 위한 UID로 예약되어 있다.
- 일반 사용자들은 UID 1000번부터 할당한다
- GID : 그룹 ID, 시스템에 등록된 그룹에 대한 정보는 /etc/group 파일에 저장
- 설명 : 사용자의 실명이나 부서명, 연락처 등 사용자에 대한 일반적인 정보가 기록된다.
- 홈 디렉터리 : 사용자 계정에 할당된 홈 디렉터리의 절대 경로를 기록한다.
- 로그인 셸 : 사용자의 로그인 셸을 지정, 우분투에서는 배시 셸(/bin/bash)을 기본 셸로 사용한다.
cat /etc/passwd

📌 /etc/shadow 파일
사용자 암호에 관한 정보를 별도로 관리하는 파일
root 계정으로만 내용을 볼 수 있다.

sudo cat /etc/shadow
- 로그인 ID : 사용자 계정 이름
- 암호(패스워드) : 실제 비밀번호가 암호화 되어 저장된다.
- 최종 변경일 : 암호가 마지막으로 변경된 날짜를 지정, 1970년 1월 1일을 기준으로 날수를 기록한다.
- MIN : MIN은 암호를 변경한 후 사용해야 하는 최소 시간
- MAX : 암호를 사용할 수 있는 최대 기간
- WARNING : 암호가 만료되기 전에 경로를 시작하는 날수
- INACTIVE : 암호가 만료된 후에도 이 항목에 지정한 날수 동안은 로그인이 가능
- EXPIRE : 사용자 계정이 만료되는 날
- Flag : 향후 사용할 목적으로 비워둔 항목
📌 /etc/login.defs 파일
사용자 계정의 설정과 관련된 기본 값을 정의
cat /etc/login.defs
✍ login.defs 파일에서 정의하는 기본 값

📌 etc/group 파일
그룹에 대한 정보가 저장된다.
✍ etc/group 파일의 구조

- 그룹 이름 : 그룹의 이름
- x : 그룹의 암호를 저장하는 곳
- 여기에 암호화된 그룹 암호를 저장하거나 /etc/gshadow파일에 그룹 암호를 저장
- GID : 그룹을 식별하는 번호
- 그룹 멤버 : 그룹에 속한 멤버들의 사용자 계정 이름이며 쉼표(,)로 사용자를 구별한다.
cat /etc/group

📌 /etc/gshadow 파일
그룹의 암호가 저장되어있다.
원래 유닉스에는 없는 파일로 리눅스에서 별도로 만든 파일이다.
✍ /etc/gshadow 파일 구조

- 그룹 이름 : 그룹의 이름
- 그룹 암호 : 암호화된 그룹의 이름
- 관리자 : 그룹의 암호나 멤버를 바꿀 수 있는 사용자 계정으로 여러 개일 경우 쉼표(,)로 구분
- 그룹 멤버 : 그룹에 속한 멤버들의 사용자 계정 이름이며 쉼표로 구분한다.
sudo cat /etc/gshadow
📖 사용자 계정 관리 명령
📌 사용자 계정 생성하기 - useradd
useradd [옵션] [로그인 ID]
- 옵션
- -u uid : UID 지정
- -o : UID 중복 허용
- -g gid : 기본 그룹의 GID 지정
- -G gid : 2차 그룹의 GID 지정
- -d 디렉터리 명 : 홈 디렉터리 지정
- -s 셸 : 기본 셸 지정
- -c 설명 : 사용자의 이름 등 부가적인 설명 지정
- -D : 기본 값을 설정하거나 출력
- -e 유효 기간 : EXPIRE 항목을 설정(YYYY-MM-DD)
- -f 비활성 일수 : INACTIVE 항목 설정
- -k 디렉터리 : 계정 생성 시 복사할 초기 파일이나 디렉터리를 설정해 놓은 디렉터리를 지정
- -m : 홈디렉터리 생성
⌨ 옵션없이 계정 생성하기
sudo useradd user2
⌨ 옵션을 지정하여 사용자 계정 생성하기
sudo useradd -s /bin/sh -m -d /home/user3 -u 2000 -g 1000 -G 3 user 3
기본 로그인 셸을 본 셸로 지정하고 UID는 2000, GID는 1000, 2차 그룹은 3으로 지정하고 홈 디렉터리를 생성하고 홈 디렉터리를 /home/user3 으로 지정
⌨ user3 계정의 암호를 설정
sudo passwd user3
📌 /etc/skel 디렉터리의 역할
사용자 계정의 홈 디렉터리에 공통으로 배포해야 할 파일을 /etc/skel 디렉터리에 파일을 만들어 놓으면 사용자 계정 생성시에 자동으로 복사한다.
ls -a /etc/skel
📌 adduser 명령으로 사용자 계정 생성하기
adduser{옵션} 로그인 ID
- 옵션
- --uid UID : UID 지정
- --gid GID : 기본 그룹의 GID 지정
- --home DIR : 홈 디렉터리 지정
- --shell 셸 : 기본 셸 지정
- --gecos 설명 : 사용자의 이름 등 부가적인 설명을 지정
⌨ adduser 명령으로 옵션 없이 사용자 계정 생성하기
sudo adduser user4
⌨ UID를 2001로 지정하여 user5계정 생성
sudo adduser --uid 2001 user5
📖 사용자 계정 정보 수정하기 - usermod
UID, GID, 홈 디렉터리, 기본 셸, 설명, 로그인 ID등 게정과 관련된 모든 정보를 수정 가능하다.
패스워드 에이징 정보 중 INACTIVE와 EXPIRE 값 지정 가능
usermod [옵션] 로그인 ID
- 옵션
- -u uid : UID 수정
- -o : UID의 중복 허용
- -g gid : 기본 그룹 수정
- -G gid : 2차 그룹 수정
- -s 셸 : 기본 셸 수정
- C 설명 : 부가 설명 수정
- -f inactive : 계정 비활성화 날짜 수정
- -e expire : 계정 만료 날짜 수정
- -l 새 로그인 이름 : 새 로그인 이름으로 계정 이름 바꿈
⌨ UID 변경 - -u옵션
sudo usermod -u 1003 user3
user3의 UID를 1003으로 변경
⌨ 로그인 ID 변경 - -l 옵션
기존의 홈 디렉터리에 있던 파일들이 자동으로 옮겨지지는 않으므로 별도로 디렉터리를 생성하고 이동해야한다.
sudo usermod -d /home/user44 -l user44 user4
grep user44 /etc/passwd
홈디렉터리를 /home/user44 로 변경하고 로그인 ID를 user44로 변경
📌 사용자 계정 삭제하기 - userdel
userdel[옵션] 로그인 ID
- 옵션
- -r : 홈 디렉터리와 메일 디렉터리 삭제
- -f : 사용자가 로그인 중이어도 강제로 삭제
⌨ 사용자 계정만 삭제하기
sudo userdel user44
사용자 계정이 삭제될 때 관련된 홈 디렉터리나 파일을 모두 삭제하는 것이 바람직 하다.
⌨ 사용자 계쩡과 홈 디렉터리 삭제하기 - -r 옵션
sudo userdel -r user3
📖 사용자 정보 관리 명령
📌 사용자 로그인 정보 확인하기 : who(중요)
현재 시스템을 사용하는 사용자의 정보를 출력한다.
who[옵션]
- 옵션
- -q : 사용자명만 출력
- -H : 출력 항목이 제목도 함께 출력
- -b : 마지막으로 재시작한 날짜와 시간 출력
- -m : 현재 사용자 계저으이 정보 출력
- -r : 현재 런레벨 출력
옵션 없이 사용하면 사용자 이름, 사용자가 접속한 단말기 번호, 로그읺나 시간, 외부 네트워크에서 접속했을 경우 외부 컴퓨터 이름이나 IP주소가 출력된다.
⌨ 각 항목의 제목을 출력 - who -H

⌨ 로그인한 사용자의 수와 게정 이름 출력 - who -q

⌨ 시스템이 마지막으로 부팅한 날짜와 시간 정보를 출력 - who -b

📌 w 명령
현재 시스템을 사용하는 사용자의 정보와 작업정보를 출력
who 명령에서 나온 출력 외에 활동에 대한 정보와 CPU 사용량, 시스템 로드 정보등이 추가로 출력된다.

📌 last (중요)
사용자의 이름과 로그인한 시간, 로그아웃한 시간, 터미널 번호나 IP 주소를 출력한다.

📌 소속 그룹 확인하기 - groups
사용자 계쩡이 속한 그룹을 출력한다.
현재 본인이 가진 권한을 알기 위해 확인해야 한다.
✍ 사용자를 지정하지 않으면?

현재 사용자 계정이 속한 그룹을 출력한다.
✍ 사용자 계정을 인수로 지정하면?

해당 사용자 계정이 속한 그룹 정보를 출력한다.
📌 passwd 명령 활용하기
사용자 계정의 암호를 수정한다,.
passwd [옵션] [사용자 계정]
- 옵션
- -l 사용자 계정 : 지정한 계정의 암호를 잠금
- -u 사용자 계정 : 암호 잠금을 해제
- -d 사용자 계정 : 지정한 계정의 암호를 삭제
✍ 암호 잠그기 - -l옵션
/etc/shadow 파일을 보면 암호의 맨 앞에 ! 가 있는데 이는 암호가 잠겼음을 의미한다.
sudo passwd -l user5
✍ 암호 잠금 해제 - -u 옵션
sudo passwd -u user5
✍ 암호 삭제 - -d 옵션
sudo passwd -d user5
📖 파일 및 디렉터리의 소유자와 소유 그룹 변경 - chown/chgrp
파일이나 디렉터리는 해당 파일이나 디렉터리를 생성한 사용자의 계정과 그룹이 소유자와 소유 그룹으로 설정된다
파일이나 디렉터리의 소유자를 변경할 필요가 있을 때 chonw(change owner)과 chgrp(change group) 명령 사용
📌 chown 명령
파일과 디렉터리의 소유자와 소유 그룹 변경
chown[옵션] 사용자 계정 파일명/디렉터리명
- 옵션
- -R : 서브 디렉터리의 소유자와 소유 그룹 변경
⌨ 변경 예시
sudo chown user5 hosts
sudo chown ubuntu:han01 hosts
⌨ 서브 디렉터리의 파일까지 한 번에 소유자나 소유그룹 변경 예시
sudo chown -R user5:han01 temp
temp 디렉터리와 그 안의 파일까지 한번에 소유자를 user5로 그룹을 han01로 변경
📌 chgrp 명령
파일과 디렉터리의 소유 그룹을 변경
chgrp[옵션] 그룹명 파일명/디렉터리명
⌨ temp디렉터리와 그 아래 파일까지 한번에 그룹을 user5로 변경
sudo chgrp -R user5 temp