3. LVM 관련명령어
(1) vgscan
1) 설명: 디스크에 있는 볼륨그룹(VG:Volume Group)를 검색하여 /etc/lvmtab 파일을 생성한다.
fdisk를 이용하여 파티션을 속성을 LVM으로 지정한 후에 이 명령을 사용한다.
2) 사용법
vgscan
(2) pvcreate
1) 설명: 물리적 볼륨(PV:Physical Volume)을 생성하는 명령어이다. fdisk를 이용하여 파티션을
분할하고 LVM 속성으로 지정한 뒤에 해당 파티션을 PV로 만들 때 사용하는 명령이다.
2) 사용법
pvcreate 디바이스명
3) 사용예
pvcreate /dev/hdb1
(3) vgcreate
1) 설명: 볼륨그룹을 생성하는 명령어로 생성된 PV를 지정한 볼륨그룹에 포함시키면서 생성한다.
2) 사용법
vgcreate 볼륨그룹명 디바이스명 디바이스명
3) 사용예
vgcreate lvm /dev/hda7 /dev/hdb1
=> lvm 이라는 볼륨그룹을 생성하고 /dev/hda7, /dev/hdb1 이라는 PV를 포함시킨다.
(4) vgdisplay
1) 설명: 볼륨그룹의 속성과 정보를 보여주는 명령어이다.
2) 사용법
vgdisplay [option] [볼륨그룹명]
3) option
-v: 좀 더 자세히 보여주는 옵션으로 Volume Group이외에 gical Volume과 Physical Volume도
같이 보여준다.
4) 사용예
ㄱ. [root@www root]# vgdisplay
=> Volume Group의 내용을 보여준다.
ㄴ. [root@www root]# vgdisplay -v lvm
=> lvm이라는 볼륨그룹의 내용을 자세히 보여준다.
(5) lvcreate
1) 설명: 볼륨그룹안에 LV(Logical Volume)을 생성하는 명령이다.
2) 사용법
lvcreate 옵션 볼륨그룹명
3) option
-L: LV의 사이즈를 지정하는 옵션으로 K(kilobytes), M(megabytes), G(gigabytes), T(terabyt
es) 단위를 붙여 지정가능하다.
-l: LV의 사이즈를 지정하는 옵션으로 pe의 개수로 용량을 지정한다. 참고로 보통 1pe당 4MB
이다.
-n: LV의 이름을 지정하는 옵션이다.
4) 사용예
ㄱ. [root@www root]# lvcreate -L 2000M -n backup lvm
=> lvm이라는 볼륨그룹에 backup라는 이름으로 2Gigabytes 용량으로 LV을 생성한다.
ㄴ. [root@www root]# lvcreate -l 250 -n data lvm
=> lvm이라는 볼륨그룹에 data라는 이름으로 250pe(약 1GB)용량으로 LV을 생성한다.
(6) lvscan
1) 설명: 디스크에 있는 Logical Volume을 찾아준다.
2) 사용법
lvscan [option]
3) option
-v: 정보를 자세히 보여준다.
4) 사용예
lvscan
(7) lvdisplay
1) 설명: Logical Volume의 정보를 보여준다.
2) 사용법
lvdisplay [option] LV명
3) option
-v: 정보를 자세히 보여준다.
4) 사용예
[root@www root]# lvdisplay -v /dev/lvm/data
=> /dev/lvm/data라는 LV의 정보를 자세히 보여준다.
(8) vgextend
1) 설명: 미리 생성된 Volume Group에 추가로 Phycical Volume을 추가할 때 사용한다.
2) 사용법
vgextend 볼륨그룹명 새PV명
3) 사용예
[root@www root]# vgextend lvm /dev/hdc1
=> lvm이라는 볼륨그룹에 /dev/hdc1을 추가한다.
(9) vgreduce
1) 설명: 볼륨그룹에 있는 Physical Volume을 삭제하는 명령이다.
2) 사용법
vgreduce 볼륨그룹명 PV명
3) 사용예
[root@www root]# vgreduce lvm /dev/hdc1
=> lvm이라는 볼륨그룹에서 /dev/hdc1을 삭제한다.
(10) lvextend
1) 설명: Logical Volume의 용량을 확장하는 명령이다.
2) 사용법
lvextend 옵션 [볼륨그룹명] LV명
3) option
-l +사이즈: 지정한 PE수만큼 용량을 늘린다.
-L +사이즈[kmgt]: 지정한 사이즈만큼 용량을 늘린다. 단위를 표시하지 않으면 기본 Megabytes
단위이다.
4) 사용예
[root@www root]# lvextend -L +200M /dev/lvm/data
=> 기존의 용량에 추가로 200MB를 할당한다.
(11) lvreduce
1) 설명: Logical Volume의 용량을 줄이는 명령이다.
2) 사용법
lvreduce 옵션 [볼륨그룹병] LV명
3) option
-l -사이즈: 지정한 PE수만큼 용량을 줄인다.
-L -사이즈: 지정한 사이즈만큼 용량을 줄인다. 단위를 표시하지 않으면 기본 단위는 Megabytes
이다.
4) 사용예
[root@www root]# lvreduce -L -500 /dev/lvm/data
=> /dev/lvm/data의 용량을 500MB 줄인다.
(12) vgchange
1) 설명: 볼륨그룹을 속성을 변경하는 명령으로 볼륨그룹을 사용가능여부, 최대 LV 갯수등을 변경
할 수 있다.
2) 사용법
vgchange 옵션 볼륨그룹명
3) option
-a y|n : 볼륨그룹의 사용여부를 지정한다.
-l 갯수: 해당 볼륨그룹에 생성할 수 있는 최대 Logical Volume수를 지정한다.
4) 사용예
ㄱ. [root@www root]# vgchange -a y lvm
=> lvm이라는 볼륨그룹을 활성화시킨다.
ㄴ. [root@www root]# vgchange -a n lvm
=> lvm이라는 볼륨그룹을 비활성화시킨다.
ㄷ. [root@www root]# vgchange -l 100 lvm
=> lvm이라는 볼륨그룹을 최대 Logical Volume수를 100개로 지정한다.
(13) vgremove
1) 설명: 볼륨그룹을 제거하는 명령이다.
2) 사용법
vgremove 볼륨그룹명
3) 사용예
[root@www root]# vgremove lvm
=> lvm이라는 볼륨그룹을 삭제한다.
정보보안전문가
LVM명령어
쿼터명령어
쿼터 제한 영역
1. 사용자별 하드 제한 영역 (User Hard limit)
- 사용자가 파일시스템에서 사용 할 수 있는 최대 공간
- 만약, 사용자가 자신의 쿼터 제한 크기에 도달하면 사용자는
더이상 디스크에 파일을 생성할 수 없다.
2. 사용자별 소프트 제한 영역(User Soft limit)
- 사용자가 소프트 제한 여역에 도달할 때까지 데이터를 자유롭게
저장할 수 있다.
- 소프트 제한 영역은 일종의 경고로써, 아직 작업 공간에 여유가
있을때 불필요한 파일을 정리하도록 알려주는 역할을 한다.
3. 그룹별 하드 제한 영역 (Group Hard limit)
- 쿼터 시스템에 의해 그룹을 저장하는 최종 제한 영역이다.
해당 영역을 초과하면 사용자의 쿼터를 초기화 하지 않는 경우라도
해당 그룹에 속하는 어떠한 사용자는 파일을 쓸 수 없다.
4. 그룹별 소프트 제한 영역(Group Soft limit)
- 사용자별 소프트 재한영역과 동일하게 작용하며, 개인 소유 파일이아닌
그룹 소유 파일에 적용된다.
5. 유예기간 (Grace)
- 소프트 제한 영역을 넘어서면 사용자나 그룹은 유예기간(Grace period)
에 접어들게 된다. 유예기간이 끝나면 쿼터 제한을 초과하는 상황이
벌어지지 않도록 충분히 파일을 삭제하지 않을 경우 소프트 제한영역은
하드 제한영역으로 바뀐다. 유예기간은 월, 주, 일, 시, 분, 초를 나타내는
숫자료 표시할 수 잇으며 기본 값은 7일이다.
quotacheck : quota설정파일이 존재하는지 설정은 이상없는지 등의 quota설정 체크
edquota : 디스크사용량제한(quota) 설정하기
quota : 현재 설정된 quota내용확인하기
quotaon : 설정된 quota 가동하기
quotaoff : 가동중인 quota 중지하기
repquota : 현재 사용중인 quota설정 및 용량제한내역 보기
------------------------------------------------------------------------------------------
quota [-u] [옵션] [사용자]
quota [-g] [옵션] [그룹]
- 사용자나 그룹의 제한량을 표시한다
- root만 -u 옵션을 통해 다른 사용자의 할당량을 확인 할 수 있다.
옵션 -q : 제한량의 설정값을 초과한 경우에만 간단한 메세지 출력
-v : 자세한 모드로 저장 공간이 할당되지 않은 경우에도 제한량의
정보를 보여준다.
ex) quota -uv [사용자] //해당 사용자의 모든 제한량을 점검
------------------------------------------------------------------------------------------
quotaon - 하나 이상의 파일시스템에 대해 설정된 제한량을 적용
quotaon [옵션] [파일시스템]
옵션 -a : /etc/fstab에 등록되고 읽기와 쓰기 쿼터 사용으로 표시된
모든 파일 시스템에대해 쿼터를 적용한다.
-g : 그룹 쿼터를 적용한다. -a 옵션을 사용할 경우 그룹 쿼터를
동시에 적용하므로 해당 옵션은 불필요하다.
-u : 기본 옵션으로, 사용자에게 쿼터를 적용한다.
-v : 상세하게 출력
ex) quotaon -av #/etc/fstab에 정의된 것에 쿼터를 모두 적용
quotaon -gv /home #파일시스템 /home 사용자에
쿼터 적용
------------------------------------------------------------------------------------------
quotaoff - 하나 이상의 파일시스템에 적용된 쿼터 사용을 중지
quotaoff [옵션] [파일시스템]
옵션 -a : /etc/fstab에 정의된 모든 파일시스템 대한 쿼터 적용을
중지 한다.
-g : 그룹에 적용된 쿼터 사용을 중지
-a : 사용자 쿼터 적용을 중지
-v : 쿼터 적용이 중지되는 각 파일시스템에 대해 자세히 표시
ex) quotaoff -av #모든 쿼터 적용을 중지
------------------------------------------------------------------------------------------
quotacheck [옵션] [파일시스템]
- 파일시스템을 점검하고 쿼터 설정에 대한 데이터베이스를 컴파일
* cron을 이용해서 주단위로 'quotacheck -a' 옵션 실행을 권장함
옵션 -a : /etc/fstab에 정의된 모든 쿼터 파일시스템을점검
usrqouta와 grpqouta 적용 시 모두 점검 가능
-g : 그룹에 대한 쿼터 정보만 컴파일한다.
-u : 기본값, 사용자에 쿼터 정보만 컴파일 한다.
-v : 실행결과를 자세하게 표시
-n :복제 된 구조체의 첫 번째 사본을 사용합니다.
-m: 파일 시스템을 읽기 전용으로 다시 마운트하지 않는다.
------------------------------------------------------------------------------------------
edquota - 사용자와 그룹 쿼터 설정을 수정한다.
옵션 -g : 그룹쿼터 수정 (-g 사용 시 -u 옵션도 따라와도 모두
그룹명으로 인식한다)
-t : 유예기간을 변경한다.
-u : 사용자 쿼터설정을 변경 (-g와 사용시 무시된다.)
ex) edquota -u [사용자]
해당 사용자의 대한 쿼터 설정 변경
ex) edquota -tu
모든 파일 시스템의 사용자에대한 유예기간을 변경한다
------------------------------------------------------------------------------------------
repquota - 쿼터 운영 상황을 출력
-a : 모든 쿼터 파일시스템 정보 출력
-g : 그룹 설정을 요약
-u : 사용자 쿼터 설정 요약
-v : 요약정보를 자세하게 표시하며 출력결과에 머리말을 추가
제한여부
quota 제한을 받는지 여부를 나타내며 ' - ' 이면 제한에 걸리지
않았음을 의미하며, ' + ' 이면 제한에 걸려 있음을 의미함
첫 번째는 Block제한, 두 번째 파일제한을 뜻한다.
------------------------------------------------------------------------------------------
setquota [옵션] [이름] [Block soft limit] [Block hard limit]
[inode soft limit] [inode hard limit] [파티션 명]
-u : 사용자
-g : 그룹
-a : 해당 시스템의 모든 설정
------------------------------------------------------------------------------------------
쿼터
쿼터: 사용자별 공간 할당
-파일 시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한 하는 것
쿼터 제한 영역
- 1. User Hard Limit
-사용자가 사용할 수 있는 최대 공간
2. User Soft Limit
- 사용자가 Soft Limit 영역에 도달할 때 까지 데이터를 자유롭게 저장할 수 있다.
3. Group Hard Limit
4. Group Soft Limit
5. Grace (유예기간)
-소프트 제한 영역을 넘어서면 사용자나 그룹은 유예기간에 접어들게 된다.
- 설정한 유예기간 시간동안 파일을 삭제하여 용량을 확보하지 않는 경우에는 HardLimit로 변경된다.
쿼터 설정
1. 초기화
- VM스냅샷으로 VM초기화 후
- Disk 2개 추가(1GB)
VMware Settings - ADD -> Hard Disk
Disk 추가 적용을 위해 Reboot
2. Disk 추가 확인
#fdisk -l
#fdisk [확인한 장치명]
n //새로운파티션
p //주파티션 생성
1 //파티션 번호
enter //디스크 처음부터
enter //마지막 까지 파티션 생성
w //저장 후 종료
3. 파일 시스템 생성
#mkfs -t ext3 /dev/sdb1
#mkfs -t ext3 /dev/sdc1
4. 마운트 포인트 생성, 마운트
#mkdir /quota_user_dir
#mkdir /quota_group_dir
#mount /dev/sdb1 /quota_user_dir
#mount /dev/sdc1 /quota_group_dir
5. 마운트 적용 및 fstab 등록
#df -h
/dev/sdb1
/dev/sdc1
#blkid(부팅해도 살아남는 것)
UUID=5c8537e2-c074-42d8-943d-c83eac6c064c
UUID=96a67837-3e1f-4fb9-b33d-dbc3719e6aee
#vi /etc/fstab
UUID=5c8537e2-c074-42d8-943d-c83eac6c064c /quota_user_dir ext3 defaults,usrquota 0 0
UUID=96a67837-3e1f-4fb9-b33d-dbc3719e6aee /quota_group_dir ext3 defaults,grpquota 0 0
사용자 쿼터 옵션 :usrquota
그룹 쿼터 옵션 :grpquota
#reboot
#df -h
#mount
/dev/sdb1 on /quota_user_dir type ext3 (rw,usrquota)
/dev/sdc1 on /quota_group_dir type ext3 (rw,grpquota)
참고) 마운트해제
#umount [마운트포인트명]
6.쿼터 사용자 계정 및 그룹
#groupadd q-group
#useradd -g q-group q-user1
#useradd -g q-group q-user2
7. 쿼터 적용을 위한 selinux 비활성
#setenforce 0 //selinux 비활성 (일시적)
# vi /etc/sysconfig/selinux
7번재 줄 SELINUX=enforcing --> SELINUX=disabled //selinux 비활성 (영구적)
8. 쿼터 지원 여부 확인
#rpm -qa | grep quota //quota 패키지 설치 여부 확인
#yum -y install quota //auota 설치
#rpm -qa | grep quota //확인
9. 쿼터 설정 파일 생성
#cd /quota_user_dir //쿼터를 적용시킬 파티션의 최상위 디렉토리로 이동
#quotaoff /dev/sdb1 //쿼터설정을위해 설정 off
#quotacheck -u /dev/sdb1
-쿼터 설정파일 확인하여 없으면 생성 있으면 확인
-u 사용자 쿼터 확인
-g 그룹 쿼터 확인
#ls //aquota.user 생성 확인
#quotaon /dev/sdb1 //쿼터시작
#edquota -u [계정명]
#edquota -u q-user1 //텍스트 편집기를 이용하여 q-user1 계정의 사용자 쿼터 설정
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 0 0 0 0 0
용량 파일갯수
(값 변경)
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 20M 40M 0 10 20
#edquota -t //유예기간 설정
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb1 7days 7days
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb1 2minutes 2minutes
#repquota -u /dev/sdb1 /설정된 값 확인
#chown q-user1:root /quota_user_dir
세션 추가 후 2번 세션 유저 이동
$cd /quota_user dir
$cp /boot/vm* ./file1
$ls /file1 확인(4.1M)
soft hard
(2.0M) (4.0M)
file6
$cp file1 file3
$cp file1 file4
$cp file1 file5
$cp file1 file6
2분 경과 후 (유예기간)
$cp file1 file7
디스크 할당량 초과
(1번세션) #repquota -u /dev/sdb1 /설정값 확인
$rm -rf file* //file 내용 복사한 것 삭제
그룹 쿼터 적용
쿼터 설정 파일 생성
#cd /quota_group_dir
#quotacheck -g /dev/sdc1
#ls
aquota.group //확인완료
쿼터 적용 방법
(1) #edquota //텍스트 편집기 이용
(2) #setquota //명령어를 이용한 설정 변경
#setquota -g [그룹명] [인자값] [장치명]
인자값
[Block Soft Limit] [Block hard limit] [File Soft Limit] [File Hard Limit]
ex) setquota -g q-group 10M 20M 10 20 /dev/sdc1
유예 기간 적용 방법
(1) #edquota -t //텍스트 편집기 이용
(2) #setquota -t //명령어를 이용하여 유예기간 결정
ex) #setquota -tg[BLOCK GRACE SEC] [FILE GRACE SEC] [장치명]
#setquota -tg 120 120 /dev/sdc1
확인 : repquota -g /dev/sdc1
quotaon /dev/sdc1
chown root:q-group /quota_group_dir
chmod 770 /quota_group_dir
용량 : 10M/20M
파일 : 10/20
1번 세션 2번 세션
q-user1 q-user2
$파일 19개 생성 $1개 생성가능
$파일 19M 사용 $1m 사용 가능
같은 그룹에 속한 사용자들은 쿼터 제한 설정을 공유하므로 q-user1이 자원을 사용하면 q-user2는 사용할 수 없다
확인: #repquota -vg /dev/sdc1
RAID종류와설정
RAID 1
-미러링 RAID
-총 Disk 용량의 50% 사용
-Fault Tolerant 기능 제공
/dev/sdf, /devsdg
1. 파티션 생성
#fdisk /dev/sdf #/dev/sdg
n 새로운 파티션 n 새로운 파티션
p 주파티션 생성 p 주파티션 생성
1 파티션 1번 1 파티션 1번
enter 디스크의 처음부터 enter 디스크의 처음부터
enter 마지막까지 파티션 생성 enter 마지막까지 파티션 생성
t 타입 변경 t 타입 변경
fd 레이드 타입으로 변경 fd 레이드 타입으로 변경
w 저장 후 종료 w 저장 후 종료
#fdisk -l /dev/sdf //타입 확인
#fdisk -l /dev/sdg //타입 확인
2. RAID 구성
#mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1
부팅 장치로 사용할 수 없다는 경고 무시 (y키 입력)
3.파일 시스템 생성
#mkfs -t ext4 /dev/md1
4. 마운트 포인트 생성
#mkdir /RAID-1
#mount /dev/md1 /RAID-1
5. 마운트 및 확인
#df -h
#mount
#mdadm --detail /dev/md1
6.UUID 확인, fstab 등록
#blkid /dev/md1
UUID=5800d33c-51e0-4edc-a39e-2c9ae963a368
#vi /etc/fstab
7. RAID 설정 저장
#mdadm --detail --scan > /etc/mdadm.conf
RAID 5
- RAID 1처럼 데이터의 안정성도 어느정도 보장되면서 RAID 0 처럼 공간 효율성도 좋은 방식
-최소 3개의 이상의 DISK가 필요하여 보통 5개 이상의 disk로 구성한다.
-Disk 장애 발생 시 Parity 이용하여 데이터를 복구
저장 방향 -->
ㅁ 패리티
A B C D
0 0 0 ㅁ
1 1 ㅁ 1
1 ㅁ 0 1
ㅁ 0 1 0
짝수 패리티를 사용하여 각 패리티 비트의 값
A B C D
0 0 0 (0)
1 1 (1) 1
1 (0) 0 1
(1) 0 1 0
DISK C 장애 발생
A B C D
0 0 X (0)
1 1 X 1
1 (0) X 1
(1) 0 X 0
첫 번째 행 0 0 X 0
두 번째 행 1 1 X 1
세 번째 행 1 0 X 1
네 번째 행 1 0 X 0
각 행의 값이 짝수 이어야 하므로 C-disk 의 데이터 예측 가능
C-disk 0 1 0 1
1. 파티션 생성 ( /dev/sdh, /dev/sdi, /dev/sdj)
#fdisk /dev/sdh 주파티션 1 fd 타입
#fdisk /dev/sdi 주파티션 1 fd 타입
#fdisk /dev/sdj 주파티션 1 fd 타입
2. 레이드 구성
#mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdh1 /dev/sdi1 /dev/sdj1
3. 파일 시스템 생성
#mkfs -t ext4 /dev/md5
4. 마운트 포인트 생성 후, 마운트
#mkdir /RAID-5
#mount /dev/md5 /RAID-5
#df -h
#mount
#mdadm --detail /dev/md5
5. UUID 확인 fstab 등록
#blkid /dev/md5
UUID=3cddf70c-be4e-4fbe-92fb-65bebe973e90
#vi /etc/fstab
[UUID] [마운트포인트] [파일시스템] [옵션] [덤프] [디스크검사]
6. 레이드 설정 저장
#mdadm --detail -scan > /etc/mdadm.conf
장애 복구 능력
LINEAR - X
RAID-0 - X
RAID-1 - O
RAID-5 -O
장애 테스트
sda (HardDisk)
LINEAR-RAID sdb sdc (2, 3)
RAID-0 sdd sde (4,5)
RAID-1 sdf sdg (6,8)
RAID-5 sdh sdi sdj (9,10)
HardDisk 2,4,6,8 삭제하기
#reboot
#df -h 확인하기(md1 md5 남아있는것 확인)
#Disk 4개 추가 후, (0.25GB)
#reboot
#fdisk -l
# fdisk /dev/sdb
# fdisk /dev/sdd
# fdisk /dev/sdf
# fdisk /dev/sdh
LINEAR , RAID-0
#mdadm --stop /dev/md9
#mdadm --create /dev/md9 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1 #mkfs -t ext4 /dev/md9 #mount /dev/md9 /RAID-LINEAR #mdadm --stop /dev/md0 #mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1 #mkfs -t ext4 /dev/md0 #mount /dev/md0 /RAID-0 #mdadm /dev/md1 --add /dev/sdf1 RAID - 5 #mdadm /dev/md5 --add /dev/sdh1 1번 세션 2번 세션 #watch -n 0.1 -d "cat /porc/mdstat" #mdadm /dev/md1 -add /dev/sdf1 #mdadm /dev/md5 -add /dev/sdh1
RAID -1
빠진날 3
데몬이란?
- 실제 서비스를 제공하는 프로세스의 집합
데몬의 동작유형
- xinetd 모드와 Standalone 모드
xinetd (eXtended Internet Services Daemon / 슈퍼데몬 )
- 외부의 요청이 있을때만 반응하기때문에 반응속도가
느리지만, 리소스 소모는 적다.
Standalone
- 슈퍼데몬에 의지하지 않고 요청이 있을때 신속히
반응 할 수 있지만, 항상 커널에 상주 하고 있기
때문에 리소스 소모가 크다.
데몬의 종류
- network 네트워크 관련된 정보를 설정을 활성화 하는 데몬
- iptables 패킷 필터링 방화벽 데몬
- postfix 메일 전송 역할을 하는 메일서버 데몬
리눅스마스터 1,2 급 시험용 데몬
ALSA - 사운드 관련 데몬
CUPS - 프린터 관련 데몬
SANE - 스캐너,캠 관련 데몬
-----------------------------------------------------------------
파일 시스템
리눅스에서 지원하느 파일 시스템의 종류
- EXT3, EXT4, SWAP, XFS, NFS, ISO9660
EXT4 ( Extended File System )
- 1EB의 최대 파일 시스템 사이즈와 16TB의 최대 파일 사이즈 지원
- 서브 디렉토리 64000개 지원, 파일은 약 40억개 지원
Block Group
- 슈퍼 블록
- 그룹 디스크립터 테이블
- 블록 비트맵
- 아이노드 비트맵
- 아이노드 테이블
- 데이터 블록
inode
소유자, 소유그룹 정보
파일 접근 권한 정보
타임 스탬프
파일의 종류, 크기, 하드링크 수
파일이 위치한 데이터 블록의 주소
Disk의 타입의 종류
1. IDE (Integrated Drive Electronics)
2. SATA (Serial Advanced Technology Attachment)
3. SCSI (Small Computer System Interface)
4. SAS (Serial Attachment SCSI)
- 크기가 작고 안정적이며 성능이 우수하여 서버용으로
자주 사용되는 디스크 타입이다.
파티션 (Partition)
- 하나의 물리적인 하드 디스크를 여러 개의 논리적인
디스크로 나누는 것
리눅스 파티션
- 주(Praimary) 파티션과 확장(eXtended)파티션, 그리고 논리(Logic)
파티션으로 구분된다.
- 디스크 하나당 주 파티션은 4개까지만 생성이 가능
그 이상의 파티션이 필요할 경우에는 확장 파티션을 생성 한 후에
다시 논리 파티션으로 나누어 최대 12개까지 생성 할 수 있다.
- 파티션 명칭
ex) /dev/sda /dev/sdb
1개의 디스크 1개의 파티션
/dev/sda1
1개의 디스크 3개의 파티션
/dev/sda1
/dev/sda2
/dev/sda3
2개의 디스크에 각 2개의 파티션
1번 디스크 sda (SCSI, SAS 타입 디스크)
/dev/sda1 /dev/sda2 hda (IDE타입,SATA타입 디스크)
2번 디스크
/dev/sdb1 /dev/sdb2
df (Disk Free) - 파일 시스템 및 파티션별 자세한 용량 정보 확인
-a 모든 파일 시스템 출력
-h 용량을 읽기 쉽게 출력
-i inode 사용정보를 출력
du (Disk Usage) - 디렉토리나 파일의 용량을 확인
-h 용량을 읽기 쉽게 출력
-s 요약
#fdisk (파티션 생성 / 수정)
#fdisk [옵션] [장치명]
-l 디스크 파티션 정보 출력
파티션 생성 실습
1. 시스템 종료 후, 오늘 날짜로 스냅샷
2. 디스크 1GB 추가
3. fdisk 확인
#fdisk -l
4. 디스크 사용을 위한 설정 과정
파티션 생성
(1) #fdisk [장치명]
#fdisk /dev/sdb
d delete a partition
l list known partition types
m print this menu
n add a new partition
p print the partition table
q quit without saving changes
t change a partition's system id
w write table to disk and exit
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux
1GB - 총 4개의 파티션으로 설정
주파티션 200MB /dev/sdb1
주파티션 200MB /dev/sdb2
확장파티션
논리파티션 200MB /dev/sdb5
논리파티션 나머지전부 /dev/sdb6
/dev/sdb1 1 26 208813+ 83 Linux
/dev/sdb2 27 52 208845 83 Linux
/dev/sdb3 53 130 626535 5 Extended
/dev/sdb5 53 78 208813+ 83 Linux
/dev/sdb6 79 130 417658+ 83 Linux
mkfs (make filesystem)
#mkfs [옵션] [장치명]
-t 파일 시스템의 타입을 지정
#mkfs -t ext4 /dev/sdb1
#mkfs -t ext4 /dev/sdb2
#mkfs -t ext4 /dev/sdb5
#mkfs -t ext4 /dev/sdb6
마운트 - 특정 디렉토리에 파일시스템을 탑재하는것
- 리눅스는 파일 단위로 모든 장치를 관리하기때문
에 새롭게 만든 파일 시스템을 사용하기 위하여
추가한 디스크 장치를 임의의 디렉토리에 마운트하여
사용해야한다.
마운트 포인트
- 파일시스템을 디렉토리 연결시켜야하는데, 이때 연결되는
디렉토리르 의미함
mount [장치명] [마운트포인트]
# mount /dev/sdb1 /DISK_1
# mount /dev/sdb2 /DISK_2
# mount /dev/sdb5 /DISK_3
# mount /dev/sdb6 /DISK_4
#vi /etc/fstab
(1) 파일시스템 장치명
- 장치명
- UUID (범용 고유 식별자 / Universal Unique IDentifier)
#blkid
UUID=5d678039-b1a7-49df-8540-455cae233370 /DISK_1 ext4 defaults 0 0
UUID=1edbe3c3-a09e-418b-af85-1e9985f12574 /DISK_2 ext4 defaults 0 0
UUID=86a06f88-03fe-4c39-8675-f117f7d110c7 /DISK_3 ext4 defaults 0 0
UUID=180c5f29-89a2-4dd3-a44d-89d604b4bfbd /DISK_4 ext4 defaults 0 0
장치명
/dev/sda
/dev/sdb
/dev/sdc
(2) 마운트 포인트
(3) 파일시스템 타입
(4) 마운트 옵션
- defaults (rw, suid, dev, exec, auto, nouser, async)
(5) 덤프 생성 유무
- 덤프(백업) 생성 1
- 덤프 파일 생성하지 않음 0
(6) 파일시스템 검사 유무 (#fsck - 파일시스템 검사)
0 - 무결성 검사 하지 않음
1 - 우선순위 1위를 뜻하며, 대부분 / 파티션에 설정
2 - 우선순위 2위를 뜻하며, 1순위 검사 후 검사
/DISK_1 ext4 defaults 0 0
/DISK_2 ext4 defaults 0 0
/DISK_3 ext4 defaults 0 0
/DISK_4 ext4 defaults 0 0
디스크추가 -> 파티션 생성 -> 파일 시스템 생성
-> 마운트 추가 -> 마운트 -> UUID확인 -> fstab 등록
1. 스냅샷으로 초기화
2. 3GB 디스크 1개 추가
3. 3개의 파티션 으로 생성 (#fdisk)
주파티션 1G
주파티션 1G
주파티션 나머지 전부
4. 파일 시스템 생성 ext4 (#mkfs)
5. 마운트 포인트 /TEST_1 (#mkdir)
/TEST_2
/TEST_3
6. 마운트 확인 (#mount)
7. 부팅 시 자동으로 마운트 하도록 fstab 등록, 단 UUID 이용 (#blkid)
8. 리부팅 후 마운트 확인 (#df -h, #mount)
==============================================================================
RAID (Redundant Array Of Inexpensive/Independent Disk)
RAID 구성 방식
Hardware
- RAID 컨트롤러 내부의 하드웨어 및 펌웨어에 의해 구현
- 독자적인 메모리와 프로세서를 가지고 있다.
- 안정적이나 대부분 고가
Software
- 운영체제에서 지원하는 방식
- 저렴한 비용으로 H/W RAID와 동일하게 구현이 가능
- 속도나 신뢰성은 H/W RAID보다 떨어진다.
Linear RAID
- 여러개의 디스크를 하나의 디스크처럼 사용하도록 만든다.
- 첫 번째 디스크 완전히 채워지면 순차적으로 다음 디스크에 저장을한다.
- 하나의 디스크에서 입/출력 작업이 실행된다.
- 성능면에서 별다른 장점이 없음
- 하나의 디스크가 장애가 발생하면, 전체 볼륨을 사용할 수 없게 된다.
- 모든 디스크의 총량과 RAID볼륨의 용량이 같다.
- 2개의 이상의 디스크를 필요로 한다.
작업 준비
스냅샷 초기화
1. 디스크 추가
0.25GB HDD * 9EA
2. 디스크 추가 확인
#fdisk -l // /dev/sda를 제외한 /dev/sdb ~/dev/sdj 까지
9개 디스크 추가 확인
3. 파티션 생성
Linear Raid 사용 디스크 (/dev/sdb, /dev/sdc)
#fdisk /dev/sdb
새로운 파티션 n
주파티션 p
파티션번호 1
파티션 크기 처음부터 마지막까지 전부 사용
파티션 타입 변경 't'
파티션 타입 설정 'fd'
4. 파티션 생성 확인
#fdisk -l /dev/sdb
Id System
fd Linux raid autodetect
#fdisk -l /dev/sdc
Id System
fd Linux raid autodetect
5. RAID 구성
#mdadm
(1) RAID 생성
#mdadm --create [장치명] --level [레이드레벨] --raid-devices=[디스크 수] [장치명] [장치명]
(2) RAID 확인
#mdadm --detail --scan mdadm --detail [장치명]
(3) RAID 적용
#mdadm --detail --scan > /etc/mdadm.conf
#mdadm --create /dev/md9 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md9 started
6. 파일 시스템 생성
#mkfs -t ext4 /dev/md9
7. 마운트 포인트 생성
#mkdir /RAID-LINEAR
8. 마운트
#mount /dev/md9 /RAID-LINEAR
9. UUID 확인
#blkid /dev/md9
UUID=42d6fa80-07a7-46c7-8181-f4dd4df4693f
vi /etc/fstab << 여기에 입력
11. RAID 확인
#mdadm --detail /dev/md9
#df -h
12. RAID 적용
#mdadm --detail --scan > /etc/mdadm.conf
RAID 0
- 스트파이핑(striping) RAID라고도 불린다.
- 데이터를 여러 개의 디스크에 나누어서 쓰고 읽어 들임으로서
데이터를 중복해서 기록하지 않기때문에 가장 높은 입/출력 성능을 제공한다. (가장 큰 장점!)
- RAID 0의 용량은 모든 DISK 총 용량과 같다.
- 최소 2개의 DISK를 필요로 한다.
- 데이터 보호 기능이 없다. (Fault Tolerant 기능 제공 X)
문제
ex) 1TB 디스크 1개 LINEAR -> 데이터를 저장할 수 있는 공간은 ? 11TB
10TB 디스크 1개 RAID 0 -> 데이터를 저장할 수 있는 공간은 ? 2TB
1. 파티션 생성
#fdisk /dev/sdd - 주파티션 1개 타입 FD
#fdisk /dev/sde - 주파티션 1개 타입 FD
2. 파티션 생성 확인
#fdisk -l /dev/sdd Linux raid autodetect
#fdisk -l /dev/sde Linux raid autodetect
3. RAID 구성
#mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1
4. 파일 시스템 생성
#mkfs -t ext4 /dev/md0
5. 마운트 포인트 생성
#mkdir /RAID-0
6. 마운트
#mount /dev/md0 /RAID-0
7. UUID 확인
#blkid /dev/md0
8. fstab 등록
UUID=f878311c-157e-4ad2-98d2-8374749d7282
vi /etc/fstab
9. RAID 확인
#mdadm --detail /dev/md0
#df -h
10. RAID 적용
#mdadm --detail --scan > /etc/mdadm.conf
빠진날 2
4월8일 (토)
SetGID
- 프로세스가 실행한 사용자의 GID가아닌 소유한 그룹의 GID권한으로 실행된다.
- SetGID가 설정된 디렉토리에서 만들어지는 파일은 모두 해당 디렉토리의
소유 그룹 허가권을 갖는다.
SetGID 설정밥법
- 기호모드 (g+s)
- 숫자모드 (2000)
- 팀단위로 작업할 경우 모든 사용자가 파일을 공유하도록 할때 사용된다.
Sticky Bit
- 모든 사용자가 생성/수정/삭제가 가능한 디렉토리에 적용하며, StickyBit 설정 후
에는 해당 파일의 소유자만 해당 파일을 삭제할 수 가 있다.
StickyBit 설정
-기호모드 (o+t)
-숫자모드 (1000)
#cd /practice
#mkdir sticky_test
#cd sticky_test
#mkdir temp1 temp2
#chmod 1777 temp1 // 스티키 설정
#chmod 777 temp2 // 일반 777 권한 설정
#touch ./temp1/test1 // 테스트 파일 생성
#touch ./temp2/test1 // 테스트 파일 생성
#chmod 777 temp1/test1 // 777 허가권으로 수정
#chmod 777 temp2/test1 // 777 허가권으로 수정
#useradd web-admin1 // 사용자 계정 추가
#su - web-admin1 // 계정으로 스위칭
$cd /practice/sticky_test
$cd temp2
$ll
rwx rwx rwx -> test1
$rm test1 // 파일 삭제 가능
$cd ..
$cd /temp1
$ll rwx rwx rwx -> test1
rwx rwx rwx ->test1 // 파일 삭제 가능
$rm test1
rm: cannot remove `test1': 명령을 허용하지 않음
허가권이 있음에도 삭제(rm, mv)를 할수가 없다.
속성 (attribution)
chattr - 특정파일에 속성을 변경하고자 할때 사용
lsattr - 특정파일에 속성을 확인하고자 할때 사용
속성의 종류
i (immutable) - 해당 파일의 내용 변경, 삭제, 링크 생성 등을 할수가 없다.
a (append only) - 해당 파일의 내용만 추가가 가능하고, 삭제, 링크 생성 등은
할 수 가 없다.
+ 지정한 속성을 추가
- 지정한 속성을 제거
a_test 파일에 a속성 추가
#cat > a_test // X
#cat >> a_test // O
#vi a_test // X
#rm a_test // X
e는 ext4 포멧을 ext3 포멧으로 변형시켜 주는 것
ACL (Access Control List / 접근 제어 목록)
- 디렉토리 및 파일에 특정 사용자, 그룹에 특정 권한을 부여하는
기능이다.
getfacl [옵션] - 파일과 디렉토리에 ACL 설정 확인
-d 기본 정보에 대해 확인
-R 하위 디렉토리 및 파일까지 적용
setfacl [옵션] [규칙] [파일명]
- 파일과 디렉토리에 ACL 설정
-m 권한을 수정할 때 사용
-x 권한을 삭제할 때 사용
-R 하위 디렉토리 및 파일까지 적용
-b 권한 및 mask를 전부 제거
규칙
u:[UID]:[권한] - 사용자에 대한 ACL을 설정
g:[GID]:[권한] - 그룹에 대한 ACL을 설정
o:[권한] - 기타사용자에대한 ACL을 설정
ex) 계정명 test1
test1 계정의 UID 500
1. u:500:rwx group:500:rwx
2. user:500:rwx g:S-GROUP:rwx
3. user:test1:rwx other:rwx
4. u:test1:rwx
5. u:test1:1 -> --x u:test1:7
6. u:test1:2 -> -w-
7. u:test1:7 -> rwx
# getfacl S-LV01 // S-LV01 디렉토리에 ACL설정을 확인
# file: S-LV01 // 파일/디렉토리의 이름
# owner: root // 소유자
# group: S-GROUP // 소유 그룹
user::--- // 사용자 허가권
group::rwx // 그룹 허가권
other::--- // 기타 사용자 허가권
#setfacl -m user:I-USER1:rwx S-LV01
// 사용자:I-USER1:가 S-LV01 디렉토리에 rwx권한 설정
#getfacl S-LV01
# file: S-LV01
# owner: root
# group: S-GROUP
user::---
user:I-USER1:rwx // I-USER1 계정 추가 확인
group::rwx
mask::rwx
other::---
[root@Server-A test] # ll
d---rwx---+ 2 root S-GROUP 4096 2017-04-08 10:39 S-LV01
d---rwx---. 2 root S-GROUP 4096 2017-04-08 10:39 S-LV02
I-GROUP을 추가 한 후, I-USER1을 I-GROUP에 속하도록 설정
S-LV02 디렉토리는 I-GROUP에 속한 사용자들은 접근이 가능하도록 설정
I-USER1 계정으로 S-LV02 접근 가능 확인
#setfacl -m group:I-GROUP:rwx S-LV02
프로세스
- 시스템 초기화 프로세스
init - 부팅 시 가장 먼저 실행되는 시스템 초기화 프로세스
프로세스 (Process)
- 커널의 관리하에 현재 시스템에서 동작중인 프로그램이다.
- init을 제외한 모든 프로세스는 부모-자식 관계를 가지고 있다.
프로세스 종류
- 데몬 (daemon) 프로세스
커널에 의해서 실행되고, 특정 서비스를 제공하기 위해 동작하고 있는 프로세스
- 부모(parent) 프로세스
- 자식(child) 프로세스
부모 프로세스에 의해 만들어지는 프로세스이다.
자식 프로세스는 종료시 부모 프로세스에게 결과를 전달하고 죵료된다.
- 고아(orphan) 프로세스
자식 프로세스보다 먼저 부모 프로세스가 종료되었을때 해당 자식 프로세스는
고아 프로세스가 되어 init 프로세스가 관리를 한다.
- 좀비(zombie,defunct)프로세스
자식 프로세스의 종료신호를 부모 프로세스가 처리하지 못할 경우, 자식 프로세스는
좀비 프로세스가 된다.
ps (Process Status) - 시스템에 동작중인 프로세스 확인
-e 모든 프로세스에 대한 리스트 출력
-f full format 으로 출력
-a 다른 사용자들의 프로세스도 출력
-u 사용자 이름, 시간 등 상세한 정보를 출력
-x 현재 사용하고 있는 모든 프로세스를 출력
#ps -ef
UID - 프로세스를 실행 시키는 프로세스의 소유자를 의미
PID - 실행된 프로세에 부여된 숫자를 의미
PPID - parents Process ID, 프로세스를 생성한 부모 프로세스의 PID
#ps -ef | grep bash
#ps -aux
kill - 프로세스에게 신호를 전달하여 상태를 변화시키는 명령어
#kill -[시그널] [PID]
시그널 종류 확인
#kill -l
2) SIGINT - 프로세스 종료
15) SIGTERM - 프로세스 종료
9) SIGKILL - 프로세스 강제 종료
18) SIGCONT - 프로세스 재시작
19) SIGSTOP - 프로세스 정지
#kill -SIGKILL 1234
#kill -9 1234
1번 세션 2번세션
#vi /etc/passwd #ps -ef | grep vi
// vi /etc/passwd -> PID 확인
#kill -9 [vi /etc/passwd PID]
#ps -ef | grep vi // 종료 확인
#ps -ef | grep bash
프로세스 동작 형태
1. 포어 그라운드 (Foreground Process)
- 프롬프트에서 입력하는 대부분의 명령어는 포어 그라운드로 동작
- 명령어의 실행 과정이나 결과를 화면에 출력
- 포어 그라운드로 실행되는 프로세스가 종료되길 기다렸다가
종료되면 다시 프롬프트(bash)를 보여주어 명령 대기 상태로 반환
2. 백 그라운드 (Background Process)
- 프로세스의 종료 여부에 관계 없이 즉시 명령 대기 상태가되어
다른 명령을 실행 할 수 있음
- 백그라운드로 실행 시키기 위해 '&' (ampersand)를 붙여 사용
ex) #[명령어] &
작업번호와 PID를 출력하며 백그라운드로 동작
#jobs - 백그라운드에 동작하는 프로세를 확인
#fg - 백그라운드 작업을 포어그라운드로 변경
#bg - 포어그라운드 작업을 백그라운드로 변경
#fg %[작업번호]
#bg %[작업번호]
#sleep [숫자값] - 숫자값 만큼 정지
18) SIGCONT - 프로세스 재시작
19) SIGSTOP - 프로세스 정지
순서대로 명령어 입력
1번세션 2번세션
1. #/bin/bash
2. #/bin/bash
3. #/bin/bash
4. #sleep 9999999 &
5. #cat /etc/services | more
6. #pstree -p
명령어 용도 생각해보기
#exit
#exit
#exit
순서대로 명령어 입력
#clear #clear
1. #/bin/bash
2. #vi /etc/passwd
3. #ps -ef | grep bash
// 방금 실행 시킨 /bin/bash의
PID 번호 확인
4. #kill -9 [확인한 /bin/bash PID]
[vi /etc/passwd PPID]
5. ps -ef
// vi /etc/passwd 의 PID/PPID
확인
작업예약 at & cron
- 주기적으로 반복해야 하는 작업에 사용
#rpm -qa | grep at // at 패키지 설치 유무 확인
#rpm -qa | grep mail // mail 패키지 설치 유무 확인
#yum -y install at // at 패키지 설치
#yum -y install mail // mail 패키지 설치
#rpm -qa | grep at // at 패키지 설치 유무 확인
#rpm -qa | grep mail // mail 패키지 설치 유무 확인
#service atd start // at 데몬 실행
#yum -y install cron*
at - 정해진 시간에 한번 실행
형식 #at [옵션] [시간]
옵션 -l 현재 실행 대기 중인 목록을 출력 (#atq)
-r 현재 실행 대기 중인 작업을 삭제 (#atrm)
시간 형태
yyyy-mm-dd, HH:MM, today, tomorrow, hours, days,wekks, now, midnight...
ex) #at 6pm + 4days // 지금부터 4일 후 오후6시에 작업을 수행
ex) #at 10am jul 18 // 7월 18일 오전 10시에 작업을 수행
ex) #at 3am tomorrow // 내일 오전3시에 작업을 수행
ex) #at 10:00am today // 오늘 오전 10시에 작업을 수행
ex)
#at today + 1min // at 실행
at> ls -l
at> <EOT> // Ctrl + D 저장
// EOT - End Of Transmission
#at -l
[작업번호][날짜][시간][큐이름][사용자]
at 예약 작업은 /var/spool/at 디렉토리에 큐 파일이 임시 저장된 후, 저장이 완료되면
자동으로 삭제가 되며, /var/spool/mail 디렉토리에 사용자명으로 결과가 저장된다.
#cd /var/spool/mail
#cat root
#at now + 1min
at> mkdir /practice/at_test
at> echo "at test!!" > /practice/at_test/at_test1
at> <EOT>
#at -l or #atq
cron - 정해진 시간에 반복 실행
ex) 매일 오전 9시에 특정 파일 압축하여 전송
ex) 매달 1일에 /var 디렉토리를 삭제하라
#crontab //crontab 파일을 관리
옵션 -l crontab 파일을 출력
-r crontab 파일을 삭제
-e crontab 수정
-u [사용자명] 해당 사용자의 crontab 설정
분 시 일 월 요일 작업내용
0~59 0~23 1~31 1~12 0~6 반복할 명령어/스크립트
- 일요일 (0), 월요일(1), 토요일(6)
- 사용자 별로 각각 crontab 생성이 되며, 해당 파일에 반복할 작업의 내용을 작성
- 여러개의 작업도 저장할 수 있으며, 한 행에 하나의 작업을 설정
- 항목에 '*' (asterisk)이면 해당 항목의 모든 값을 의미
- ' - ' (hypen) 두 숫자 사이에 포함된 범위 (ex 1-5 == 1,2,3,4,5)
- ' , ' (comma)로 구분하여 나열된 숫자 중 일치하는 경우 (ex 1,3,5)
- ' / ' (slash)로 시간 간격을 지정 할 수 있다.
#cat /etc/crontab // 기본 양식
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#crontab -e
ex) 30 23 1 * * cp -R /home/test /backup/home
- 매요일 매월 1일 23시 30분에 /home/test를 /backup/home으로 복사하라
ex) */2 10 * * * [명령어]
- 매요일 매월 매일 10시에 2분마다 [명령어] 실행
ex) 1-10 12 * * * [명령어]
- 매요일 매월 매일 12시 1분 부터 10분까지 [명령어] 실행
ex) 1,10 12 * * * [명령어]
- 매요일 매월 매일 12시 1분, 10분에 [명령어] 실행
분 시 일 월 요일 작업내용
0~59 0~23 1~31 1~12 0~6 반복할 명령어/스크립트
#crontab -e
문제 1) 매요일 매월 매일 매시 1,2,3분에 /practice 디렉토리에 test1 파일 생성
확인 - #crontab -l
#date -s "2017-04-08"
1,2,3 분에 /practice 디렉토리에 파일 생성 확인
#mkdir -p /home/cron_test
#crontab -e
1,2,3 * * * * touch /home/cron_test/cron1_`date +\%H-\%M`
1-3 * * * * touch /home/cron_test/cron2_`date +\%H-\%M'
#date -s "2017-04-08"
#watch -d -n 1 "ls -l /home/cron_test"
crontab 명령 사용 제한하기
/etc/cron.allow, /etc/cron.deny 파일로 사용자의 접근을 허용/차단 할 수 있다.
한줄의 사용자 계정명 하나씩만 작성하며, /etc/cron.deny 파일은 기본적으로 있지만
/etc/cron.allow 파일은 관리자 직접 만들어야 한다.
- /etc/cron.allow 파일이 있을 경우
-> 해당 파일에 명시된 사용자만 사용 가능
- /etc/cron.allow 파일은 없고, cron.deny 파일이 있을 경우
-> cron.deny 파일에 명시 되지 않은 사용자만 사용 가능
- /etc/cron.allow, cron.deny 파일이 둘 다 없을 경우
-> root 만 사용이 가능
#useradd cron_user1 // 테스트 계정 추가
#su - corn_user1 // 테스트 계정 스위칭
$crontab -e // 테스트 계정 crontab 명령어 실행
종료 // 실행 가능
$exit
#vi /etc/cron.deny // 차단 파일 수정
cron_user1 // 차단할 계정명 입력
:wq // 저장 후 종료
#su - corn_user1 // 테스트 계정 스위칭
$crontab -e // 테스트 계정 crontab 명령어 실행
// 실행 불가능
$exit
#mv /etc/cron.deny /etc/cron.deny_bk // deny파일 이름 변경
// allow 파일도 없고, deny 파일도 없는 경우 테스트
#su - S-USER1
$crontab -e // 명령어 실행 여부 확인
vi를 이용하여 /etc/cron.allow 파일을 생성 한 후,
내용에 S-USER1 추가, S-USER1 과 cron_user1 계정 각각 crontab 명령어 사용 가능 여부 확인
빠진날 1
gpasswd - /etc/group, /etc/gshadow 파일을 관리한다.
#gpasswd [옵션] [그룹명]
-a [계정] 사용자 계정을 그룹에 추가한다.
-d [계정] 사용자 계정을 그룹에서 삭제한다.
-r 그룹 암호를 삭제한다.
1. 사용자 계정 추가
#useradd member1
#useradd member2
2. 그룹추가
#groupadd -g 2017 group2017
#cat /etc/passwd | tail -2 // 계정 생성 확인
#cat /etc/group | tail -1 // 그룹 생성 확인
3. 사용자 계정을 그룹에 추가
#gpasswd -a member1 group2017 // member1 계정을 group2017 그룹에 추가
#usermod -G 2017 member2 // member2 계정을 group2017 그룹에 추가
group2017 member2
#cat /etc/passwd | tail -2 // GID 필드 확인
#cat /etc/group | tail -1 // 멤버 필드 확인
group2017:x:2017:member1,member2
#groups [계정명]
#groups member1 member2
[계정명]: [주그룹] [보조그룹] ... [보조그룹]
member1 : member1 group2017
member2 : member2 group2017
4. 그룹 멤버 삭제
#gpasswd -d member2 group2017 // group2017 그룹에서 member2 계정 제거
#cat /etc/group | tail -1
#groups member2
5. 그룹 암호 설정
#gpasswd group2017 // group2017 그룹에 패스워드 설정
group2017 그룹의 암호를 바꾸는 중
새 암호:
새 암호를 다시 입력하십시오:
#cat /etc/gshadow | tail -1 // 패스워드 설정 확인
6. 그룹 패스워드 용도 확인
#gpasswd -a member2 wheel // member1 계정을 wheel 그룹에 추가
#id member2
uid=1240(member2) gid=1241(member2) groups=1241(member2),10(wheel)
#su - member2 // member2 계정 스위칭
$groups // 소속 그룹 확인
member2 wheel // 주 그룹 member2
보조그룹 wheel
$newgrp wheel // member2 <--> wheel
$groups // 주그룹 member2를 wheel 로 변경
wheel member2
$newgrp group2017 // 자신이 속한 그룹이아닌 다른 그룹으로
$groups // 주그룹을 변경
group2017 wheel member2 // group2017 그룹에 암호가 설정되어 있어
변경 시 해당 그룹에 암호가 필요하다.
sudo 권한 설정
사용자 추가나, 시스템 종료 등 특정 명령어만 실행할 수 있는 권한을 부여하는것
sudo 권한 설정 파일
/etc/sudoers
sudo 권한 설정 명령어
visudo == vi /etc/sudoers // 차이점은 오타나 문법이 틀렸을때 저장이 안됨
vipw == vi /etc/passwd
vigw == vi /etc/groups
90 ## Allow root to run any commands anywhere
91 root ALL=(ALL) ALL
[계정명] [호스트]=(옵션) [명령어]
실습 1
(1) 일반 사용자 계정으로 로그인 ( member1 ) 후, 일반 사용자가
사용할 수 없는 명령어 3개 찾기
(2) 명령어 실행이 불가능 한 것 확인 후, 해당 명령어가 위치한
절대 경로 확인 ( shutdown, reboot, halt 등 제외 )
절대 경로 확인 방법 - #which [명령어]
명령어 1 경로 : /usr/sbin/useradd
명령어 2 경로 : /usr/sbin/usermod
명령어 3 경로 : /usr/sbin/userdel
#visudo
member1 ALL=/usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod
#su - member1
$passwd // 암호 설정
$sudo [명령어]
$sudo useradd sudotest-1
[sudo] password for member1: // member1 암호 입력
$cat /etc/passwd | tail -1 //sudotest-1 계정 생성 확인
$sudo usermod -c "sudo-test" sudotest-1 //usermod 실행 확인
$cat /etc/passwd | tail -1 //sudotest-1 계정 정보 변경 확인
$sudo userdel -r sudotest-1 // sudotest-1 계정 삭제
$cat /etc/passwd | tail -1 // 계정 삭제 확인
패스워드 없이 sudo 명령어 사용 설정
#visudo
member1 ALL=NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod
------------------------------------------------------------------------------
패스워드 정책 설정
chage - 패스워드 정책 설정
-l 설정 내용 확인
-d : 최종 암호 변경일 (/etc/shadows 3번째 필드)
-m : 암호를 변경한 후 다시 변경할 수 있는 최소 기간 (/etc/shadows 4번째 필드)
-M : 유효한 암호의 최대 일 수 (/etc/shadows 5번째 필드)
-W : 사용자가 암호가 만료되기전 경고할 일 수 (/etc/shadows 6번째 필드)
-I : 암호 유효기간이 발료된 후 사용자의 계정이 비활성화 될 일 수 (/etc/shadows 7번째 필드)
-E : 사용자 계정을 사용할 수 있는 유효기간 (YYYY/MM/DD) (/etc/shadows 8번째 필드)
시스템 날짜 변경
#date -s "2017-04-02"
2017. 04. 02. (일) 00:00:00 KST
계정명 : member1 계정 유효 기간 : 2018-04-02
최초 설정한 암호는 최소 하루뒤에 변경 할 수 있으며, 암호는 10일에 한번씩 변경해야 하고,
최소 3일 전에 암호를 변경할 수 있도록 경고를한다. 만약 암호가 만료된 10일 뒤에도
암호를 변경하지 않으면 계정을 비활성화 시킨다.
#passwd memeber1
#chage -l member1 //member1 계정의 패스워드 정책 확인
마지막으로 암호를 바꾼 날 : 4월 02, 2017
암호 만료 : 안함
암호가 비활성화 기간 : 안함
계정 만료 : 안함
암호를 바꿀 수 있는 최소 날 수 : 0
암호를 바꿔야 하는 최대 날 수 : 99999
암호 만료 예고를 하는 날 수 : 7
최초 설정한 암호는 최소 하루뒤에 변경 할 수 있으며 ( m 1 )
암호는 10일에 한번씩 변경해야 하고, ( M 10 )
최소 3일 전에 암호를 변경할 수 있도록 경고를한다. ( W 3 )
만약 암호가 만료된 10일 뒤에도 암호를 변경하지 않으면 계정을 비활성 ( I 10 )
계정 유효 기간 : 2018-04-02 ( E 2018/04/02 )
#chage -E 2018/04/04 -m 1 -M 10 -W 3 -I 10 member1
#chage -l member1
마지막으로 암호를 바꾼 날 : 4월 02, 2017
암호 만료 : 4월 12, 2017
암호가 비활성화 기간 : 4월 22, 2017
계정 만료 : 4월 04, 2018
암호를 바꿀 수 있는 최소 날 수 : 1
암호를 바꿔야 하는 최대 날 수 : 10
암호 만료 예고를 하는 날 수 : 3
1번 세션 (root) 2번 세션 (member1)
#su - member1
$passwd
(현재) UNIX 암호:
암호 변경을 위해 조금더 기다려 주십시오.
#date -s "2017-04-03" $passwd
#date -s "2017-04-09" $su - memeber1 // member1 로그인
#date -s "2017-04-10" 2 $su - memeber1 // member1 로그인
#date -s "2017-04-11" 1 $su - memeber1 // member1 로그인
#date -s "2017-04-12" 0 $su - memeber1 // member1 로그인
#date -s "2017-04-13" $su - memeber1 // member1 로그인
#date -s "2017-04-02"
#passwd member1
#chage -E 2018/04/04 -m 1 -M 10 -W 3 -I 10 member1
#chage -l member1
#chage -d 2017/04/02 member1
#date -s "2017-04-09" $su - memeber1 // member1 로그인
#date -s "2017-04-10" 2 $su - memeber1 // member1 로그인
#date -s "2017-04-11" 1 $su - memeber1 // member1 로그인
#date -s "2017-04-12" 0 $su - memeber1 // member1 로그인
#date -s "2017-04-13" $su - memeber1 // member1 로그인
디렉토리 및 파일의 권한과 소유권
- 시스템에 있는 모든 파일과 디렉토리는 접근 할 수 있는 권한 및 소유권 부여되어있다.
- 파일이나 디렉토리의 접근을 제한 것을 허가권(Permission)이라 한다.
- 파일이나 디렉토리의 소유권한을 소유권 (Ownership) 이라고 한다.
실습용 계정,그룹 생성
#groupadd -g 800 web_user
#groupadd -g 900 web_admin
#useradd -g 800 web-user1
#useradd -g 900 web-admin1
#cat /etc/passwd
web-user1:x:500:800::/home/web-user1:/bin/bash
web-admin1:x:501:900::/home/web-admin1:/bin/bash
#ll /bin/ls
-rwxr-xr-x. 1 root root 109208 2016-05-11 17:59 /bin/ls
root root
[소유계정] [소유그룹]
chown (change ownership / 소유권 변경)
형식 - #chown [소유계정]:[소유그룹] [파일/디렉토리명]
#cd /home/web-user1
#touch test
#ll
-rw-r--r--. 1 root root 0 2017-04-02 12:29 test
#chown web-admin1 test // test 파일의 소유자를 web-admin1 변경
#ll
-rw-r--r--. 1 web-admin1 root 0 2017-04-02 12:29 test
#chown web-user1 test
-rw-r--r--. 1 web-user1 root 0 2017-04-02 12:29 test
#chown web-admin1:web_admin test // test 파일의 소유계정:소유그룹 변경
-rw-r--r--. 1 web-admin1 web_admin 0 2017-04-02 12:29 test
test파일의 소유권 변경
소유계정 : web-user1
소유그룹 : web_user
#chown web-admin1:web_admin test
#chown web-admin1.web_admin test
형식 - #chown [소유계정]:[소유그룹] [파일/디렉토리명]
chown [계정명] [파일] 소유계정 변경
chown :[그룹명] [파일] 소유 그룹 변경
허가권 (Permission)
-rwxrwxrwx
- r w x r w x r w x
파일 유형 사용자(User) 그룹(Group) 기타사용자(Other)
소유 계정 소유 그룹
rwx의 의미
r (Read) - 읽기
w (Write) - 쓰기
x (eXecute) - 실행
- (bar) - 해당 권한이 없는 경우
ex)
rwxr-xr-x : 사용자는 읽기, 쓰기, 실행권한을 모두 가지고 있고,
그룹과 기타사용자는 읽기와 실행권한만 있다.
rw------- : 사용자만 읽고 쓰기가 가능하고, 그룹과 기타사용자는 아무 권한이 없다.
r-------- : 사용자만 읽기 권한을 가지고 있다.
#ll /etc/passwd /etc/shadow
chmod - 허가권 변경
- 기호 모드 (상대값) (symbolic mode) - 사람의 입장
- 숫자 모드 (절대값) (absolute mode) - 컴퓨터의 입장
chmod [옵션] [기호/숫자모드] [파일명]
-R 하위 디렉토리 및 파일까지 전부 적용
- 기호모드
+ : 허가권 부여 u : 사용자(소유자) 권한
- : 허가권 제거 g : 그룹 권한
= : 허가권 유지 o : 기타 사용자
s : SetUID,SetGID 권한 부여 a : 사용자, 그룹, 기타 사용자 모두
t : Sticky Bit 권한 부여
ex) 허가권 rwx r-x r-x 파일명 test
-> 그룹과 기타사용자의 x(실행)권한을 제거
#chmod go-x test
-> 그룹에는 쓰기권한 추가, 기타사용자에게 읽기, 실행권한 제거
#chmod g+w,o-rx test
#mkdir -p /practice/symbolic_chmod/
#cd /practice/symbolic_chmod/
#touch test-file
#ll
rw- r-- r-- test-file
(1)파일의 소유자(사용자), 그룹과 기타사용자에 실행권한 추가
rwx r-x r-x
#chmod u+x,g+x,o+x test-file
#chmod a+x test-file
(2) 파일의 소유자의 모든 권한을 제거하고, 그룹은 모든권한, 기타사용자는
쓰기 권한만 추가
--- rwx -w-
#chmod u-rwx,g+w,o-rx+w test-file
(3) 사용자, 그룹, 기타 사용자 모두 읽기와 쓰기 권한만 추가
rw- rw- rw-
#chmod u+rw,g-x,o+r test-file
- 숫자 모드
- 각각의 허가권 필드를 3자리의 8진수로 표기
- 완전환 표기법은 4자리이나 일반적으로 3자리를 사용
사용자 필드 허가권 기호 숫자모드
사용자 읽기 r 400 (100단위)
쓰기 w 200
실행 x 100
그룹 읽기 r 40 (10단위)
쓰기 w 20
실행 x 10
기타 사용자 읽기 r 4 (1단위)
쓰기 w 2
실행 x 1
ex) rwx r-x r-x
사용자 400 + 200 + 100 = 700
그룹 40 + 10 = 50
기타 사용자 4 + 1 = 5
= 755
사용자 필드 사용자 그룹 기타 사용자
r w x r w x r w x
자리수 4 2 1 4 2 1 4 2 1
2진수 1 1 1 1 1 1 1 1 1
8진수 7 7 7
r w x r - x r - x
1 1 1 1 0 1 1 0 1
7 5 5
r - x r - x r - x
4 + 1 4 + 1 4 + 1
5 5 5
test-file
chmod 744 test-file ( rwx r-- r-- )
ex) rwx rwx r-x ( 7 7 5 )
r-x r-- --- ( 5 4 0 )
rw- rwx --x ( 6 7 1 )
디렉토리 허가권 테스트
#cd /practice/symbolic_chmod/
#mkdir test-dir
#chmod 000 test-dir
--- --- ---
세션 추가
1번 세션 root 2번 세션 web-admin1
# #su - web-admin1
$cd /practice/symbolic_chmod/
test-dir 디렉토리의 허가권을 001, 002, 003 ... 007 까지 변경하면서
허가권 변경하는 명령어 입력 후, 2번세션에서 아래 명령어 테스트
(1) $cd test-dir X
성공 시 (2), (3) 진행 후 cd.. 으로 상위 디렉토리 이동 후 다음 권한 진행
(2) $touch test W
(3) $ls R
--x (1) O (2) X (3) X
-w- (1) X (2) X (3) X
-wx (1) O (2) O (3) X
r-- (1) X (2) X (3) X
r-x (1) O (2) X (3) O
rw- (1) X (2) X (3) X
rwx (1) O (2) O (3) O
UMASK - 새로운 파일/디렉토리 생성 시 기본 허가권을 경정하는 기준이되는 값
- 기본값 022
- 파일의 기본 허가권 666
- 디렉토리의 기본 허가권 777
- 파일이나 디렉토리의 기본 허가권에서 UMASK 값을 뺀 값이 허가권으로 결정
디렉토리 파일
기본값 777 666
UMASK 022 022
결정된 허가권 755 644
기호 rwx r-x r-x rw- r-- r--
#mkdir test123 // 디렉토리 허가권 확인
#touch test456 // 파일 허가권 확인
#umask // 현재 시스템에 설정된 UMASK 값을 확인하는 명령어
0022
#umask [값] // [값]으로 UMASK 값 변경
#umask 007 // UMASK 값 변경
#umask
0007
디렉토리 파일
777 666 기본값
007 007 UMASK
770 660 적용값
RWX RWX --- RW- RW- ---
777 666
020 020 UMASK
757 646
RWX R-X RWX RW- R-- RW-
#umask 022
#cd /home
#ll
rwx------. 2 web-admin1 web_admin 4096 2017-04-02 12:15 web-admin1
drwx------. 2 web-user1 web_user 4096 2017-04-02 12:29 web-user1
#useradd -g web_admin web-admin2
계정 그룹
web-admin1 web_admin
web-admin2
web-admin2 계정이 web-admin1의 홈디렉토리 접근, 읽기, 쓰기가 가능 하도록 설정
단, 기타 사용자 권한은 수정X
#chmod 770 web-admin1
rrwxwx---. 2 web-admin1 web_admin 4096 2017-04-02 12:15 web-admin1
#su - web-admin2
$cd /home/web-admin1 (x)
$touch test1 (w)
$ls (r)
특수권한의 종류 SetUID, SetGID, StickyBit
SetUID
- 실행파일에 한해서 설정이 가능하며, SetUID 속성이 있는 경우
실행한 사용자가 아닌 파일을 소유한 사용자의 권한으로 프로세스(프로그램) 실행된다.
- SetUID는 보통 root가 소유한 실행파일에 적용을 하며, 이런 경우에 해당 파일을
실행하는 순간에는 root의 권한을 가지게 된다.
#ll /etc/passwd /etc/shadow
644 400
rw- r-- r-- r-- --- ---
#su - web-admin1
$passwd // 명령어 실행 가능
$exit
#ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2015-11-24 01:30 /usr/bin/passwd
SetUID 설정방법
기호모드 (u+s)
숫자모드 (4000)
#cd /practice
#mkdir SetUID
#cd SetUID
#touch SetUID-FILE-1
#touch SetUID-FILE-2
#chmod 4644 SetUID-FILE-1
#chmod 4544 SetUID-FILE-2
#ll
-rwSr--r--. 1 root root 0 2017-04-02 14:51 SetUID-FILE-1
-r-sr--r--. 1 root root 0 2017-04-02 14:51 SetUID-FILE-2
실행 권한이 있는 파일 : s
없는 파일 : S
#cat > SetUID-FILE-3
SetUID FILE TEST!!!!!!!!
#chmod 400 SetUID-FILE-3
-r--------. 1 root root 23 2017-04-02 14:55 SetUID-FILE-3
#su - web-admin1
$cat /practice/SetUID/SetUID-FILE-3
$exit
#ll /bin/cat
-rwxr-xr-x. 1 root root 45224 2016-05-11 17:59 /bin/cat
#chmod u+s /bin/cat
#ll /bin/cat
-rwsr-xr-x. 1 root root 45224 2016-05-11 17:59 /bin/cat
#su - web-admin1
$cat /practice/SetUID/SetUID-FILE-3
#su - webadmin1
$whoami
$who am i
UID - RUID (Real UID)
web-admin1
EUID (Effective UID)
root pts/1 2017-04-02 22:40 (100.100.100.1)
GID - RGID
EGID
원상복구
cat 파일의 SetUID 제거
#chmod u-s /bin/cat
간단한 숫자맞추기 게임
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int rnum;
int i,a,j;
srand(time(NULL));
rnum=rand()%101;
for(i=0;;i++){
printf("1~100사이 정답입력:");
scanf("%d",&a);
if(i==9){
printf("Game Over 다시 도전해주세요.\n");
break;
}
if(a<rnum)
printf("%d보다 크다.\n",a);
else if(a>rnum)
printf("%d보다 작다.\n",a);
else if(a==rnum) {
printf("정답입니다!\n");
break;
}
}
}
계정생성
useradd [옵션] [계정명]
1. 사용자 계정추가
#useradd DOBONGSOON
# cat /etc/passwd //확인
# useradd -d /sub_home/DOBONGSOON-6 DOBONGSOON-6 계정은 생성은 되어 /etc/passwd 파일에 등록되지만, 홈디렉토리의 상위 디렉토리가 미리 존재하지않으면, 홈디렉토리가 생성이 되지 않는다. # mkdir /sub_home # useradd -d /sub_home/DOBONGSOON-7 DOBONGSOON-7 # ls -a # ls -a /etc/skel # touch /etc/skel/skel_file #ls #ls -a # su - DOBONGSOON-8 //치면 밑에와 같이 변함 [DOBONGSOON-8@Server-A ~] $ pwd $exit #su - DOBONGSOON-8 -bash-4.1$ //이렇게 깨져서나ㅣ온다 #cat /etc/bashrc 실습 아래 조건을 만족하도록 설정 계정명 :practice-2 UID :590 GID :500 정보 : Practice Account 쉘 :/bin/bash 답:#useradd -u 590 -g 500 -c "Practice Account" -s /bin/bash practice-2 정보 변경할땐 usermod # usermod -u 503 -g 501 -c "Practice" -s /bin/sh practice-2
#usermod -d /home/[계정명2] -l [계정명1] [계정명2] #cp /home/[계정명1]/* /home/[계정명2]/ su (Substitute User // Switching User) 사용자 전환 su [계정명] -해당 계정으로 전환하나 환경변수는 바꾸지 x su - [계정명] - 해당 계정으로 전환하며 환경변수도 함께 변경 해당 계정의 ~/ .bash_profile ,~/ .bashrc 파일이 적용 userdel -계정 삭제 #userdel [계정명] DOBONGSOON-1 계정 삭제 #userdel DOBONGSOON-1 #cd /home #ls DOBONGSOON-1 # userdel -r DOBONGSOON-2 계정삭제 홈 디렉토리까지 전부 삭제 됨. 사용자 계정 생성 과정 (1) #useradd 명령어 실행 (2) /etc/default/useradd 와 /etc/login.defs 파일 설정 참조 (3) /etc/passwd 와 /etc/group, /etc/shadows, /etc/gshdows 파일에 정보 추가 (4)홈 디렉터리에 사용자 계정명과 동일한 디렉토리 생성 (5) /etc/skel에 있는 파일들을 사용자 홈디렉토리로 복사 (6) /var/spool/mail 에 메일박스 파일 생성 passwd - 패스워드 정책 및 설정 #passwd [계정명] #useradd pass-user1 //pass-user1 계정 생성 #passwd pass-user1 //pass-user1 암호 생성 123123으로함 #useradd pass-user2 //pass-user2 계정 생성 #passwd pass-user2 //pass-user2 암호 생성 123123으로함
passwd - 패스워드 정책 및 설정 #passwd [계정명] #passwd //현재 로그인한 계정 비번 변경 -l 사용자의 패스워드 Lock을 걸어 로그인을 불가능하게한다. -u 사용자의 패스워드 잠금 해제 -d 사용자의 패스워드를 제거
#passwd -l pass-user1 //pass-user1 잠금 #passwd -d pass-user2 //암호 삭제 # vim /etc/passwd pass-user2:x: ->:*: 이설정을하면 암호를 쳐도 로그인이 안된다. 실습 -아래 조건 만족하도록 설정 계정명 : test1010 UID :1010 GiD :1010 패스워드 : 자유 그외 모든 정보 기본값 적용 계정 스위칭 시 프롬프트 안깨지도록 설정 문제 1.useradd 명령어 사용하지 않고 계정생성 참고 파일 /etc/passwd /etc/group /etc/shadow /etc/skel/ 확인 명령어 #su - test1010 답 : /etc/passwd 파일 추가 /etc/group 파일 추가 /etc/shadow 파일 추가 /etc/gshadow 파일 추가 홈디렉토리 생성 skel 디렉토리 파일 복사 shadow password system (shadow-utils 패키지) #pwunconv -> shadow password system Disable
#pwconv ->shadow password system Enable
다시 원래대로 돌아옴 # su - DOBONGSOON $ cat /etc/passwd 읽기 가능 $ cat /etc/shadow 읽기 불가능 사용자 및 그룹 파일 무결성 검사 #pwck // /etc/passwd, shadow 파일을 검사 #grpck // /etc/group, gshadow 파일을 검사 - 각 필드 설정, 사용자와 그룹아이디설정 검사 기본 그룹 존재 유무 , 홈디렉토리 , 쉘 ,패스워드 등 존재 유무 확인 명령어 그룹추가 명령어 groupadd # groupadd [그룹명]
#cat /etc/group 그룹수정 명령어 #groupmod #groupmod -g XXX test-group #cat /etc/group 그룹삭제 명령어
#groupdel #groupdel test-group #cat /etc/group
# cd /sub_home/DOBONGSOON-7/
# cd /home/DOBONGSOON-8
test1010:x:1010:1010::/home/test1010:/bin/bash
test1010:x:1010:
test1010::17257:0:99999:7:::
test1010:!::
#mkdir /home/test1010
#cp /etc/skel/.bash* /home/test1010
# groupadd test-group
환경 변수
지역 환경 변수
- 현재 사용하는 쉘에서만 적용되는 변수
-변수 선언 및 초기화
변수명=값 (주의 사항 : 변수명 = 값 x - 공백 x)
ex) #A=10 O
ex) #A = 10 X
- 변수 해제
unset 변수명
EX) #unset A
- 변수 확인
#set
전역 환경 변수
- 모든 쉘에 적용되는 변수
- 변수 선언 및 초기화
#export 변수명=값
- 변수 해제
#unset 변수명
- 변수 확인
#env
지역 환경 변수 테스트
# LOCAL=test //선언
#set | grep LOCAL //확인
#/bin/bash //bash 서브 쉘 실행
#exit //상위 쉘로 이동 (logout)
#echo $LOCAL // 지역 변수 LOCAL 값 확인
#/bin/bash
#echo $LOCAL //출력 안되지
#exit
#unset LOCAL //해제
#set | grep LOCAL //해제확인
전역 환경 변수 테스트
#export GLOBAL=test1 //선언
#echo $GLOBAL //확인
#set |grep GLOBAL //확인
# env |grep GLOBAL //확인
#/bin/bash
#echo $GLOBAL
전역 환경이라 요기 쉘에서도 출력이 된다.
# GLOBAL=test2 //지역 환경 변수 그냥 덮어 씌워진거다.
#exit
#echo $GLOBAL // test1
#echo $PS1
[\u@\h \W]\$
이런거로 설정가능
설정힘들면 http://ezprompt.net/사이트들가서 원하는 것 다운
export PS1="[\[\e[33m\]\u\[\e[m\]@\[\e[36;40m\]\h\[\e[m\] \[\e[35m\]\W\[\e[m\]] \\$ "
세선 유지
#echo $TMOUT //세션유지시간
#TMOUT=10 //10초후 로그아웃됨
#TMOUT= //무제한
사용자 환경을 구성하는 초기화 파일
/etc/profile
- 환경변수와 bash가 동작 시 사용되는 프로그램을 제어하는
전역적인 시스템 설정과 관련된 파일
/etc/profile.d/
- /etc/profile 파일에 의해서 /etc/profile.d/ 디렉토리내에 스크립트가 실행이 되며 여러가지 변수들이 동작하며 쉘 환경 제공
/etc/bashrc
- 사용자가 로그인 하였을때 사용자 계정에 있는 .bashrc 파일에 의해서 실행이 되며, 전체 사용자에게 적용할 alias 및 쉘 환경변수값을 설정하는 파일
~/.bash_profile
- 환경변수와 bash가 동작 시 사용되는 프로그램을 제어하는
지역적인 시스템 설정과 관련된 파일
~/.bashrc
- ~/.bash_profile에 의해서 실행되며 .bashrc 파일은 다시 /etc/bashrc을 실행 하여, 사용자에게 기본적으로 적용할 alias 정보가 있다.
Login시 실행되는 파일의 순서
/etc/profile -> /etc/profile.d/*
~/ .bash_profile
~/ .bashrc
/etc/bashrc
# vim /etc/bashrc
다시 로그아웃했다 들어와도 저기에 입력된 내용은 초기화 되지 않는다.