[Linux] 사용자 및 그룹 관리(useradd, su ···)

Jiwon Joung·2023년 1월 3일
0
post-thumbnail

이 시리즈는 쿠버네티스 전문가 양성과정 9기에서 배운 내용과 엔터프라이즈 리눅스 핵심 운영 가이드 책을 따라가며 공부한 내용입니다.

사용자 및 그룹 정보 파일

리눅스에서는 /etc/ 하위 폴더에 사용자와 그룹에 대한 정보를 저장한다.

/etc/passwd

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/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 파일은 그룹에 대한 정보를 저장한다.

대부분의 리눅스에서는 사용자가 생성되면 같은 이름의 그룹도 함께 생성된다.

etc/group 파일은 총 4개의 필드로 구성되어있다.

💡 GROUP : x : GID : MEMBER

필드설명
GROUP그룹의 이름. 유일한 값
x사용자와 마찬가지로 그룹의 패스워드를 저장하는 필드지만, 실제 값은 /etc/gshadow 에 저장됨
GID그룹의 GID
MEMBER이 그룹을 보조 그룹으로 지정하고 있는 사용자의 목록

/etc/gshadow

/etc/gshadow 파일은 그룹에 로그인할 때 사용할 해시 패스워드를 저장한 파일이다.

현재는 그룹 해시 패스워드는 거의 사용하지 않으므로 자세한 설명은 패스


사용자 및 그룹 관리

사용자 생성

사용자 생성

useradd [option] user-name

# option
-u *UID* : 사용자의 UID 지정
-U : 사용자를 생성할 때 사용자와 같은 이름의 그룹을 생성
-g *GID* : 사용자의 기본 그룹 지정
-G *GID* : 사용자의 보조 그룹 지정
-c *주석* : 사용자에 대한 GECOS 지정
-d *디렉토리* : 사용자의 홈 디렉토리 지정
-s *쉘* : 사용자의 기본 쉘 지정
-o : UID의 중복 허용
-p *패스워드* : 패스워드 지정 -> 현재 사용 x
-r : UID199~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/skel 디렉토리는 사용자에 대한 기본적인 초기화 파일들을 저장하는 디렉토리이다.

/etc/login.defs

/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 명령으로 사용자 전환

su [-] [user-name]

# -(dash) option
	=> 해당 사용자의 홈 디렉토리에 있는 환경 설정을 모두 읽어옴(현재 위치, 환경 변수 등)

# user-name 파라미터 생략시 root

sudo

su 명령어로 root로 변경하려면 root 사용자의 비밀번호를 알아야하는데 이는 보안상 좋지 않으므로, root 권한의 명령어를 사용해야하는 경우에는 로그아웃 없이 root 사용자의 권한을 빌려오는 sudo 명령어를 사용한다.

root 사용자뿐만 아니라 다른 사용자의 권한도 빌려올 수 있다.

sudo [option] [user-name] command

# option
-i : 지정한 user-name의 환경에서 실행

# user-name 파라미터 생략시 root

/etc/sudoers

모두가 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의 로깅

susudo 를 사용하면 해당 내용이 /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 : 사용자의 만료 날짜를 특정 날짜로 지정

0개의 댓글