사용자 추가 관리
리눅스에서 사용자 관리에 사용되는 파일들
user1:x:1000:1000:user1:/home/user1:/bin/bash
1번째 필드 : 계정명 필드("user1")
2번째 필드 : password필드. x표시는 여기에 기록되지 않을 것을 의미함.
3번째 필드 : UID필드(계정을 식별하는 ID값이 기록됨)
4번째 필드 : GID필드(그룹 계정을 식별하는 ID값이 기록됨)
5번째 필드 : Comment 필드로 별칭이나 설명등이 저장된 필드
6번째 필드 : 홈 디렉터리 필드(계정의 홈디렉터리 경로를 표기함)
7번째 필드 : Shell필드(사용자가 사용하는 shell을 표기함.)
user1:x:1000:
1번째 필드 : 그룹명(user1 그룹명)
2번째 필드 : 그룹에 대한 패스워드, x는 다른 곳에 패스워드 저장함.
3번째 필드 : 그룹ID(GID)
4번째 필드 : 그룹의 구성원
user1:$6$7xWQF1x0XqDBkfqi$jiMNTb...(생략)...ysH0::0:99999:7:::
1번째 필드 : 사용자 계정명(user1)
2번째 필드 : 패스워드 필드(sha512 해쉬함수를 사용한 결과값)
해쉬함수란? 단반향 함수로 특정 길이의 값으로 연산된 결과를 출력함.
해쉬함수 값의 특징은 해쉬값을 원래의 문자열로 되돌릴 수 없다.
해쉬값에 글자 하나라도 변경되면 값의 차이를 확실히 알 수 있음.
3번째 필드 : 패스워드 최초 생성일(단위-day, 기준시-1970년 1월 1일)
4번째 필드 : 패스워드 최소 사용기간
5번째 필드 : 패스워드 만료 기간
6번째 필드 : 패스워드 만료 경고 시점
7번째 필드 : 만료 시점 이후에 계정으로 접속할 수 있는 기간(INACTIVE값)
8번째 필드 : 사용자 계정 만료 시점 (계정을 더 이상 사용할 수 없는 시점)
9번째 필드 : 사용하지 않는 필드로 Flag필드
/etc/shadow 파일을 열어보면 첫 줄에 root : LOCK 설정이 되어있는 것을 확인할 수
있는데 root 계정 자체로 작업을 하는 것이 아닌, sudo 명령어를 사용하여 권한을 넘겨 받아
작업을 하겠다는 것을 의미한다
계정에 !!(Factorial)이 있을 경우 비밀번호도 설정되어 있지 않고,
사용도 하지 않는다는 의미이다
user1:!::
1번째 필드 : 그룹명
2번째 필드 : 패스워드(해쉬값)
3번째 필드 : 그룹의 관리자
4번째 필드 : 그룹의 구성원
# cat /etc/default/useradd
# useradd defaults file
GROUP=100 # 기본 그룹 ID
HOME=/home # 사용자 홈 디렉터리 경로 지정
INACTIVE=-1 # 사용자 패스워드 사용기간 만료 후에 계정 사용 불가능해지는 시점
# "0"이면 바로 사용 불가능, "-1"이면 이 기능 사용하지 않음.
EXPIRE= # 사용자 계정 만료일 지정(형식 : YYYY-MM-DD)
SHELL=/bin/bash # 사용자 로그인시 사용할 기본 쉘 설정
SKEL=/etc/skel # 사용자 계정 생성시 홈디렉터리에 생성되는 환경 파일을 지정
CREATE_MAIL_SPOOL=yes # 새로 생성되는 계정의 메일 저장 파일 생성여부 결정
- MAIL_DIR /var/spool/mail => 각 계정사용자들의 메일파일이 저장될 위치를 지정
- PASS_MAX_DAYS 99999 => 계정사용자들이 패스워드를 변경하지 않고 동일한 패스
워드를 지속적으 로 사용할 수 있는 최대일자
- PASS_MIN_DAYS 0 => 패스워드 변경없이 사용할 수 있는 최소일자(정해진 일 수만큼 반드시 사용해야함)
- PASS_MIN_LEN 5 => 각 계정사용자들이 패스워드문자로 지정할 수 있는 최소바이트수(영문자수)
- PASS_WARN_AGE 7 => 패스워드 종료일자가 다가오기 몇일 전 부터 패스워드 사용불가에 대한 안내메시지를 알려줄 것인가를 지정
- UID_MAX 60000 => 리눅스 서버에서 생성할 수 있는 UID의 최대값
- UID_MIN 1000 => 일반사용자의 UID번호를 할당할 때에 자동 할당할 최소 UID번호를 지정
- GID_MAX 60000 => 새로 생성되는 그룹에서 지정할 수 있는 최대 GID번호
- GID_MIN 1000 => 새로 생성되는 그룹의 GID 시작번호
- CREATE_HOME yes => 새로 생성되는 계정사용자의 홈디렉토리를 생성할 것인가를 결정
- UMASK 077 => 퍼미션이 설정되지 않은 경우 지정된 퍼미션으로 설정(기본 022 권한)
- USERGROUPS_ENAB yes => 사용자 대상 그룹을 활성화. 삭제 대상 사용자의 그룹이 존재하다면 그 그룹도 함께 삭제
- SHA512_CRYPT_ENAB yes => 비밀번호 암호화 방식을 활성화
/var/spool/mail
사용자 mail함 파일이 생성되는 디렉터리
/etc/skel
사용자의 홈 디렉터리를 구성하는 환경 파일이 저장되는 디렉터리
/home/
사용자 생성 시 사용되는 기본 홈 디렉터리 생성 위치
사용자 추가 명령어(useradd) - 관리자 권한
2.옵션
-u UID, -g GID
UID, GID 값을 지정하여 계정 생성 시 사용하는 옵션
-c
Comment 지정하는 옵션
-d
홈 디렉터리 지정하여 생성하는 옵션
-s
사용자에게 부여할 shell 종류를 지정 (/etc/shells를 참고)
-e
사용자 계정 만료 설정(YYYY-MM-DD 형식으로 지정함)
-D
useradd 기본 설정 정보 확인 (/etc/default/useradd)
-m -k
/etc/skel과 같은 스켈레톤 디렉터리를 지정할 수 있다
스켈레톤 디렉터리란?
홈디렉터리 생성 시 사용할 정보를 가지고 있는 디렉터리를 의미한다.
사용자 정보 변경(usermod)
형식
usermod [옵션] 계정명
옵션
대부분 useradd 옵션과 동일하다
-l : 아이디[계정명]를 수정하는 옵션
예시) usermod -l testuser2000 testuser2 => testuser2->testuser2000
사용자 정보 변경(userdel)
형식
userdel [옵션] 계정명
옵션
대부분 useradd 옵션과 동일
-r : 계정과 연관된 파일, 디렉터리를 동시에 삭제
사용자 패스워드 설정 관리(passwd)
형식
passwd [옵션][사용자 계정]
옵션
-S
계정의 패스워드 상태를 출력 (/etc/shadow에 포함된 내용을 출력)
-l
계정의 패스워드 Lock 설정(잠금)
아이디, 패스워드로 계정 접근 불가 (root는 권한 설정 후 접근 가능)
-u
계정의 패스워드 UnLock 설정 (잠금 해제)
-d
계정의 패스워드 삭제
옵션이 없는 경우, 사용자 패스워드 설정 또는 변경
사용자 계정을 사용하지 않는 현재 작업 중인 사용자가 대상
passwd를 사용하지 않고도 vim 편집기로 수정할 수 있다
허가권(Permission)
허가권의 종류
r(read) : 읽기
w(write) : 쓰기(수정)
x(eXecute) : 실행
s
setUID, setGID 권한
setUID는 파일의 실행을 UID(소유자)의 권한으로 실행
setGID는 파일의 실행을 GID(그룹)의 권한으로 실행
t
sticky bit 권한
공유 디렉터리에 대한 설정 권한. 파일의 삭제 권한을 소유자와 root에만 부여 !!
허가권 적용
파일/디렉터리에 따라서 적용 결과가 달라질 수 있다
r : 파일에 대한 내용 읽기 권한(파일 내에 있는 내용을 읽을 수 있는 권한)
w : 파일에 대한 내용 쓰기 및 수정 권한
x : 파일에 대한 실행 권한
r : ls 명령어 실행에 대한 권한. 디렉터리 목록 읽기
w : 디렉터리 내에 있는 파일이나 디렉터리에 대한 추가, 삭제, 변경 권한
x : cd 명령어에 대한 권한(디렉터리 내에 있는 파일/디렉터리에 대한 접근 권한)
-rw-r--r--. 1 root root 11 Jul 23 10:18 test3
drwxr-xr-x. 2 root root 6 Jul 23 11:54 testDir
10개 자리중 첫번째 타입 : -, d, l, c, b ...
나머지 9자리는 권한으로 설정. 3자리씩 묶어서 표현
- 첫번째 3자리 : 사용자(소유자)
- 두번째 3자리 : 그룹
- 세번째 3자리 : other(이외-사용자와 그룹 이외)
8진수란? 한자리의 숫자가 0 ~ 7사이의 값으로 이뤄진 방식을 의미함.
2진수 퍼미션
======================
0 : 000 ---
1 : 001 --x
2 : 010 -w-
3 : 011 -wx
4 : 100 r--
5 : 101 r-x
6 : 110 rw-
7 : 111 rwx
** UMASK : 허가권에 대한 기본값을 설정하는 것이 UMASK값이다.
파일 생성시 권한 666을 부여
디렉터리 생성시 권한 777을 부여
하는 경우에 UMASK값을 통해서 부여되는 권한에 대해서 설정 적용.
UMASK : 022
- 파일 생성 권한 부여 : 666
110 110 110
umask 000 010 010
-----------------
110 100 100 => 644
- 디렉터리 생성 권한 부여 : 777
111 111 111
umask 000 010 010
-----------------
111 101 101 => 755
특수 권한 설정
문자를 이용하는 경우
u, g에 +s권한을 부여하면 된다
ex) chmod u+s 대상파일/디렉터리
숫자를 이용하는 경우
setUID 설정 권한에 +4000
ex) 755 권한 대상에 setUID 설정 시 권한값은 "4755"
setGID 설정 권한에 +2000
ex) 755 권한 대상에 setGID 설정 시 권한값은 "2755"
문자를 이용하는 경우
o(other)+t 권한을 부여하면 된다
ex) chmod o+t 대상파일/디렉터리
숫자를 이용하는 경우
sticky bit 설정은 권한에 +1000
ex) 755 권한 대상에 sticky bit 설정 값은 "1755"
특수 권한 설정 중에 'x' 권한이 없는 경우
특수 권한 표시는 대문자로 표기된다.
=> 특수 권한을 받아도 해당 일반 권한 r, w, x가 없다면 대문자로 표기된다.
소유권(chown)
파일이나 디렉터리에 대한 소유권 설정(유저와 그룹을 변경할 수 있음)
UID, GID 변경
ex) chown testuser1:root /Per_DIR
명령어 형식에서 콜론(:) 대신 '.'을 사용하여 변경도 가능하다.
소유권에 대한 정보가 변경될 경우 Permission(허가권)에 대한 내용도 변경된다.
ipconfig, netstat : ip 주소를 불러올 수 있는 명령어
네트워크 주소 검색 명령
ipconfig
네트워크 정보(NIC)를 출력
ip addr
서버의 IP 주소 정보를 출력
nX0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.31.14.223 netmask 255.255.240.0 broadcast 172.31.15.255
inet6 fe80::94:77ff:fe73:6371 prefixlen 64 scopeid 0x20<link>
ether 02:94:77:73:63:71 txqueuelen 1000 (Ethernet)
RX packets 225942 bytes 56264468 (53.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 213917 bytes 30128035 (28.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
<UP,BROADCAST,RUNNING,MULTICAST> : NIC 상태 정보 출력
inet : IPv4 주소
netmask : SubNetMask(서브넷 마스크)로 네트워크 주소 영역을 표시한다
broadcase : 네트워크 내에 전체 통신을 위한 주소
inet6 : IPv6 주소
prefixlen : 네트워크 영역 비트를 표기하는 값
ether : MAC 주소
서비스 확인하는 명령어
netstat
네트워크 통신 정보 확인 (Connection, Port, Protocol, IP address)
Local Address : 서버로서 연결하는 IP 주소
Foregin Address : 접근 주소 (공인IP)
ss
네트워크 상태를 확인하는데 사용
원래는 netstat를 사용했는데, 최근에는 ss를 주로 사용하는 추세이다.
ss 옵션들
ss -a : 모든 포트 확인
ss -t : TCP 포트 확인
ss -u : UDP 포트 확인
ss -l : LISTEN 상태 포트 확인
ss -p : 프로세스 표시
ss -n : 호스트, 포트, 사용자명을 숫자로 표시
위 옵션들을 병합하여 사용하는 것도 가능하다.
ex) ss -tln
프로세스 관리
프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
즉, 컴퓨터에서 현재 실행되고 있는 프로그램들의 목록을 의미함
프로세스 관리란?
현재 실행되고 있는 프로세스 목록을 보고, 프로세스를 제거하는 것을 의미한다
1-1. 옵션
-e
모든 프로세스 보기
-f
Full-Format으로 출력하기
-l
Long-Format으로 출력하기
-u
사용자 이름과 시작 시간 출력하기
-x
로그인된 사용자 및 시스템 프로세스 출력하기
-a
다른 사용자 프로세스 출력하기
1. ps -ef (ps -aux)
제일 많이 사용하는 명령어 방식 (ps -e보다 더 상세한 정보를 출력해준다)
2. ps -aux
가상 메모리 + RSS까지 출력
3. ps -el
모든 프로세스와 long-format을 함께 출력
출력 항목들
PID
Process ID를 의미한다
PPID
실행시킨 Parent ID를 의미한다
1번 : System에서 동작하는 것들
2번 : Thread에서 동작하는 것들
pst : 원격 연결
kill PID : 비정상적인 프로세스들을 종료시킴 => Terminate
top (프로세스 모니터링 프로그램)
유닉스 계열 시스템에서 프로세스 목록을 CPU 사용률이 높은 것부터 보여주는 소프트웨어
출력 내용
1행 : 시스템의 가동시간과 평균 부하의 숫자를 출력
2행 : 현재 실행중인 프로세스들의 상황
3행 : CPU의 사용에 대한 상황
4행 : 메모리의 사용에 대한 상황
5행 : Swap Memory의 사용에 대한 상황
kill 명령어
특정 프로세스에 특정 시그널을 보낸다.
시그널 리스트 보기
kill -l(소문자 L)
9) SIGKILL
정상 종료로 중지가 불가능한 경우에 강제 종료.
(remote에서는 killed가 출력된다)
15) SIGTERM
정상 종료(기본값) - Terminated 출력됨
그 밖에
19) SIGSTOP
일시 정지
-bg (background)
-fg (forground)
lsof 명령어
list open file 명령어로 프로세스에서 알려진 파일들을 보는 명령어이다
사용법
lsof [옵션][파일/디렉터리]
옵션
-c
특정한 명령어나 프로그램이 참조하고 있는 파일들의 목록을 출력
+d
지정한 디렉터리 또는 디렉터리 내에서 사용되고 있는 파일들에 대한 정보를 출력
허가되지 않은 디렉터리 내에서 작업하는 프로세스나 사용자 및 명령어를 검색하고자
할 때 유용하다
-F
출력될 결과에서 특정한 필드를 출력할 수 있는 옵션으로 많은 정보들 중에 원하는 필드만
출력하여 빠른 정보를 출력할 수 있다
기본값 -Fp 설정이 되어있기 때문에 별도의 키를 사용하지 않는다면 PID 정보만 출력한다
-g
GPID(Group PID)를 가진 프로세스를 출력한다
-i
설정한 네트워크(Internet) 소켓에 대한 정보를 출력하여 프로토콜, 서비스, 호스트 및
IP에 대한 정보를 출력한다
-N
NFS 서버가 구축된 환경에서 NFS로 연결되어 있는 파일들에 대한 정보를 출력한다
-G
GPID에 해당되는 정보를 출력하며 여러 개를 출력할 경우 "."으로 구분할 수 있다
-l
로그인 사용자 이름 대신 UID로 출력한다
-n
호스트 이름 대신에 IP address를 출력한다
-P
/et/services에 등록되어 있는 이름 대신에 포트 번호를 출력한다
-u
사용자 ID 및 UID 값으로 지정할 수 있으며, 다수의 사용자를 지정하기 위해서 콤마(,)를
사용할 수 있고 특정한 사용자를 제외한 정보를 출력하기 위해서는 "^(Caret)사용자"로
설정하여 제외시킬 수 있다