1. 리눅스 계정 종류 1.1 사용자 분류 1.2 계정 확인 명령어 계정 확인 (id / users / who) 계정 전체 확인 2. 루트 계정 관리 2.1 루트 계정 명령어 root 암호 설정 root 로그인 root 계정 관리 방안 3. 시스템 계정 관리 3.1 시스템 계정 추가 명령어 4. 사용자 계정 관리 4.1 계정 추가 명령어 사용자 추가 (useradd / adduser) 사용자 추가 옵션 사용자 생성 정보 기본 사항 확인 (-D) 홈 디렉터리 지정하기 (-m) uid 지정하기 (-u) 그룹 지정하기 (-g) 2차 그룹 지정하기 (-G) UID 와 그룹 동시 지정하기 사용자 설명 추가하기 (-c) 계정 만기일 설정하기 (-e) 패스워드 만기일 설정하기 (-f) 사용자의 셸 지정하기 (-D) 4.2 계정 패스워드 명령어 패스워드 설정 (passwd) 패스워드 유효기간 관리 (chage) 4.3 계정 전환 / 설정 / 삭제 명령어 계정 전환 (su) 계정 설정 (usremod) 계정 삭제 (userdel) 계정 삭제 (deluser) 5. 그룹 계정 관리 5.1. 그룹 계정 명령어 그룹 출력 (groups) 그룹 생성 (groupadd) 그룹 정보 변경 (groupmod) 그룹 삭제 (groupdel) 그룹 전반적인 관리 및 패스워드 변경 (gpasswd) 그룹 참여 (newgrp) 6. 사용자 계정 환경 설정 파일 6.1 환경 설정 파일 종류 /etc/passwd /etc/shadow /etc/default/useradd /etc/login.defs /etc/group /etc/gshadow
리눅스 계정 종류
사용자 분류
루트 계정 : 모든 권한을 가진 특별한 사용자
시스템 계정 : 리눅스 설치시 기본으로 생성되는 계정
사용자 계정 : 실제 리눅스 사용자를 위한 계정
리눅스에서는 사용자를 root(관리자)와 일반사용자로 구분한다.
각각 계정은 흔히 사용하는 ID가 아니라 번호로 부여하는 UID(User Identity)로 관리한다.
Tip
UID가 0번인 사용자는 슈퍼유저로 인식해서 관리자계정이 된다. 일반사용자 계정의 UID 범위는 /etc/login.defs 에 정의되어 있다.
root (Super User)계정은 UID값이 0으로 지정된 관리자계정이다.
여기서는 다른 계정을 생성하거나 권한을 부여하고 비밀번호를 바꿀 수 있다.즉 모든 권한을 가진 계정이다. 만약 다른계정에 UID값을 0으로 변경한다면 관리자와 마찬가지로 모든 권한을 가질 수 있다.
일반사용자(Normal user)는 관리자에게 권한을 부여받아 사용한다.
리눅스에서 파일을 생성 시 소유주의 권한을 가지는데 만약 일반유저라면 root 권한을 가진 파일을 실행하거나 볼 수 없다. 따라서 root가 파일의 권한을 부여해야만 일반관리자가 해당 파일을 열어볼 수 있다.
root와 일반사용자를 제외한 계정으로는 시스템계정이 있다.
필요에 의해 자동으로 생성되는 시스템계정은 bin, daemon, adm, lp,sync, shutdown, halt, mail 등 여러가지가 있으며 일반적으로 로그인은 불가능하다.
계정 확인 명령어
계정확인 (id / users / who)
BASH
# 현재 사용자의 UID, GID, 그룹정보를 확인하는 명령어
$ idCopy
Info
UID(User ID) : 사용자 식별 번호 - 슈퍼유저의 UID = 0 - /etc/passwd 에서 확인 가능 - 1 ~ 499 시스템을 제어하는 계정 -> 로그인 되지 않도록 생성하는 것이 원칙. - 500 ~ 60000 까지 일반 계정
GID(Group ID) : 그룹 식별 번호 - 슈퍼유저의 GID = 0 - /etc/passwd 와 /etc/group 에서 확인 가능 - 리눅스는 그룹을 통해서 사용자를 묶을수있다.
BASH
# 현재 호스트에 로그인되어 있는 모든 사용자 출력
$ users
# 모든 사용자 정보 자세히 출력 (터미널 종류, 로그인 시각 등 기본적으로 출력)
$ who [options]
inpa :0 2022-02-02 23:30 (:0)
# 현재 로그인한 사용자의 사용자명 출력
$ whoami
$ id -un
$ logname
# 현재 로그인한 사용자가 어떤시스템에서 로그인했는지 어떤 프로세스를 실행하고있는지 출력
# -h , --no-header 컬럼의 헤더를 출력하지 않음
# -s, --short 정보를 간략히 출력
$ w [option] [user]
23:47:00 up 17 min, 1 user, load average: 0.00, 0.00, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
inpa :0 :0 23:30 ?xdm? 22.47s 0.00s /usr/lib/gdm3/g
# 프로세스를 종료하지 않고 계정만 로그아웃하여 이전에 사용중인 계정으로 돌아가는 명령어
$ logout
$ exitCopy
계정전체 확인
BASH
# 전체 목록 확인
$ cat /etc/passwd
# 아이디만 잘라서 확인
$ cut -f1 -d: /etc/passwdCopy
루트 계정 관리
루트 계정 명령어
root 암호 설정
BASH
$ sudo passwd root
# 패스워드 입력후 로그인Copy
root 로그인
BASH
# 현재 계정에서 root권한을 이용하여 명령어를 실행할 때 사용하는 명령어
# sudo뜻 : superuser do
$ sudo
# 로그아웃을 하지 않고 다른 사용자의 계정으로 전환 (계정명 미입력이면 root로 로그인)
# su뜻 : switch user
$ su [계정명]Copy
root 계정 관리 방안
시스템 초기 환경설정 시에만 이용하고SSH를 통해 root 사용자 로그인이 되지 않도록 설정
시스템상 root계정은 유일해야 함.
PAM을 통해 root 사용자로 로그인 할 수 없도록 설정
환경변수 TIMOUT을 설정하여 자동 로그아웃 되도록 설정.
root계정으로 로그인하는것을 지양하고 필요할경우 sudo 명령을 사용.
BASH
#ssh 서비스의 root 로그인 막기
# sshd_config 파일을 root 권한으로 수정
$ sudo vi /etc/ssh/sshd_config
# ... 파일내용중 PermitRootLogin항목을 no로 설정.
# sshd 서비스 재시작
$ sudo systemctl restart sshdCopy
시스템 계정 관리
시스템과 일반(일반) 사용자 사이에는 실질적인 기술적 차이가 없다.일반적으로 OS 및 새 패키지를 설치할 때 시스템 사용자가 자동 생성된다.
시스템의 특정 서비스에 대한 권한을 행사할 수 있는 계정
bin, daemon, adm, lp,sync, shutdown, halt, mail같은 계정들이 시스템 계정
/etc/passwd 파일에서uid가 1~499 갖는 계정을 살펴봄.
레드햇 계열은 100~499 데비안 계열은 100~999 범위
시스템 계정은 보통 0~99의 범위를 가짐.
시스템 계정 추가 명령어
-r(--system)옵션을 사용하여 시스템 사용자 계정을 만들 수 있다. 시스템 사용자는 만료 날짜 없이 생성된다.
해당 UID는 login.defs 파일에 지정된 시스템 사용자 ID 범위에서 선택되며, 일반 사용자에게 사용되는 범위와는 다르다
BASH
$ sudo useradd -r usernameCopy
사용자 계정 관리
계정 추가 명령어
사용자추가 (useradd / adduser)
BASH
# 사용자를 생성한다
$ useradd testuserCopy
추가된 사용자는/etc/passwd파일에서 확인할 수 있다.
BASH
$ tail -1 /etc/passwd # passwd 파일 맨끝 라인만 출력하기 (맨끝이 최근에 추가된 유저 정보)
testuser:x:1002:1002::/home/testuser:/bin/sh
[사용자명]:[비밀번호]:[uid]:[gid]:[사용자 계정 설명]:[홈 디렉터리]:[셸]Copy
'/etc/passwd' 파일에는콜론(:)으로 구분되며 다음과 같은 정보를 포함하고 있다.
사용자명
비밀번호
uid
gid
사용자 계정 설명
홈 디렉터리
셸
testuser
x
1002
1002
/home/testuser
/bin/sh
이밖에 useradd 명령어와 adduser 명령어 둘다 유저 정보를 출력해주는데 이 둘의 차이를 알고 싶다면 아래 포스팅을 참고하길 바란다.
사용자의 홈 디렉터리를 지정하는 옵션이다.중간 경로가 있을 경우에는미리 생성해 줘야 한다.
별도로 지정하지 않으면 /etc/default/useradd의 'HOME' 변수에 지정된 디렉터리에 '사용자명'으로 생성된다.
[-m] 옵션을 함께 사용하면, 디렉터리를 동시에 생성할 수 있다.
BASH
# 사용자 홈 디렉토리를 /home/testuser으로 자동 생성
$ useradd -m testuser
# 기본적으로 useradd는 /home에 사용자의 홈 디렉토리를 생성.
# 사용자의 홈 디렉토리를 다른 위치에 작성하려면 d(--home) 옵션을 사용.
$ useradd -m -d /home/color/testuser testuserCopy
uid지정하기(-u)
사용자의 uid를 설정하는 옵션이다.별도의 옵션을 지정하지 않을 경우,uid는 자동 발번되어 추가된다.
BASH
# 특정 UID를 가진 사용자를 생성
$ useradd -u 999 testuser
$ useradd -u [UID숫자] [유저명]
#사용자의 UID를 확인
$ id -u testuserCopy
Tip
gid가 'group id'의 약자라면, uid는 'user id'의 약자이다. 사용자의 필요에 따라 특정 uid를 지정하여 생성할 수도 있다. 단, 다른 사용자가 이미 사용 중인 uid는 지정할 수 없다.
그룹지정하기(-g)
사용자가소속될 그룹을 지정하는 옵션이다.옵션을 생략할 경우, 아이디와 동일한 그룹에 포함시킨다.
옵션을 사용하여 gid를 지정하는 경우, 해당 gid는 반드시 생성되어 있는 것이어야만 한다.
BASH
# 그룹을 지정하여 사용자를 생성. 단, 그룹은 미리 생성되어 있어야 함.
$ useradd -g groupname testuser
$ useradd -g [그룹명] [유저명]Copy
리눅스 사용자는 하나 이상의 그룹에 속하게 되어 있다.그 그룹은 계정이 생성될 때 '사용자명'으로 생성되는데, 이와 동시 그룹의 고유 id인 'gid(group id)'도 발번된다.
그룹명과 gid는/etc/group파일을 보면 확인할 수 있다.이 파일도/etc/passwd파일처럼 여러 개의 필드가 '콜론(:)'으로 구분되어 있는데,여기서첫 번째 필드가 그룹명이고,세 번째 필드가 gid이다.
# 여러 그룹 할당
$ useradd -g color -G wheel,developers testuser
$ useradd -g [그룹명] -G [그룹1,그룹2] [유저명]
# 사용자의 GID를 확인
$ id -gn testuser
# 사용자 그룹 전체 확인
$ id testuser
uid=1002(username) gid=100(users) groups=100(users),10(wheel),993(docker)Copy
사용자는여러 개의 그룹에 동시에 속할수도 있다.'[-G]' 옵션을 사용하면 사용자가 기본적으로 속한 그룹 외, 다른 그룹에도 동시에 속하게 할 수 있다.
'testuser4'의 기본 그룹(1차 그룹)을 '1002'로, 2차 그룹을 '1001'번으로 지정하여 계정을 생성해본다.
BASH
$ useradd -g 1002 -G 1001 testuser4Copy
계정 생성 후/etc/passwd파일을 살펴보면, 기본 그룹은 '1002'로 추가되었음을 확인할 수 있다.
$ cat /etc/group | grep testuser4
testuser:x:1001:testuser3 # GID 1001을 가진 testuser라는 그룹에 testuser3이라는 유저가 속해있다
[그룹명]:[패스워드]:[GID]:[멤버목록]Copy
그룹 여러개에 각각 사용자가 속해있다면 이런식으로 출력된다./etc/group에 있는inpa사용자의 그룹속함 정보와 명령어$ id로 출력되는그룹정보가 일치함을 알 수 있다.
UID와그룹동시 지정하기
BASH
# UID와 그룹을 지정하여 사용자를 생성. 단, color 그룹은 미리 생성되어 있어야 함.
$ useradd -u 999 -g color testuser
$ useradd -u [UID숫자] -g [그룹명] [유저명]Copy
사용자설명추가하기(-c)
'comment'의 이니셜로, 사용자에 대한 설명을 추가하는 옵션이다. 띄어쓰기가 필요할 경우, 따옴표('')로 묶어준다.
BASH
# 사용자 이름 이름을 사용자 이름으로 만들고 텍스트 문자열로 사용자 계정 테스트를 주석으로 사용
# -c(--comment) 옵션: 새 사용자에 대한 간단한 설명을 추가
$ useradd -c "Test User Account" testuser
$ grep username /etc/passwd
username:x :1001:1001:Test User Account:/home/testuser:/bin/shCopy
계정 만기일설정하기(-e)
계정의 만기일을 설정한다.만기일 형식은 반드시 'YYYY-MM-DD'로 설정해야 한다.
BASH
# 사용자 계정의 만료일을 지정하면서 생성
# 날짜는 YYYY-MM-DD 형식으로 지정
$ useradd -e 2019-12-25 testuser
# 사용자 계정 만료 날짜를 확인
$ sudo chage -l testuser
Last password change : Dec 11, 2018
Password expires : never
Password inactive : never
Account expires : Jan 22, 2019
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7Copy
패스워드 만기일설정하기(-f)
'[-f]' 옵션을 사용하면 패스워드 만기일을 날짜 수로 지정할 수 있다.
BASH
$ useradd -f [날짜 수]Copy
예를 들어, 'user10' 계정을 생성하되, 패스워드를 3일 이내 만기 시켜야 할 경우 다음과 같이 명령어를 입력하면 된다.
$ passwd [option][username]
Changing password for user username.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.Copy
옵 션
설 명
-d, --delete
패스워드 삭제. 비밀번호없이 로그인 가능
-e, --expire
사용자의 패스워드를 만료
-i, --inactive
패스워드 만료후 비활성화전 유예기간 일 지정
-l, --lock
사용자 패스워드에 락 걸어 로그인 막음
-n, --mindays
비밀번호 변경할수 있을때까지 유지해야할 일수 설정
-q, --quiet
화면 출력없이 명령을 수행
-S, --status
사용자의 로그임명, 패스워드 상태, 설정여부, 마지막으로 변경한 날짜, 패스워드 변경까지 남은 기간 등 다양한 정보 출력
-u, --unlock
락을 걸었던 패스워드를 다시 해제
-w, --warndays
패스워드 만료전 경고날짜 지정
-x, --maxdays
최대사용기간 설정
BASH
# 사용자 패스워드 설정
$ sudo passwd testuser
# 현재사용자 패스워드 변경
$ passwd
# 지정한 사용자 패드워드 만료
$ sudo passwd -e testuser
# 지정한 사용자의 패스워드 상태를 출력
$ sudo passwd -S testuser
# 지정한 사용자 패스워드 락
$ sudo passwd -l testuser
# 지정한 사용자 패스워드 삭제
$ sudo passwd -d testuser
# 패스워드 변경후 7일간 변경 불가능, 365일간 사용할수 있고 5일전부터 패스워드 변경 경고. 만료후 10일 유예기간
$ sudo passwd -n 7 -x 365 -w 5 -i 10 testuserCopy
패스워드유효기간관리(chage)
BASH
$ chage [options] usernameCopy
옵 션
설 명
-d,--lastday
패스워드를 변경해야 할 날짜수 지정
-E,--expiredate
계정이 만료되는 날 설정
-I,--inactive
계정만료후 패스워드가 비활성화될때까지 유예기간을 설정
-l,--list
계정의 매스워드 만료 정보 보여줌
-m,--mindays
패스워드 변경할 때 최소 날짜를 지정
-M,--maxdays
패스워드 변경할 때 최대날짜 지정
-W,--warndays
패스워드 만료에 대한 경고 메시지를 보여줄 날짜를 지정
BASH
# 만료정보 출력
$ sudo chage -l test
# test 계정의 패스워드 최소 사용날짜 7일, 최대 사용날짜 365일 5일전부터 경고메시지. 만료후 3일 유예기간
$ sudo chage -m 7 -M 365 -W 5 -I 3 test
# test 계정의 만료일 지정.
$ sudo chage -E 2019-12-24 test
# test계정의 패스워드 변경일 10000 설정
$ sudo chage -d 10000 testCopy
계정 전환 / 설정 / 삭제 명령어
계정전환(su)
su : switch user 약자
BASH
# 다른 사용자의 권한으로 실행
$ su [options] usernameCopy
옵 션
설 명
-c, --command
지정한 사용자로 셸이 실행할 명령어 지정
-, -l, --login
사용자가 직접 로그인했을때 동일하게 환경변수가 설정되고 홈 디렉토리로 이동
-s, --shell
명시된 셸 사용
BASH
# root 사용자 전환.
$ su -
# 사용자 전환을 하지않고 일시적으로 지정명령 실행
$ su root -c "vi /etc/passwd"Copy
계정설정(usremod)
사용자 셸, 홈디렉토리, 그룹, UID, GID 사용자 설정 변경. useradd 명렁어의 설정 대부분 적용가능.
BASH
$ usermod [options] usernameCopy
옵 션
설 명
-a,--append
사용자에 그룹 추가하기위해 -G 옵션과 사용
-c,--comment
사용자에 간단한 정보 입력
-l,--login
로그인 이름 변경
-L, --lock
패스워드에 락
-U,--unlock
패스워드 락 해제
BASH
# 사용자 홈 디렉터리 변경. -m 옵션까지 입력하면 내용도 복사
$ usermod -d /home/whiteblue testuser
# 사용자 그룹을 photo 사용자 그룹으로 변경
$ usermod -g photo testuserCopy
계정삭제(userdel)
BASH
$ userdel [option] username
# 계정삭제. 단, 홈디렉토리 파일은 남아있음.
$ userdel testuser
# -r 옵션을 통해 사용자 계정 홈 디렉토리도 삭제
$ userdel -r testuser
# -f옵션으로 강제 삭제
$ userdel -f testuserCopy
계정삭제(deluser)
BASH
# userdel이랑 같지만 옵션명이 다른것 뿐이다.
$ deluser [userName]
# 홈 디렉토리 삭제
$ deluser --remove [userName]
# 홈 디렉토리, 계정명으로된 모든 파일 삭제
$ deluser --remove-all-files [userName]Copy
BASH
# home이나 passwd에 유저 디렉토리, 정보를 삭제해서 계정 삭제하는 방법도 존재한다.
# 홈 디렉토리 및 하위폴더 삭제
$sudo rm -r /home/[userName]
# /etc/passwd 에서 해당 내용 삭제
$sudo vi /etc/passwdCopy
userdel와 deluser 차이 결론적으로 말하자면, 옵션 문법 적인 차이 외에 둘이 차이가 없다. $ userdel $sudo userdel [userName] # 옵션 # -r : 홈 디렉토리 삭제 $ deluser $sudo deluser [userName] # 옵션 #..
그룹 계정 관리
그룹이란사용자를 묶어 관리가능하게 하는 매커니즘 이다. 그룹을 통해 각 그룹에 보안설정, 접근설정, 권한등을 일괄 적용 관리할 수 있다.
모든 사용자는UID와그룹에 대한 식별자인GID가진다.사용자 생성시 기본으로사용자 이름과 동일한 그룹을 생성하여 포함시킨다.
그룹 계정 명령어
그룹출력 (groups)
BASH
# 특정 사용자나 현재 로그인한 사용자가 속한 그룹을 표시
$ groups
# uid=1000(inpa) gid=1000(inpa) 그룹들=1000(inpa),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),132(lxd),133(sambashare)Copy
그룹생성 (groupadd)
BASH
$ groupadd [options] groupnameCopy
옵션
설명
-f, --force
그룹을 생성할때 이미 생성되어 있더라도 성공으로 간주
-r, --system
시스템 그룹을 생성
-g,--gid GID
그룹의 양수의 GID를 지정
-o,--non-unique
그룹을 생성할때 중복된 GID값 허용
BASH
# GID 지정하여 그룹을 생성
$ sudo groupadd -g 550 groupnameCopy
그룹 정보변경 (groupmod)
옵션
설명
-g, --gid
변경할 GID 설정 -o 옵션을 주지않는다면 유일한 정수값
-n, --new-name
그룹의 이름 변경
BASH
# colors 그룹 이름을 newcolors 그룹으로 변경
$ sudo groupmod -n newcolors colors
# GID 567로 변경
$ sudo groupmod -g 567 colorsCopy
그룹관련 설정파일인 /etc/group , /etc/gshadow , /etc/passwd 에서 그룹관련 속성 변경할 수 있다.
그룹삭제 (groupdel)
그룹을 삭제하기 위해선 주그룹에 존재하는 사용자가 없어야한다. (사용자를 삭제한 후 그룹을 삭제할 수 있음.)
또한 파일중 그룹이 설정된 파일이 없어야 한다.
BASH
$ sudo groupdel groupnameCopy
그룹전반적인 관리및패스워드변경(gpasswd)
그룹 패스워드 변경 뿐만 아니라 앞에서 본 그룹 추가/삭제 등 전반적인그룹 관리 마스터 명령어이다.
BASH
$ gpasswd [options] groupnameCopy
옵션
설명
-a, --add user
그룹에 사용자를 추가
-d, --delete user
구룹에 사용자 삭제
-r, --remove-password group
그룹의 패스워드 제거 그룹멤버는 newgrp 명령어를 사용해 그룹에 참가
-R, --restrict group
그룹 접근 제한 패스워드 가진 그룹멤버만 newgrp통해 그룹에 참가
-A, --administrator user ..
관리자로 지정할 사용자 설정
-M, --memvers user..
그룹멤버 설정
그룹의 패스워드 정보는 /etc/group 과 /etc/gshadow 에 저장되어 있다.
그룹참여 (newgrp)
만일 참여하려는 그룹에 그룹패스워드가 존재하는데, 사용자가 명령어를 통해 그룹에 참여하려면 패스워드 입력 필요하다.
BASH
# 현재 그룹대신 groupname 그룹으로 전환
$ newgrp groupnameCopy
사용자 계정 환경 설정 파일
사용자 계정과 그룹정보는/etc디렉터리 이하에 존재한다.
구분
파일명
설명
계정 및 그룹 설정파일
/etc/passwd
사용자 계정의 아이디, 그룹정보 등계정정보
/etc/shadow
암호화된패스워드및 정책 설정 정보
/etc/group
사용자 그룹의 기본정보
/etc/gshadow
사용자그룹의 암호화된 패스워드정보
계정 환경설정 파일
/etc/default/useradd
useradd명령을 사용할 때기본 사용자 부가정보
/etc/login.defs
로그인 수행시 기본설정
/etc/skel
홈 디렉터리 생성시 기본으로 제공할 파일
환경 설정 파일 종류
/etc/passwd
로그인시 필요한 UID, GID, 홈디렉터리, 셸 등의 사용자계정 정보를 포함.
모든 사용자에게 읽기권한 가진 파일
루트 사용자만 쓰기 허용
BASH
$ cat /etc/passwd
userid:x:14:50:FTP This is test User:/var/userid:/sbin/nologin
[사용자명]:[비밀번호]:[UID]:[GID] [사용자설명]:[홈디렉토리]:[쉘경로]
# 사용자 명 : 로그인 할때 사용하는 사용자이름
# 비밀번호 : x는 암호화된 패스워드를 보관하고있다는 의미
# UID : 사용자 번호
# GID : /etc/group 파일에 보관된 주 그룹 ID번호
# 사용자 설명 : 사용자에대한 추가설명 코멘트 필드
# 홈 디렉터리 : 기본디렉터리로 절대경로로 설정
# 셸 : 셸의 위치를 절대 경로로 지정.Copy
/etc/shadow
사용자 패스워드를 해시 알고리즘으로 암호화한 값과패스워드와 연관된 여러 속성을 단고있는 파일