리눅스 서버를 운영하는 웹 호스팅 사이트가 많이 존재한다. 대체로 사이트를 만들어주고 월 일정요금을 받으며, 사용자에게 서비스를 제공하는 역할을 하는곳이다.
하지만 가끔식 특정 사이트의 사용자들이 무분별하게 데이터를 업로드 하는걸 보고, 사용자 용량 제한을 설정할 필요성을 경험한적도 있다. 리눅스 서버에서 사용자 별로 용량 제한 하는 방법에 대해 설명하겠다.
리눅스에는 quota 라는 툴이 존재한다. 파일시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한하는 것이며, 리눅스 시스템 사용자의 용량을 설정할 수 있는 아주 좋은 툴이다.
Quota 설치
일반적으로 레드헷 기반의 centos 운영체제가 설치된 환경에서 quota가 설치되어있는지 확인해 보자.
rpm -qa quota
설치된 파일 리스트가 보이면 별도로 설치 안해도 되며, 아무런 메시지가 나오지 않는다면 설치를 해야된다.
yum -y install quota
필자의 경우 quota가 이미 설치된 상태이다.
quota 설정
쿼터는 유저별 제한, 그룹별 제한이 가능하다. 여기서 파일시스템에 제한 여부를 확인해 본다.
vi /etc/fstab
quota로 설정할 파일시스템을 선택하여, usrquota 라는 명령줄을 추가해 준다. 여기서 중요한부분이, defaults,usrquota 라고 중간에 , 를 붙여줘야 된다. 혹시나 그룹별 제한을 위해서는 grpquota 를 추가하면 된다.
아래는 /etc/fstab 에 할당할수 있는 옵션들이다.
옵션 | 적용대상 | 용도 |
usrquota | 모든 유형 | 사용자 할당량 사용 |
usrjquota=filename | vfsv0 | 저널 사용자 할당량 사용(jqfmt 옵션의 스펙 및 할당량 데이터베이스 파일 이름(일반적으로aquota.user)이 필요함) |
uquota | xfs | usrquota와 동등 |
grpquota | 모든 유형 | 그룹 할당량 사용 |
grpjquota=filename | vfsv0 | 저널 그룹 할당량 사용(jqfmt 옵션의 스펙 및 할당량 데이터베이스 파일 이름(일반적으로 aquota.group)이 필요함) |
gquota | xfs | grpquota와 동등 |
prjquota | xfs | 프로젝트 할당량 사용 |
pquota | xfs | prjquota와 동등 |
jqfmt=format | vfsv0 | usrjquota 또는 grpjquota가 지정될 때 사용된 할당량의 형식(현재는 vfsv0가 유일하게 지원되는 형식임) |
quota | vfsold, vfsv0 | usrquota와 동등 |
noquota | vfsold, vfsv0 | 할당량을 사용하지 않음 |
uqnoenforce | xfs | 사용자 할당량 계산을 사용하지만 적용하지는 않음 |
gqnoenforce | xfs | 그룹 할당량 계산을 사용하지만 적용하지는 않음 |
pqnoenforce | xfs | 프로젝트 할당량 계산을 사용하지만 적용하지는 않음 |
설정 적용을 위해서는 재부팅하거나 다시 마운트를 해야되는데, 리마운트 명령어를 입력해서 바로 적용하는 방법도 있다.
mount -o remount /data
화면과 같이 리마운트 된 모습을 확인할 수 있다. 명령어 입력을 통해 리눅스 프롬프트 상에서 아무런 반응이 없으면 정상인 것이다.
mount
명령어를 이용해서 정상적으로 마운트가 되었는지 최종 확인 한다.
시스템 사용자 용량 제한
사용자 용량 제한을 하기 위해서는 quota 를 사용할 파일 생성 및 계정별 용량을 설정해야 된다.
cd /data
touch aquota.user
보안을 위해 소유자(root)외에는 접근하지 못하도록 설정한다.
chmod 600 aquota.user
쿼터의 적용을 위해 현재 상태를 체크한다.
quotacheck -avug
쿼타 시작
quotaon -avug
모든 쿼타 설정을 확인한다.
repquota -a
*** 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 -- 3175360 0 0 7846 0 0
mysql -- 496044 0 0 37185 0 0
dong -- 16 400000 400000 4 0 0
#500 -- 1836 0 0 123 0 0
#501 -- 39408 0 0 2614 0 0
#1169 -- 7644 0 0 299 0 0
#7161 -- 289400 0 0 15454 0 0
repquota 옵션 설명
used : 현재 사용량
soft : 현재 설정된 soft limit
hard : 현재 설정된 hard limit
grace : soft limit에 지정된 용량 초과시 남은 유예 기간 표시
사용자 용량 설정
edquota -u dong
Disk quotas for user dong (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 16 400000 400000 4 0 0
edquota 옵션 설명
단위는 기본 kbytes 이다.
Filesystem : quota를 적용할 파일 시스템
blocks : 현재 유저의 총 사용량
soft : blocks이 지정한 용량을 초과하면 경고 (0일때는 제한이 없다는 것)
hard : blocks이 지정한 용량을 초과하면 쓰기 금지 (0일때는 제한이 없다는 것)
inodes : 현재 유저의 파일의 갯수
soft : inodes가 지정한 파일수를 초과하면 경고 (0일때는 제한이 없다는 것)
hard : inodes가 지정한 파일수를 초과하면 쓰기 금지 (0일때는 제한이 없다는 것)
편집 방법은 vi를 사용하듯 사용하면 되고 10240kb(10MB)와 같은 값을 입력해주면 된다.
사용자 용량 제한인 quota 설정이 완료되었다. quota 설정이 적용 된 계정들은 ftp 파일업로드 및 기타방법등으로 업로드를 할 경우 제한된 설정값 까지만 업로드가 가능해지게 되었다.