본문 바로가기

Linux/기타

quota

주제 : 사용자 용량 제한 (QUOTA) - 쿼터는 사용자에 대해서 파일 용량파일 개수제한하는 기능이다. - 파티션을 분할하고 포맷(파일시스템생성)을 하면 파일의 용량과 개수가 정해져 있다. - 제한 방법에는 사용자로 제한하는 방법과 그룹으로 제한하는 방법이 있다. - 쿼터를 사용하기 위해서는 커널이 인식하고 있어야 한다. - 쿼터는 커널에서 지원하지 않다면 설정이 안된다. (자동으로 인식되어 있지만 커널을 새로 컴파일해서 쿼터를 사용한다면 사용자가 인식을 시켜줘야함) o CentOS 5 를 설치시 일반 사용자가 저장할 수 있는 영역들 1. /home 디렉토리 e.g. /home/user1 (rwx------) 2. /tmp 디렉토리 e.g. /tmp(rwxrwxrwt) 3. /dev/shm 디렉토리 e.g. /dev/shm(rwxrwxrwt) 4. /var/cache/coolkey 디렉토리 e.g. /var/cache/coolkey(rwxrwxtwt) 5. /var/tmp 디렉토리 e.g. /var/tmp(rwxrwxrwt) - quota 가 설정이 안된 시스템에 attcker 가 공격하면 일어날 수 있는 문제점 1. 시스템에 홈페이지가 돌아가면 로그인기능으로 로그인하면 안된다. - /tmp 디렉토리에 세션파일을 생성하는데 이 부분에 의해서 생성을 못하면 당연히 로그인이 안된다. 2. gcc 로 컴파일이 안된다. 3번은 마운트를 해제된다. - umount /dev/shm - /etc/fstab 에서 /dev/shm 라인에 # 을 추가 4번은 coolkey 패키지를 삭제한다. - yum remove coolkey 5번은 /var/tmp 를 /tmp 로 심볼릭 링크를 건다. - rm -rf /var/tmp ; ln -s /tmp /var/tmp 1번과 2번에 대해서 쿼터를 설정하고 보안상 실행권한을 제거해야 한다. # cp /bin/ls . # mount -o remount,defaults,usrquota,noexec /home # mount | grep home /dev/sda3 on /home type ext3 (rw,noexec,usrquota,usrquota) # ./ls -bash: ./ls: Permission denied 참고 : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=195&sca=1&sfl=wr_subject&stx=quota&sop=and - 마운트 정보를 확인한다. - df(용량), df -i (파일개수) # df ; df -i Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 7103744 3055624 3681440 46% / Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 1835008 103132 1731876 6% / # su - quotauser1 $ seq 5 $ seq 1 3 $ seq 1 2 10 $ seq 10 -1 1 $ seq 10 -2 1 $ for i in $(seq 500) > do > touch ${i}.txt > done $ ls | wc -l 500 $ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 1835008 103633 1731375 6% / o quota 사용하기 위해서 필요한 것 1. 커널에서 quota 기능이 인식되야 한다. 2. quota 패키지가 설치되어야 한다. 3. qutoa 를 세팅한다. o 제한 방법 사용자 제한 : 사용자 쿼터 그룹 제한 : 그룹 쿼터 # rpm -q quota # rpm -qi quota # rpm -ql quota /sbin/quotacheck : 쿼터를 체크한다. /sbin/quotaoff : 쿼터를 off /sbin/quotaon : 쿼터를 on /usr/bin/quota : 일반유저가 자신의 용량을 확인 /usr/sbin/edquota : 사용자의 쿼터 설정 /usr/sbin/repquota : 사용자의 쿼터 출력 o 쿼터파일 - 일반적으로 만들때 속성이 걸려있다. - 사용자쿼터 : quota.user(old) -> aquota.user(new) - 그룹쿼터 : quota.group(old) -> aquota.group(new) # lsattr /aquota.user ----i--A----- /aquota.user # rpm -q quota quota-3.13-5.el5 # rpm -ql quota /etc/quotagrpadmins /etc/quotatab /etc/warnquota.conf /sbin/quotacheck /sbin/quotaoff /sbin/quotaon /usr/bin/quota /usr/include/rpcsvc/rquota.h /usr/include/rpcsvc/rquota.x /usr/sbin/convertquota /usr/sbin/edquota /usr/sbin/quotastats /usr/sbin/repquota /usr/sbin/rpc.rquotad /usr/sbin/setquota /usr/sbin/warnquota /usr/share/locale/fr/LC_MESSAGES/quota.mo /usr/share/locale/pl/LC_MESSAGES/quota.mo /usr/share/man/man1/quota.1.gz /usr/share/man/man2/quotactl.2.gz /usr/share/man/man3/rquota.3.gz /usr/share/man/man8/convertquota.8.gz /usr/share/man/man8/edquota.8.gz /usr/share/man/man8/quotacheck.8.gz /usr/share/man/man8/quotaoff.8.gz /usr/share/man/man8/quotaon.8.gz /usr/share/man/man8/quotastats.8.gz /usr/share/man/man8/repquota.8.gz /usr/share/man/man8/rpc.rquotad.8.gz /usr/share/man/man8/rquotad.8.gz /usr/share/man/man8/setquota.8.gz /usr/share/man/man8/warnquota.8.gz =================================================================== LAB> dd 명령어 사용법 - dd 명령어란 ? dd 명령어는 블록 단위로 파일을 복사하거나 파일 변환을 할 수 있는 명령어이다. /dev/zero도 가상 파일(pseudo file)로써 실제로 널 값을 갖고 있다(아스키 문자 0이 아닌 숫자 0). /dev/zero는 특정한 길이의 초기화된 더미 파일을 임시 스왑 파일로 만드는데 주로 쓰인다. -- dd 옵션 -- if=FILE : 표준입력대신 지정한 파일을 입력으로 받는다. of=FILE : 표준 출력대신 지정된 파일에 출력한다. bs=BYTES : 한 번에 BYTES씩 읽어 들이고 출력. ibs와 obs를 한 번에 지정한 것과 같다. cbs=BYTES : 한 번에 BYTES씩 변환 작업을 한다. conv=CONVS : 로 분리된 단어들을 파일로 변환한다. count=BLOCKS : 입력 블록의 ibs 크기만큼만 복사한다. ibs=BYTES : 입력 단위로 한 번에 BYTES 단위로 읽어 들인다. obs=BYTES : 출력 단위로 한번에 BYTES 단위로 출력한다. seek=BLOCKS : 출력 시작시 지정된 BLOCKS의 단위만큼 obs 크기를 건너뛰고 출력을 시작한다. skip=BLOCKS : 입력 시작시 지정된 BLOCKS의 단위만큼 ibs 크기를 건너뛰고 입력을 시작한다. : : -- dd 옵션 -- -- dd 의 사용 예 -- - 1024바이트씩 1000번을 /dev/zero에서 읽어서 /swapfile에 기록한다. # dd if=/dev/zero of=/swapfile bs=1024 count=1000

- if 를 생략하면 기본값은 standard input (키보드) 으로 입력받아서 a.txt 에 저장한다.

# dd of=a.txt 1234 0+2 records in 0+1 records out 5 bytes (5 B) copied, 8.45326 seconds, 0.0 kB/s # ls -l a.txt -rw-r--r-- 1 root root 5 Apr 27 12:15 a.txt # od -c a.txt 0000000 1 2 3 4 \n 0000005


- of 를 생략하면 기본값은 standard output(정상 출력화면)으로 내용을 출력한다.
# dd 
1234
1234



- /bin/mv 파일을 현재 디렉토리에 mv.bak 파일로 dd 를 이용해서 복사하시오. # dd if=/bin/mv of=mv.bak 160+1 records in 160+1 records out 82180 bytes (82 kB) copied, 0.0165804 seconds, 5.0 MB/s # ls -l /bin/mv -rwxr-xr-x 1 root root 82180 Mar 21 2012 /bin/mv # ls -l mv.bak -rw-r--r-- 1 root root 82180 Apr 27 12:50 mv.bak --> 파일을 복사할 뿐 권한까지 복사하지는 않는다.                                                  --> 권한까지 복사하려면 cp -a를 이용


- dd 를 이용한 하드복제 # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/VolGroup00-LogVol00 18156292 2371512 14847616 14% / /dev/sda1 101086 12467 83400 14% /boot tmpfs 127480 0 127480 0% /dev/shm /dev/hdc 3831642 3831642 0 100% /mnt # dd if=/dev/sda1 of=hdd_sda1 208782+0 records in 208782+0 records out 106896384 bytes (107 MB) copied, 2.28783 seconds, 46.7 MB/s # ll hdd_sda1 -rw-r--r-- 1 root root 106896384 Apr 27 12:18 hdd_sda1 # ls -lh hdd_sda1 -rw-r--r-- 1 root root 102M Apr 27 12:18 hdd_sda1


# mkdir hdd_boot # mount -o loop hdd_sda1 hdd_boot --> 파일이기 때문에 loop 옵션을 줘야한다. # df # ls /boot # ls hdd_boot

=================================================================== =================================================================== LAB> 자신의 리눅스서버에 quota 를 설정해보자. 쿼터종류 : 사용자 쿼터 -- 순서 -- - user quota 설정 1. /etc/fstab 에 쿼터설정 (vi /etc/fstab) 2. 쿼터인식 (remount or reboot) 3. 쿼터파일 생성 ( install aquota.user ) 4. 쿼터체크 (quotacheck ) 5. 쿼터시작 (quotaon) 6. 사용자 설정 (edquota) 7. 사용자 확인 (repquota) 8. 테스트 (파일용량 테스트) 9. 테스트 (파일개수 테스트) -- 순서 -- 1. /etc/fstab 에 쿼터설정 (vi /etc/fstab) - 사용자 쿼터 : usrquota, 그룹 쿼터 : grpquota - /home 파티션이 없을 때 / 에 usrquota를 추가한다. - /home 파티션이 있을 때는 /home 에 usrquota를 추가한다. # vi /etc/fstab -- /etc/fstab -- # 디마파옵덤fs LABEL=/ / ext3 defaults,usrquota 1 1 -- /etc/fstab -- - /home 파티션이 있을 때 /home 에 usrquota를 추가한다. -- /etc/fstab -- LABEL=/home /home ext3 defaults,usrquota 1 2 -- /etc/fstab -- 2. 쿼터인식 (mount or reboot) - /home 파티션이 없을 때 / 를 확인한다. # mount /dev/sda1 on / type ext3 (rw) : : - /home 파티션이 있을 때 /home 를 확인한다. # mount : /dev/sda3 on /home type ext3 (rw) - /home 파티션이 없을 때 / 를 remount 한다. # mount -o remount / # mount /dev/sda1 on / type ext3 (rw,usrquota) : : - /home 파티션이 있을 때 /home 를 remount 한다. # mount -o remount /home # mount : /dev/sda3 on /home type ext3 (rw,usrquota) : 3. 쿼터파일 생성 ( install aquota.user ) - 쿼터파일은 사용자의 용량에 제한을 거는 파티션에 만들어야 한다. - /home 파티션이 없을 때 / 에 생성해준다. # install -m 600 /dev/null /aquota.user # ls -l /aquota.user -rw------- 1 root root 0 Apr 16 13:53 /aquota.user - /home 파티션이 있을 때 /home 생성해준다. # install -m 600 /dev/null /home/aquota.user # ls -l /home/aquota.user -rw------- 1 root root 0 Apr 16 13:53 /home/aquota.user 4. 쿼터체크 (quotacheck ) # quotacheck -avum --> 데이터가 없기 때문에 warning이 나올 것이다. - /home 파티션이 없을 때 # ls -l /aquota.user -rw------- 1 root root 11264 Apr 16 13:55 /aquota.user - /home 파티션이 있을 때 # ls -l /home/aquota.user -rw------- 1 root root 11264 Apr 16 13:55 /home/aquota.user 5. 쿼터시작 (quotaon) - /home 파티션이 없을 때 # quotaon -avu /dev/sda1 [/]: user quotas turned on - /home 파티션이 있을 때 # quotaon -avu /dev/sda3 [/home]: user quotas turned on 6. 사용자 설정 (edquota) - 파일 용량 (soft : 100M, hard : 200M) - 파일 개수 (soft : 100, hard : 200) - for 문을 이용해서 사용자를 자동으로 생성한다. # for i in 1 2 3 4 5 > do > userdel -r user$i > done # for i in `seq 5` > do > useradd user$i > done # tail -5 /etc/passwd user1:x:5004:5005::/home/user1:/bin/bash user2:x:5005:5006::/home/user2:/bin/bash user3:x:5006:5007::/home/user3:/bin/bash user4:x:5007:5008::/home/user4:/bin/bash user5:x:5008:5009::/home/user5:/bin/bash # repquota -a | grep ^user user1 -- 76 0 0 10 0 0 user2 -- 68 0 0 9 0 0 user3 -- 68 0 0 9 0 0 user4 -- 68 0 0 9 0 0 user5 -- 68 0 0 9 0 0 - edquota 명령어를 이용해서 user1 사용자의 용량과 개수의 제한을 설정한다. # edquota user1 Disk quotas for user user1 (uid 5007): Filesystem blocks soft hard inodes soft hard /dev/sda1 156 100000 200000 20 100 200 --> 이것들만 변경 - 쿼터설정 복사 (edquota -p) - -p 사용자 를 주면 사용자에 설정된 값 그대로 복사한다. - user1 에 설정된 쿼터설정을 user2 ~ user5 까지 복사한다. # edquota -p user1 user2 # edquota -p user1 user3 # edquota -p user1 user4 # edquota -p user1 user5 7. 사용자 확인 (repquota) # repquota -a | grep ^user user1 -- 76 100000 200000 10 100 200 user2 -- 68 100000 200000 9 100 200 user3 -- 68 100000 200000 9 100 200 user4 -- 68 100000 200000 9 100 200 user5 -- 68 100000 200000 9 100 200 8. 테스트 (파일용량 테스트) # su - user1 user1$ dd if=/dev/zero of=dump.dd bs=1024 count=100000 user1$ quota Disk quotas for user user1 (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/root 100184* 100000 200000 6days 11 100 200 $ exit # repquota -a | egrep 'Block|User|---|user1' Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- user1 +- 100184 100000 200000 6days 11 100 200 ~~~~~~~ ~~~~~~ ~~~~~ + : 파일의 용량부분(+는 범위를 벗어났다는 뜻) --> 용량을 초과하여 grace 가 설정됨 - : 파일의 개수부분(-는 범위 내에 있다는 뜻)

- 자신의 시스템 시간을 보고 미래로 시간을 변경한다.

# date 113010302014 Sun Nov 30 10:30:00 KST 2014 # repquota -a | grep user1 webuser1 -- 20 0 0 10 0 0 user1 +- 100419 100000 200000 none 12 10000 20000 # su - user1 $ mkdir a sda3: write failed, user block quota exceeded too long. mkdir: cannot create directory `a': Disk quota exceeded -- 만약 미래로 현재 시간을 돌릴려면 아래를 실행하면 된다. -- # su - user1 - 최대 용량까지 만들어지고 중지된다. - if : input file 로 복사할 파일을 적는다 - of : ouput file 로 복사될 파일을 적는다 - bs : block size 로 HDD 는 block 크기로 data 에 접근하므로 써준다. - count : 반복 으로 1024를 100000 만큼 돌려서 생성한다(100M정도) user1$ dd if=/dev/zero of=dump2.dd bs=1024 count=100000 sda1: write failed, user block limit reached. dd: writing `dump2.dd': Disk quota exceeded 99709+0 records in 99708+0 records out 102100992 bytes (102 MB) copied, 1.15706 seconds, 88.2 MB/s - 사용량을 확인한다. user1$ quota Disk quotas for user user1 (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/root 200000* 100000 200000 6days 12 100 200 - a.txt 파일을 생성해보자. user1$ echo 123 > a.txt -bash: a.txt: Disk quota exceeded - 파일의 최대 용량에 도달해서 더 이상 파일을 생성할 수 없다. user1$ ls dump2.dd dump.dd public_html 9. 테스트 (파일개수 테스트) - 파일의 개수가 최대값까지 도달하여 더 이상 파일을 생성할 수 없다. user1$ user1$ rm -rf *; mkdir filelimits; cd filelimits user1$ for i in $(seq 250) > do > touch $i.txt > done : : sda1: warning, user file quota exceeded. sda1: write failed, user file limit reached. touch: cannot touch `191.txt': Disk quota exceeded touch: cannot touch `192.txt': Disk quota exceeded : : touch: cannot touch `247.txt': Disk quota exceeded touch: cannot touch `248.txt': Disk quota exceeded touch: cannot touch `249.txt': Disk quota exceeded touch: cannot touch `250.txt': Disk quota exceeded user1$ quota Disk quotas for user user1 (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/root 836 100000 200000 200* 100 200 6days user1$ exit # repquota -a | egrep 'Block|User|---|user1' Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- user1 -+ 836 100000 200000 200 100 200 6days ===================================================================



============================================================
LAB> 아래 조건에 맞게 사용자 쿼터를 설정하시오.

************************************************
-- 쿼터정보 --
sbsuser : 용량 : 300M ~ 400M, 개수 : 4000 ~ 5000
sbsuser   : block soft: 300000   hard: 400000  
            inode soft: 4000     hard: 5000

kbsuser : 용량 : 700M ~ 800M, 개수 : 5000 ~ 6000
kbsuser   : block soft: 700000   hard: 800000
            inode soft: 5000     hard: 6000

mbcuser : 용량 : 1100M ~ 1200M, 개수 : 9000 ~ 10000
mbcuser   : block soft: 1100000  hard: 1200000
            inode soft: 9000     hard: 10000
************************************************

-- 순서 --
1. 사용자 생성 & 비번 부여
2. 사용자별 쿼터 설정
3. 쿼터 확인
-- 순서 --

1. 사용자 생성 & 비번 부여
# useradd sbsuser
# passwd sbsuser

# useradd kbsuser
# passwd kbsuser

# useradd mbcuser
# passwd mbcuser

2. 사용자별 쿼터 설정

# edquota  sbsuser
Disk quotas for user sbsuser (uid 8007):
  Filesystem                   blocks       soft       hard     inodes     soft     hard    
  /dev/root                        68      300000    400000          9    4000      5000 

# edquota  kbsuser
Disk quotas for user sbsuser (uid 8007):
  Filesystem                   blocks       soft       hard     inodes     soft     hard    
  /dev/root                        68      700000    800000          9    5000      6000 

# edquota  mbcuser
Disk quotas for user sbsuser (uid 8007):
  Filesystem                   blocks       soft       hard     inodes     soft     hard    
  /dev/root                        68      1100000    1200000          9 9000      10000 

3. 쿼터 확인

# repquota -a 
  :
  :
sbsuser   --      68  300000  400000              9  4000  5000       
kbsuser   --      68  700000  800000              9  5000  6000  
mbcuser   --      68  1100000  1200000              9  9000  10000  

============================================================


============================================================
- quota 가 계속 에러가 나면 
- UID 500 이상인 사용자를 시스템에서 자동으로 제거하고 
- 다시 설정해본다.

# cat /etc/passwd 
# cat /etc/passwd | awk -F : '{print $1}'
# cat /etc/passwd | awk -F : '{print $3}'
# cat /etc/passwd | awk -F : '{if($3 >= 500) print $3}'
# cat /etc/passwd | awk -F : '{if($3 >= 500) print $1}'


# for i in `cat /etc/passwd | awk -F : '{if($3 >= 500) print $1}'`
do
  userdel -r $i
done

# rm -rf /home/*
# rm -f /var/spool/mail/*
# touch /var/spool/mail/root
# chmod 640 /var/spool/mail/root
# chgrp mail /var/spool/mail/root

============================================================
============================================================
LAB> 아래 조건에 맞게 사용자 쿼터를 설정하시오.

절약형 : 400M
일반형 : 800M
고급형 : 1.2G

user100 : 절약형
user200 : 절약형
user300 : 절약형

user400 : 일반형
user500 : 일반형
user600 : 일반형

user700 : 고급형
user800 : 고급형 
user900 : 고급형

-- 순서 --
1. 서비스에 대한 샘플 사용자를 등록/쿼터 설정
2. 각 사용자를 생성
3. 그 사용자의 용량에 맞게 edquota 로 복사
-- 순서 --

1. 서비스에 대한 샘플 사용자를 등록/쿼터 설정
************************************************
-- 쿼터정보 --
user400m  : block soft: 400000   hard: 410000
            inode soft: 5000     hard: 5100
user800m  : block soft: 800000   hard: 810000
            inode soft: 5000     hard: 5100
user1200m : block soft: 1200000  hard: 1210000
            inode soft: 5000     hard: 5100
************************************************

# useradd user400m
# useradd user800m
# useradd user1200m
# edquota user400m   
# edquota user800m 
# edquota user1200m 

2. 각 사용자를 생성
# useradd user100 
# useradd user200 
# useradd user300 
# useradd user400
# useradd user500
# useradd user600
# useradd user700
# useradd user800
# useradd user900

3. 그 사용자의 용량에 맞게 edquota 로 복사
# edquota -p user400m user100
# edquota -p user400m user200
# edquota -p user400m user300

# edquota -p user800m user400
# edquota -p user800m user500
# edquota -p user800m user600

# edquota -p user1200m user700
# edquota -p user1200m user800
# edquota -p user1200m user900


4. 사용자의 용량을 확인 
# repquota  -auv | egrep 'User|---|^user'
*** Report for user quotas on device /dev/sdb1
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
user400m  --      40  400000  410000              5  5000  5100       
user800m  --      40  800000  810000              5  5000  5100       
user1200m --      40 1200000 1210000              5  5000  5100       
user100   --      40  400000  410000              5  5000  5100       
user200   --      40  400000  410000              5  5000  5100       
user300   --      40  400000  410000              5  5000  5100       
user400   --      40  800000  810000              5  5000  5100       
user500   --      40  800000  810000              5  5000  5100       
user600   --      40  800000  810000              5  5000  5100       
user700   --      40 1200000 1210000              5  5000  5100       
user800   --      40 1200000 1210000              5  5000  5100       
user900   --      40 1200000 1210000              5  5000  5100 

=========================================================


=========================================================
LAB> 위의 2,3의 조건에 맞게 쉘스크립트로 짜보시오.
------------------------------------------------------
- 쿼터 자동생성 스크립트명 : useradd.sh 
- 스크립트의 인자 : <사용자명> <용량>
- 쉘스크립트에 필요한 제어문 : if , case
- 쉘스크립트에 필요한 변수들  
  $# : 인자의 개수
  $0 : 명령어
  $1 : 사용자명
  $2 : 용량

- 명령어 : useradd, passwd(생략), edquota, exit
------------------------------------------------------

ex)
# useradd.sh
Usage : useradd.sh <사용자명> <용량>

- user100 을 400m 쿼터 용량으로 할당
# useradd.sh user100 400m

- user500 을 800m 쿼터 용량으로 할당
# usreadd.sh user500 800m


- 프로그램 작성 -
# cd ~/bin
# install /dev/null useradd.sh 
# vi useradd.sh
-- useradd.sh --
#!/bin/sh

argc=$#
username=$1
userquota=$2

# argument 를 검사한다.
if [ $argc -ne 2 ]; then 
  echo "Usage : `basename $0` <username> <quota>"
  exit 1
fi

# 사용자를 생성한다.
useradd $username

# switch case 형식과 비슷
case $userquota in
  "400m"  ) edquota -p user400m  $username ;;
  "800m"  ) edquota -p user800m  $username ;; 
  "1200m" ) edquota -p user1200m $username ;;
esac
-- useradd.sh --

-- 실행 --
# ./useradd.sh 
Usage : useradd.sh <username> <quota>
# ./useradd.sh user110 400m
# ./useradd.sh user220 400m
# ./useradd.sh user330 400m
# ./useradd.sh user440 800m
# ./useradd.sh user550 800m
# ./useradd.sh user660 800m
# ./useradd.sh user770 1200m
# ./useradd.sh user880 1200m
# ./useradd.sh user990 1200m

# repquota -a  
  :
  :
user110   --      44  400000  410000              6  5000  5100       
user220   --      44  400000  410000              6  5000  5100       
user330   --      44  400000  410000              6  5000  5100       
user440   --      44  800000  810000              6  5000  5100       
user550   --      44  800000  810000              6  5000  5100       
user660   --      44  800000  810000              6  5000  5100       
user770   --      44 1200000 1210000              6  5000  5100       
user880   --      44 1200000 1210000              6  5000  5100       
user990   --      44 1200000 1210000              6  5000  5100 
============================================================

=====================================================================
LAB> 서버에 새로운 하드 1개를 추가하고 아래 조건의 쿼터를
     사용자에게 제한하시오.

- 조건 -
1. 사용자는 생성시 자동으로 /home2 디렉토리에 위치해야 함.

쿼터종류    : user quota 
HDD 1개추가 : 용량(8G), 동적할당
파티션      : 1개
mount point : /home2

생성할 사용자 : newuser1, newuser2, newuser3
사용자 홈디렉토리 : /home2/newuser1, /home2/newuser2, /home2/newuser3

----------+-------------------------------+-----------------------------
 사용자명 |            파일 용량          |        파일 개수
----------+-------------------------------+------------------------------
newuser1  | 용량(soft->100m, hard->300m)  | 개수(soft->3000, hard->10000)
newuser2  | 용량(soft->500m, hard->800m)  | 개수(soft->8000, hard->20000)
newuser3  | 용량(soft->700m, hard->1000m) | 개수(soft->9000, hard->30000)
----------+-------------------------------+------------------------------

- 작업 순서 -
1. 하드디스크를 추가한다.
2. 확인 및 분할작업을 한다.
# fdisk -l 
# fdisk /dev/sdb
# mke2fs -j /dev/sdb1

3. 마운트 작업을 한다.
# mkdir /home2
# mount /dev/sdb1 /home2
  :
/dev/sdb1 on /home2 type ext3 (rw)
# df
  :
/dev/sdb1              8254240    149628   7685320   2% /home2

# vi /etc/fstab
  :
/dev/sdb1               /home2                  ext3    defaults        1 2
  :

4. 사용자를 생성한다.
# useradd -D -b /home2
# useradd newuser1
# passwd newuser1

# useradd newuser2
# passwd newuser2

# useradd newuser3
# passwd newuser3

5. 쿼터를 세팅한다.
# vi /etc/fstab
  :
/dev/sdb1               /home2                  ext3    defaults,usrquota        1 2
  :
# mount -o remount /home2
# mount 
  :
/dev/sdb1 on /home2 type ext3 (rw,usrquota)

6. 쿼터 파일을 생성한다.
# install -m 600 /dev/null /home2/aquota.user
# quotacheck -auv

7. 쿼터를 on 시킨다.
# quotaon -auv

8. 사용자별로 쿼터를 적용시킨다.
# edquota newuser1
Disk quotas for user newuser1 (uid 500):
  Filesystem      blocks   soft       hard     inodes     soft     hard
  /dev/sdb1       40       100000     300000   5          3000     10000 

# repquota -auv 
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --  149628       0       0              4     0     0       
newuser1  --      40  100000  300000              5  3000 10000       
newuser2  --      40       0       0              5     0     0       
newuser3  --      40       0       0              5     0     0 
  :
  :
=====================================================================

=====================================================================
LAB> /etc/fstab 에 잘못 설정된 내용으로 부팅이 안되었을 때 복구하는 방법

# e2label /dev/sdb1

# vi /etc/fstab
-- /etc/fstab --
  :
LABEL=/home2  /home2   ext3  defaults,usrquota    1 2
-- /etc/fstab --

# reboot
  :

부팅중에 멈추게된다.
관리자 비번을 입력하고 로그인을 한다.
부팅 후 파티션이 read only 로 설정되어 있으므로 반드시 
read write 로 변환한 후 작업을 진행해야 한다.

# mount -o remount,rw /
# /bin/vi /etc/fstab
-- /etc/fstab --
  :
/dev/sdb1 /home2   ext3  defaults,usrquota    1 2
-- /etc/fstab --

# reboot

=====================================================================


'Linux > 기타' 카테고리의 다른 글

cron#2  (0) 2015.04.29
cron#1  (0) 2015.04.28
사용자와 그룹  (0) 2015.04.24
프로세스#2  (0) 2015.04.23
프로세스#1  (0) 2015.04.22