리눅스 사용자 관리
사용자의 분류
1) 사용자의 종류
- 루트계정 : 모든 권한을 가진 특별한 사용자
- 시스템 계정 : 리눅스 설치시 기본으로 생성되는 계정
- 사용자 계정 : 실제 리눅스 사용자를 위한 계정
루트 계정 관리
1) root 계정
완전한 권한을 갖는 슈퍼유저 사용자.
해당 시스템의 대표 관리자 계정
UID는 0
2) 루트계정 권한 획득 방법
1. root 사용자로 로그인
$sudo passwd root
패스워드 입력후 로그인
2. root 사용자로 임시 전환
sudo 명령어를 통해 루트권한으로 해당 명령어를 실행
해당명령이 종료되면 root권한도 사라짐
$sudo vi /etc/passwd
3. 현재 사용자를 root 사용자로 지정
/etc/passwd 파일에서 사용자의 UID를 0으로 입력하면 해당 사용자는 root 권한을 갖게됨.
3) 루트 계정 관리 방안
- 시스템 초기 환경설정 시에만 이용하고 SSH를 통해 root 사용자 로그인이 되지 않도록 설정
- 시스템상 root계정을 유일해야 함.
- PAM을 통해 root 사용자로 로그인 할 수 없도록 설정
- 환경변수 TMOUT을 설정하여 자동 로그아웃 되도록 설정.
- root계정으로 로그인하는것을 지양하고 필요할경우 sudo 명령을 사용.
ssh 서비스의 root 로그인 막기 sshd_config 파일을 root 권한으로 수정 $sudo vi /etc/ssh/sshd_config 파일내용중 PermitRootLogin항목을 no로 설정. sshd 서비스 재시작 $sudo systemctl restart sshd |
시스템 계정 관리
1) 시스템 계정 설명
시스템의 특정 서비스에 대한 권한을 행사할 수 있는 계정
bin, daemon, adm, lp,sync, shutdown, halt, mail같은 계정들이 시스템 계정
/etc/passwd 파일에서 uid가 1~499 갖는 계정을 살펴봄.
UID
시스템 계정은 보통 0~99의 범위를 가짐.
레드햇 계열은 100~499 데비안 계열은 100~999 범위
2) 시스템 계정 관리 방안
서비스별로 권한을 분리하여 시스템 계정을 생성
리눅스를 설치하면 기본으로 설치되는 시스템 계정을 보면 메일관리는 mail, ssh서비스는 ssh계정이 담당.
사용자 계정 관리
1) 사용자 계정 설명
일반사용자 계정. 시스템 파일과 디렉터리에 제한적으로 접근하도록 설정해 시스템 보호
리눅스는 그룹단위로 파일접근 권한설정과 프로세스관리를 수행
레드햇 centos6 버전의 UID는 500이상의 값을 가짐.
centos7버전과 오픈수세, 데비안의 UID는 1000이상의 값을 가짐.
일반사용자 계정의 UID 범위는 /etc/login.defs에 정의.
2)사용자 생성하기
useradd 명령어나 adduser명령어를 사용.
useradd [option] username
-d, --home | 홈디렉터리 지정. |
-D, --default | 사용자 생성시 사용하는 기본값을 보거나 설정 |
-e, --expiredate | YYYY-MM-DD 형식으로 계정의 만기일 지정 |
-f. --inactive | 패스워드 만료일 이후 유효기간을 설정 1이상의 숫자이면 해당일수만큼 패스워드 유효. 0이면 만료되면 바로 잠김.-1이면 해당기능을 사용하지 않음. |
-g, --gid GROUP | 사용자 그룹설정. 설정하지 않으면 사용자 이름과 동일한 그룹에 설정. |
-G, --groups | 기본 그룹이외에 추가로 그룹을 생성할때 |
-k, --skel SKEL_DIR | -m 옵션을 통해 홈 디렉터리 생성할때 복사할 기본파일을 지정할때 사용 |
-m, --create-home | 홈 디렉터리를 지정할 떄 사용하고 디렉터리가 없으면 생성 -k 옵션과 같이 사용해서 홈디렉터리 생성시 복사할 기본 파일경로도 지정 |
-M | 홈디렉터리를 생성하지 않음 |
-N, --no-user-group | 사용자와 동일한 이름으로 그룹을 생성하지 않음. |
-p, --password | 평문이 아닌 암호화된 패스워드를 설정 |
-r, --system | 시스템 계정을 생성 |
-s, --shell | 사용자가 사용할 셸을 지정 |
-u, --uid | 사용자 유일한 UID값 설정 |
예제
사용자를 생성한다
#useradd blue
홈 디렉터리를 지정하여 생성 /home/color 경로는 미리 생성되어 있어야 함.
#useradd -d /home/color/blue
UID와 그룹을 지정하여 사용자를 생성. color 그룹은 미리 생성되어 있어야 함.
#useradd -u 999 -g color blue
사용자 계정의 만료일을 지정하면서 생성
#useradd -e 2019-12-25 blue
생성시 기본옵션을 열람
#sudo useradd -D
3) passwd를 통한 패스워드 설정
passwd [option][username]
-d, --delete | 패스워드 삭제. 비밀번호없이 로그인 가능 |
-e, --expire | 사용자의 패스워드를 만료 |
-i, --inactive | 패스워드 만료후 비활성화전 유예기간 일 지정 |
-l, --lock | 사용자 패스워드에 락 걸어 로그인 막음 |
-n, --mindays | 비밀번호 변경할수 있을때까지 유지해야할 일수 설정 |
-q, --quiet | 화면 출력없이 명령을 수행 |
-S, --status | 사용자의 로그임명, 패스워드 상태, 설정여부, 마지막으로 변경한 날짜, 패스워드 변경까지 남은 기간 등 다양한 정보 출력 |
-u, --unlock | 락을 걸었던 패스워드를 다시 해제 |
-w, --warndays | 패스워드 만료전 경고날짜 지정 |
-x, --maxdays | 최대사용기간 설정 |
예제
사용자 패스워드 설정
$sudo passed blue
현재사용자 패스워드 변경
$passwd
지정한 사용자 패드워드 만료
$sudo passwd -e test
지정한 사용자의 패스워드 상태를 출력
$sudo passwd -S test
지정한 사용자 패스워드 락
$sudo passwd -l blue
지정한 사용자 패스워드 삭제
#sudo passwd -d blue
패스워드 변경후 7일간 변경 불가능, 365일간 사용할수 있고 5일전부터 패스워드 변경 경고. 만료후 10일 유예기간
$sudo passwd -n 7 -x 365 -w 5 -i 10 blue
4) su 명령어도 사용자 전환
switch user 약자
다른 사용자의 권한으로 실행
su [options] username
-c, --command | 지정한 사용자로 셸이 실행할 명령어 지정 |
-, -l, --login | 사용자가 직접 로그인했을때 동일하게 환경변수가 설정되고 홈 디렉토리로 이동 |
-s, --shell | 명시된 셸 사용 |
root 사용자 전환. 환경변수 등 사용자의 로그인 환경을 설정한 후 전환.
$su -
$su -l
$su -login
사용자 전환을 하지않고 일시적으로 지정명령 실행
$su root -c "vi /etc/passwd"
5) usermod를 사용하여 사용자설정 변경
사용자 셸, 홈디렉토리, 그룹, UID, GID 사용자 설정 변경
useradd 명렁어의 설정 대부분 적용가능.
usermod [options] username
-a,--append | 사용자에 그룹 추가하기위해 -G 옵션과 사용 |
-c,--comment | 사용자에 간단한 정보 입력 |
-l,--login | 로그인 이름 변경 |
-L, --lock | 패스워드에 락 |
-U,--unlock | 패스워드 락 해제 |
예제
사용자 홈 디렉터리 변경. -m 옵션까지 입력하면 내용도 복사
$usermod -d /home/whiteblue blue
사용자 그룹을 photo 사용자 그룹으로 변경
$usermod -g photo blue
6) userdel을 사용한 사용자 계정 삭제
사용자 계정 삭제
userdel [option] username
예제
계정삭제. 파일은 남아있음.
$userdel blue
-r 옵션을 통해 사용자 계정 삭제
#userdel -r blue
-f옵션으로 강제 삭제
#userdel -f blue
7) chage를 통한 패스워드 관리
사용자 패스워드 만료정보 설정
chage [options] username
-d,--lastday | 패스워드를 변경해야 할 날짜수 지정 |
-E,--expiredate | 계정이 만료되는 날 설정 |
-I,--inactive | 계정만료후 패스워드가 비활성화될때까지 유예기간을 설정 |
-l,--list | 계정의 매스워드 만료 정보 보여줌 |
-m,--mindays | 패스워드 변경할 때 최소 날짜를 지정 |
-M,--maxdays | 패스워드 변경할 때 최대날짜 지정 |
-W,--warndays | 패스워드 만료에 대한 경고 메시지를 보여줄 날짜를 지정 |
예제
만료정보 출력
$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 test
그룹계정 관리
1) group 개요
그룹이란 사용자를 묶어 관리 가능하게 하는 매커니즘.
모든 사용자는 UID와 그룹에 대한 식별자인 GID 가짐.
그룹을 통해 각 그룹에 보안설정, 접근설정, 권한등을 일괄 적용 관리.
사용자 생성시 사용자 이름과 동일한 그룹을 생성하여 포함시킴.
2) groupadd를 통한 그룹생성
새로운 그룹을 생성하기 위한 명령어
groupadd [options] groupname
-f, --force | 그룹을 생성할때 이미 생성되어 있더라도 성공으로 간주 |
-r, --system | 시스템 그룹을 생성 |
-g,--gid GID | 그룹의 양수의 GID를 지정 |
-o,--non-unique | 그룹을 생성할때 중복된 GID값 허용 |
예제
GID 지정하여 그룹을 생성
$sudo groupadd -g 550 colors
3) groupmod를 통해 그룹정보 변경
그룹관련 설정파일인 /etc/group, /etc/gshadow, /etc/passwd 에서 그룹관련 속성 변경
$sudo groupadd -g 550 colors
-g, --gid | 변경할 GID 설정 -o 옵션을 주지않는다면 유일한 정수값 |
-n, --new-name | 그룹의 이름 변경 |
colors 그룹 이름을 newcolors 그룹으로 변경
$sudo groupmod -n newcolors colors
GID 567로 변경
$sudo groupmod -g 567 colors
4) grouddel을 통해 그룹 삭제
주 그룹에 존재하는 사용자가 없어야 하고 사용자를 삭제한 후 그룹을 삭제할 수 있음.
또한 파일중 그룹이 설정된 파일이 없어야 한다.
groupdel [options] groupname
예제
그룹을 삭제
$sudo groupdel colors
5) gpasswd를 통해 그룹 패스워드 변경
그룹의 패스워드 정보는 /etc/group과 /etc/gshadow 에 저장되어 있음.
gpasswd [options] groupname
-a, --add user | 그룹에 사용자를 추가 |
-d, --delete user | 구룹에 사용자 삭제 |
-r, --remove-password group | 그룹의 패스워드 제거 그룹멤버는 newgrp 명령어를 사용해 그룹에 참가 |
-R, --restrict group | 그룹 접근 제한 패스워드 가진 그룹멤버만 newgrp통해 그룹에 참가 |
-A, --administrator user .. | 관리자로 지정할 사용자 설정 |
-M, --memvers user.. | 그룹멤버 설정 |
6) newgrp로 그룹 참여
현재 로그인 되어있는 세션의 GID 변경
그룹패스워드가 존재하는데 그룹에 속하지않는 사용자가 이 명령어를 사용하려면 패스워드 입력 필요.
newgrp groupname
현재 그룹대신 colors 그룹으로 전환
$newgrp colors
사용자 환경설정 파일
사용자 계정과 그룹정보는 /etc 디렉터리 이하에 존재
구분 | 파일명 | 설명 |
계정 및 그룹 설정파일 | /etc/passwd | 사용자 계정의 아이디, 그룹정보 등 계정정보 |
/etc/shadow | 암호화된 패스워드 및 정책 설정 정보 | |
/etc/group | 사용자 그룹의 기본정보 | |
/etc/gshadow | 사용자 그룹의 암호화된 패스워드 정보 | |
계정 환경설정 파일 | /etc/default/useradd | Useradd명령을 사용할 때 기본 설정 |
/etc/login.defs | 로그인 수행시 기본설정 | |
/etc/skel | 홈 디렉터리 생성시 기본으로 제공할 파일 |
1) /etc/passwd
로그인시 필요한 UID, GID, 홈디렉터리, 셸 등의 사용자 계정 정보를 포함.
모든 사용자에게 읽기권한 가진 파일
루트 사용자만 쓰기 허용
a b c d e f g
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
a 사용자 명 : 로그인 할때 사용하는 사용자이름
b 비밀번호 : x는 암호화된 패스워드를 보관하고있다는 의미
c UID : 사용자 ID
d GID : /etc/group 파일에 보관된 주 그룹 ID
e 사용자 설명 : 사용자에대한 추가설명 코멘트 필드
f 홈 디렉터리 : 기본디렉터리로 절대경로로 설정
g 셸 : 셸의 위치를 절대 경로로 지정.
2) /etc/shadow
사용자 패스워드를 해시 알고리즘으로 암호화한 값과 패스워드와 연관된 여러 속성을 단고있는 파일
/etc/passwd 파일은 각 사용자들에 대한 암호 정보를 담고있음.
구조
francis: $fislf2R$R45trhertsdfs:18119:0:99999:7: : :
사용자명:패스워드:마지막 변경일: 패스워드 최소사용일:최대사용일:만료경고일:유예기간:만료일
3) /etc/default/useradd
사용자 생성시 사용되는 기본 설정값이 저장된 환경설정 파일
useradd -D 로 내용확인 가능.
4) /etc/login.defs
쉐도우 패스워드 스위트를 위한 읽기 전용 환경설정파일
패스워드 최대 사용일 PASS_MAX_DAYS 패스워드 최소사용일 PASS_MIN_DAYS 패스워드 만료 경고일 PASS_WARN_AGE 등 설정
5) /etc/group
그룹에 속한 사용자를 관리하는 파일. 그룹에 여러 사용자가 속할 수 있음.
구조
mail:x:12:mail,postfix
그룹명:패스워드:GID:멤버목록
6) /etc/gshadow
그룹의 암호화된 비밀번호 정보를 포함.
루트권한 사용자만 접근 가능
구조
test:$65$ssafhasrjkg/sasldfjsadkf:test:francis
그룹명:패스워드:그룹관리자:멤버목록
사용자 및 그룹 정보 관련 명령어
1) users
현재 호스트에 로그인되어 있는 모든 사용자 출력
2) who
현재 호스트에 로그인되어 있는 모든 사용자 출력
터미널 종류, 로그인 시각 등 기본적으로 출력
who [options]
3) whoami
현재 로그인한 사용자의 사용자명 출력
id명령어에 -un 옵션을 사용한 것과 동일
4) w
현재 로그인한 사용자가 어떤시스템에서 로그인했는지 어떤 프로세스를 실행하고있는지 출력
w [option] [user]
-h , --no-header 컬럼의 헤더를 출력하지 않음
-s, --short 정보를 간략히 출력
5) logname
현재 로그인한 사용자 로그인 이름을 출력
6) id
지정한 사용자의 사용자 정보와 그룹정보를 출력하거나 현재 사용자 정보를 출력
id [options] [username]
7) groups
특정 사용자나 현재 로그인한 사용자가 속한 그룹을 표시
8) lslogins
wtmp 및 btmp 로그를 바탕으로 시스템의 전체 사용
lslogins [options]
9) pwconv, pwunconv, grpconv, grpunconv
pwconv 는 /etc/passwd로부터 /etc/shadow 생성
pwunconv 는 /etc/passwd와 /etc/shadow를 /etc/passwd를 생성하고 /etc/shadow를 삭제
grpconv는 /etc/group로부터 /etc/gshadow를 생성
grpunconv는 /etc/group와 /etc/gshadow를 /etc/group를 생성하고 /etc/gshadow를 삭제
10) pwck, grpck
pwck는 /etc/passwd 잘못된 내용이 있는지 점검하는 명령어
grpck는 /etc/group 점검하는 명령어