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

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

비밀번호 저장
1. 비밀번호를 그대로 저장 abc -> abc /확인 조건 abc == abc
2. 암호화해서 저장
평문 <-> 암호 : abc (+1) -> bcd (-1) -> 원래 비밀번호 알 수 있음평문 -> 암호 : abc -> asfsa (해시사용) -> 원래 비밀번호 알 수 없음/etc/login.defs
/etc/group리눅스의 사용자는 반드시 하나의 그룹에 속해야 한다
그룹에 관련된 정보를 가지고 있는 파일
파일 구조 : 그룹이름:x:GID:그룹멤버
/etc/gshadow그룹이름:그룹암호:관리자:그룹멤버useradduseradd [옵션] [로그인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의 암호 설정

user1으로 로그인
su user1
bash, user1은 셸이 sh (= dash) 이기 때문에 프롬프트 모양이 다르다jiwoni@mylinux:~$ : bash$ : dashuseradd -D

기본값 설정 파일 확인
cat /etc/default/useradduseradd -D를 이용하는 것을 권장함🔍 기본값 설정 실습
sudo useradd -D -e 2025-12-31

ls -a /etc/skel
sudo useradd -s /bin/bash -m -d /home/user2 -u 2000 -g 1000 -G 3 user2grep user2 /etc/passwd
sudo useradd -e 2025-04-22 -f 5 -c "user3 test" user3grep user3 /etc/passwd
adduser기본형식 : adduser [옵션] 로그인ID
옵션 :
--uid UID : UID를 지정--gid GID : 기본 그룹의 GID를 지정--home DIR : 홈 디렉터리를 지정--shell 셸 : 기본 셸을 지정--gecos 설명 : 사용자의 이름 등 부가적인 설명을 지정옵션없이 생성
sudo adduser user4
계정 생성 확인
tail -1 /etc/passwd
옵션과 함께 생성
sudo adduser --uid 2002 user5계정 생성 확인
tail -1 /etc/passwd
more /etc/adduser.conf사용자계쩡을 수정할 수 있는데 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: 계정 이름을 변경
sudo usermod -u 1003 user2
useraddusermodpasswdchage : 패스워드 에이징을 관리하는 별도의 명령
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
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나중에 계정을 만들 때 홈디렉토리 설정하는 것이 좋음
| 로그인셸 | UID | 2차그룹 | 설명 | |
|---|---|---|---|---|
| test01 | 본셸 | 2100 | 3 | test01.user |
| test02 | 배시셸 | 2200 | 4 | test02.user |
| 로그인셸 | UID | 2차그룹 | 설명 | |
|---|---|---|---|---|
| test03 | 배시셸 | 2300 | test03.user |
sudo useradd -m -u 2100 -G 3 -c "test01.user" -s /bin/sh test01sudo useradd -m -u 2200 -G 4 -c "test02.user" -s /bin/bash test02sudo adduser --uid 2300 --shell /bin/bash --gecos "test03.user" test03tail /etc/passwd
sudo grep test01 /etc/shadow
sudo chage -m 4 -M 200 -W 10 -I 5 -E 2026-12-31 test01
sudo usermod -u 2010 -l "test33" test03
sudo userdel -r test02기본 형식 : groupadd [옵션] [그룹이름]
옵션 :
-g gid : 그룹의 GID 지정-o : GID 중복 허용sudo groupadd gtest01tail /etc/groupgrap gtest01 /etc/group
sudo groupadd -g 3000 gtest02
sudo groupadd -g 3000 -o gtest03
기본 형식 : addgroup [옵션] [그룹이름]
옵션 :
-gid GID : 그룹의 GID 지정-o : GID 중복 허용sudo addgroup gtest04sudo addgroup -gid 3001 gtest05
기본 형식 : groupmod [옵션] [그룹이름]
옵션 :
-g GID : 그룹의 GID 수정-o : GID 중복 허용-n 그룹이름 : 그룹명을 다른이름으로 바꾼다사용 예:
sudo groupmod -g 3001 -o gtest01sudo groupmod -n gtest11 gtest01기본 형식 : groupdel [그룹이름]
사용 예:
groupdel gtest11기본 형식 : gpasswd [옵션] [그룹이름]
옵션 :
-a 사용자계정 :사용자 계정을 그룹에 추가-d 사용자계정 : 사용자 계정을 그룹에서 제거-r : 그룹 암호를 삭제사용 예:
gpasswd gtest02
gpasswd -a test33 gtest02
sudo gpasswd -r gtest02🔸 그룹암호 설정이유
기본 형식 : newgrp [그룹명]
사용 예:
id jiwoni
newgrp gtest02UID(= RUID) : 로그인한 ID
EUID : 명령을 실행한 ID
보통의 경우는 UID와 EUID 는 동일하다
UID와 EUID가 달라지는 2가지 경우
실행파일에 setuid가 설정되어 있는 경우 : 해당 파일을 실행한 프로세스의 UID는 사용자 계정의 UID가 아니라 실행 파일 소유자의 UID가 되는데 이때 실행파일소유자의 UID를 EUID라고 함
su 명령을 사용하여 다른 계정으로 전환한 경우
who, wwho [옵션]-q : 사용자이름-H : 출력 항목의 제목도 출려-b : 마지막으로 재부팅한 날짜와 시간-m : 현재 사용자 계정의 정보를 출력-r : 런레벨을 출력who
w [사용자명]
last
현재 작업 중인 내가 누구인지, UID와 EUID는 무엇인지 확인하는 명령은 whoami, who am i, id
각 명령은 다음과 같이 구별
who am i,who -mwhoami, id
groupssu 명령을 사용하여 root 계정으로 전환하는 것인데 이는 간단한 방법이기는 하지만 일반 사용자가 모든 시스템 관리 권한을 가지게 되어 보안상 매우 위험한데 예를 들어 시스템 관리자가 출장을 가면서 필요시 시스템 관리 작업을 할 수 있도록 su 명령을 사용하여 일반 사용자가 root로 전환되게 했다면 위험한 일이기 때문
일반 사용자에게 시스템 관리 작업 중 특정 작업만 수행할 수 있는 권한을 주는 것으로 예를 들면 사용자를 추가하거나 시스템을 종료할 수 있는 권한만 부여하는 것인데 sudo 명령으로 이와 같은 제한적인 권한 부여가 가능
일반사용자가 sudo 명령으로 root 권한을 실행하려면 특정 권한을 부여 받아야 한다.
이 권한은 /etc/sudoers 파일에 설정
vi 편집기로 편집해도 되고 visudo 명령을 사용해도 되는데 visudo 명령을 사용하는 것을 권장(문법 검사를 수행하기 때문)
설정형식 : 사용자계정 호스트=명령
호스트 : 사용하는 컴퓨터
root는 root ALL=(ALL) 로 설정되어 있다.

user1 ALL=/usr/sbin/useradd, /usr/sbin/usermodsudo useradd -m yam tail /etc/passwd
ls /home
sudo passwd yam
whereis useradd/usr/sbin/useradd
su - yam
sudo visudoyam ALL=/usr/sbin/useradd
su - yam
tail /etc/passwd
yam에서 만든 계정 user10 삭제
sudo userdel -r user10
yam 계정 삭제 하면 안된다
sudo userdel -r yam
yam 계정 강제 삭제
sudo userdel -r -f yam
🔸passwd -l 유저 : 암호 잠금

🔸 passwd -u 유저 : 잠금 해제
기본 형식 : chown [옵션] [사용자 계정] [파일명 또는 디렉토리명]
옵션 :
-R : 서브 디렉토리의 소유자도 변경된다사용 예:
sudo chown -R user1 linux_ex
기본 형식 : chgrp [옵션] [그룹이름] [파일명 또는 디렉토리명]
옵션 :
-R : 서브 디렉토리의 소유 그룹도 변경된다현재계정에서 temp 디렉토리 생성
mkdir temp
temp 소유자 확인
ls -l

test100이라는 계정생성하고 chown 명령을 사용할 수 있도록 설정
sudo useradd -m test100 # 계정생성
sudo passwd test100 # 비번설정
sudo visudo # 권한설정 파일 열기
test100 ALL=/user/bin/chown
sudo chown test100 temp
ls -l

sudo apt install quota
edquota [옵션] [계정이나 그룹]
-u : 사용자 쿼터-g : 그룹 쿼터-p : 쿼터 설정을 복사sudo edquota -u user1quota [옵션] [계정이나 그룹]
-u : 사용자 쿼터-g : 그룹 쿼터sudo quota jiwonirepquota