이 시리즈는 쿠버네티스 전문가 양성과정 9기에서 배운 내용과 엔터프라이즈 리눅스 핵심 운영 가이드 책을 따라가며 공부한 내용입니다.
리눅스에서는 /etc/
하위 폴더에 사용자와 그룹에 대한 정보를 저장한다.
etc/passwd
파일은 시스템에 등록된 사용자 정보를 저장한다.
편집기로도 수정할 수 있긴 하지만 잘못 건드리면 문제를 일으킬 수 있기 때문에 명령어를 통해 수정하는 것을 추천한다.
이 파일에 저장된 유저의 정보는 아래의 필드 형식을 따른다.
💡
USER
:x
:UID
:GID
:GECOS
:HOME
:SHELL
필드 | 설명 |
---|---|
USER | 사용자의 이름(유일한 값) |
x | 사용의 패스워드 실제로는 사용하지 않고 이 정보는 etc/shadow 파일에 저장 |
UID | 사용자 식별번호 0번은 root이며 1000번 미만은 시스템 사용자 계정으로 예약되어있고, 일반 사용자는 1000번부터 할당받는다 |
GID | 그룹 식별번호 0번은 root 그룹이며 1000번 미만은 시스템 사용자 그룹으로 예약되어있고, 일반 그룹은 1000번부터 할당받는다 |
GECOS | 사용자의 계정에 대한 주석 기재 |
HOME | 사용자의 홈 디렉토리 경로(절대경로) |
SHELL | 사용자가 기본으로 사용하는 쉘 |
/etc/shadow
파일은 사용자의 패스워드를 해시패스워드 형태로 저장하고 패스워드에 대한 속성을 저장한다.
/etc/passwd
의 두번째 필드에 저장하는 대신 이 파일에 저장하면 관리자 이외의 사용자의 접근을 차단하고, 강력한 해시 알고리즘을 사용하기 때문에 안전하다.
이 파일에 저장된 유저의 정보는 아래의 필드 형식을 따른다.
💡
USER
:HASH
:LASTCHANGE
:MIN
:MAX
:WARNING
:INACTIVE
:EXPIRE
:BLANK
필드 | 설명 |
---|---|
USER | 사용자의 이름 |
HASH | 해시 알고리즘을 사용하여 생성된 패스워드 |
LASTCHANGE | 마지막으로 패스워드를 변경한 날짜 1970.1.1 에 더해서 계산 가능 |
MIN | 패스워드 변경 후 최소 사용 기간 |
MAX | 패스워드 변경 후 최대 사용 기간 |
WARNING | 만료일이 되기 전 사용자에게 경고 메시지를 출력할지 설정 |
INACTIVE | 패스워드가 만료된 후 변경할 수 있는 기간 이 기간 내에 변경하지 않으면 계정이 잠금상태가 됨 |
EXPIRE | 사용자 계정의 만료일 지정 |
BLANK | 예약필드. 사용 X |
/etc/group
파일은 그룹에 대한 정보를 저장한다.
대부분의 리눅스에서는 사용자가 생성되면 같은 이름의 그룹도 함께 생성된다.
etc/group
파일은 총 4개의 필드로 구성되어있다.
💡
GROUP
:x
:GID
:MEMBER
필드 | 설명 |
---|---|
GROUP | 그룹의 이름. 유일한 값 |
x | 사용자와 마찬가지로 그룹의 패스워드를 저장하는 필드지만, 실제 값은 /etc/gshadow 에 저장됨 |
GID | 그룹의 GID |
MEMBER | 이 그룹을 보조 그룹으로 지정하고 있는 사용자의 목록 |
/etc/gshadow
파일은 그룹에 로그인할 때 사용할 해시 패스워드를 저장한 파일이다.
현재는 그룹 해시 패스워드는 거의 사용하지 않으므로 자세한 설명은 패스
useradd [option] user-name
# option
-u *UID* : 사용자의 UID 지정
-U : 사용자를 생성할 때 사용자와 같은 이름의 그룹을 생성
-g *GID* : 사용자의 기본 그룹 지정
-G *GID* : 사용자의 보조 그룹 지정
-c *주석* : 사용자에 대한 GECOS 지정
-d *디렉토리* : 사용자의 홈 디렉토리 지정
-s *쉘* : 사용자의 기본 쉘 지정
-o : UID의 중복 허용
-p *패스워드* : 패스워드 지정 -> 현재 사용 x
-r : UID가 199~999인 시스템 계정 만듦
-m : 사용자의 홈 디렉토리가 존재하지 않는 경우 생성
-e *만기일* : /etc/shadow 파일의 EXPIRE 필드값 지정
-f *기간* : /etc/shadow 파일의 INACTIVE 필드값 지정
useradd -D [option] [argument]
# option
-b *디렉토리* : 기본 홈 디렉토리
-e *만기일* : `EXPIRE` 필드값
-f *기간* : `INACTIVE` 필드값
-g *GID* : 기본 그룹의 GID
-s *쉘* : 사용자의 기본 쉘
usermod [option] user-name
# option
기본적으로 useradd의 옵션과 동일함
-L : 잠금상태로 변경
-U : 잠금상태 해제
userdel [option] user-name
# option
-r : 사용자의 홈 디렉토리도 함께 삭제(권장)
groupadd [option] group-name
# option
-g : 그룹의 GID 지정
-o : 이미 존재하는 GID일시 중복 허용
-r : 시스템 그룹으로 생성(201-999 중 하나 부여)
groupmod [option] group-name
# option
-g : GID 변경
-n : 그룹명 변경
-o : GID 중복 허용
-p : 패스워드 변경
groupdel group-name
/etc/skel
디렉토리는 사용자에 대한 기본적인 초기화 파일들을 저장하는 디렉토리이다.
/etc/login.defs
파일은 사용자가 그룹을 생성할 때 참고하는 기본값들이 저장되어있다.
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail # 오류 메시지 등을 전송하는 메일을 받을 위치
#MAIL_FILE .mail
# Password aging controls (패스워드 에이징 설정):
PASS_MAX_DAYS 99999 # 패스워드의 최대 사용 기간
PASS_MIN_DAYS 0 # 패스워드의 최소 사용 기간
PASS_MIN_LEN 5 # 패스워드의 최소 길이
PASS_WARN_AGE 7 # 경고 값
# 사용자 생성시 자동으로 부여되는 UID의 최소/최댓값
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999
# 그룹 생성시 자동으로 부여되는 UID의 최소/최댓값
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999
# 사용자 생성 시 홈 디렉토리 생성 여부
CREATE_HOME yes
# 홈 디렉터리 생성시 설정되는 umask값
UMASK 077
# 사용자 생성 시 UPG 스키마사용 여부
# yes: 사용자 생성시 이름과 같은 그룹이 생성
# no : /etc/default/useradd에 명시된 GROUP으로 기본 그룹이 설정됨
USERGROUPS_ENAB yes
# 패스워드 설정 시 해시 알고리즘 설정
# DES, MD5, Blowfish, SHA-256, SHA-512 등 사용가능
ENCRYPT_METHOD SHA512
su [-] [user-name]
# -(dash) option
=> 해당 사용자의 홈 디렉토리에 있는 환경 설정을 모두 읽어옴(현재 위치, 환경 변수 등)
# user-name 파라미터 생략시 root
su
명령어로 root로 변경하려면 root 사용자의 비밀번호를 알아야하는데 이는 보안상 좋지 않으므로, root 권한의 명령어를 사용해야하는 경우에는 로그아웃 없이 root 사용자의 권한을 빌려오는 sudo
명령어를 사용한다.
root 사용자뿐만 아니라 다른 사용자의 권한도 빌려올 수 있다.
sudo [option] [user-name] command
# option
-i : 지정한 user-name의 환경에서 실행
# user-name 파라미터 생략시 root
모두가 sudo 명령으로 다른 사용자의 권한을 빌려올 수 있는 것은 아님
sudo 명령을 사용할 수 있는 조건에 대한 내용을 /etc/sudoers
파일에 넣을 수 있다.
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
su
나 sudo
를 사용하면 해당 내용이 /var/log/secure
에 저장됨
리눅스에서는 etc/shadow
파일에 패스워드를 해시 패스워드를 저장하는데, 이 파일에는 패스워드에 대한 설정값도 저장된다.
사용자를 생성하고 패스워드를 설정할 때, passwd 명령을 사용하면 해시 알고리즘을 사용해서 해시 패스워드를 사용하고 /etc/shadow
파일의 두번째 필드에 저장한다.
user:$6$J/nRNWoXdrowzBee$3GZn4r3NdPjoJZnL.7Lu7lk5afFagG7oqgzHpit3TVlyCz7pbq.rmncEDCwTazHhyBPsjOB/LGf0KDcFQ4Tkc/::0:99999:7:::vboxadd:!!:18882::::::
chichi:$6$mgYkr8Xw$156QZ9ZMvnfn47rPGmPo/m.1o2
💡 해시 패스워드 필드 구조
$ [해시 알고리즘 종류] $ [salt 값] $ [salt 값을 이용한 해시암호]
# 해시 알고리즘 종류
0: DES
1: MD5
2: Blowfish
5: SHA-256
6: SHA-512
# salt 값
패스워드를 생성할 때마다 랜덤으로 값이 생성됨
# 해시암호
입력한 값과 salt를 해시 알고리즘을 통해서 암호화함
사용자가 패스워드를 입력하면 /etc/login.defs
에 있는 패스워드 에이징 설정에 의해 패스워드의 속성이 자동으로 생성된다.
💡
USER
:HASH
:LASTCHANGE
:MIN
:MAX
:WARING
:INACTIVE
:EXPIRE
:BLANK
chage [option] [argument] user-name
# 이 명령은 유저만 사용 가능
# option
-l : 패스워드 속성 확인
-d : 마지막으로 패스워드를 변경할 날짜를 수정
-m : 패스워드를 변경할 수 있는 최소 기간 수정
-M : 패스워드를 사용할 수 있는 최대 기간 수정
-W : 패스워드의 유효기간이 만료하기 전 사용자에게 경고하는 날짜 지정
-I : 패스워드가 만료된 후 추가 기간을 주어 계정의 패스워드를 변경할 수 있는 날짜를 수정
-E : 사용자의 만료 날짜를 특정 날짜로 지정