본문 바로가기
운영체제 (LNX,WIN)

UFS(Unix File System) ACL 사용

by 날으는물고기 2009. 5. 27.

UFS(Unix File System) ACL 사용

UFS 파일시스템 : 사용자나 시스템이 접근하는 파일이나 디렉토리를 저장한 정보를 가짐
 
   ① 디스크레이블
   ② 부트블럭
   ③ 슈퍼블럭
    ---------------
   ④ 백업슈퍼블럭        ┐
   ⑤ 실린더 그룹 블럭  │  First Cylinder Group  : 논리적으로 나눠놓은 공간
   ⑥ i-node 테이블      │
   ⑦ 데이터 블럭          ┘
    ---------------
   ⑧ 백업슈퍼블럭       ┐
   ⑨ 실린더 그룹 블럭  │ Second Cylinder Group
   ⓐ i-node 테이블      │                :
   ⓑ 데이터 블럭         ┘                 :

① 디스크레이블 : VTOC, 디스크에 대한 전반적인정보, (slice를 구성할때 생성됨)
② 부트블럭 : 시스템이 부팅하는데 사용되는 bootblk 프로그램이 저장되는 곳
                    부팅에 대한 정보를 저장해 놓은 영역,  각각의 파일 시스템에 존재(slice단위)
                    부팅불가능한 파일시스템에는 bootblk프로그램이 저장되지 않음
③ 슈퍼블럭 : 16~31섹터를 사용하며, 파일 시스템에 대한 전반적인 정보를 저장하는 영역
                     + 데이터블럭의 수, 실린더그룹의 수, i-node, 백업슈퍼블럭

④ 백업슈퍼블럭 : 슈퍼블럭에 대한 복사본
                           #newfs -N /dev/rdsk/c0d0s0 : slice, 슈퍼블록백업 정보가 출력
                              정보중) 16 c/g : 1개의 실린더 그룹에 16개 실린더로 구성
                                          16.00MB/g : 1개의 실린더 그룹의 용량은 16Mb
                                          7680 i/g : 7680개의 i-node가 소속
⑤ 실린더 그룹 블럭  : 최소 16에서 최대 256개 실린더로 구성되며, disk 접근 속도 향상 목적
                                 + 백업슈퍼블럭 : 슈퍼블럭의 정보를 가짐 (복사본)
                                 + 실린더그룹블럭 : i-node테이블 정보와, 데이터블록에 대한 정보
                                 + i-node : 데이터블럭에 대한 위치정보
                                 + 데이터블럭 :  데이터의 실제 저장소
⑥ i-node 테이블 : 실제 데이터를 저장하는 데이터 블록의 위치를 저장하는 영역
                i-node테이블 하나의 크기는 약 64kbyte
                file type, permission, uid, gid, size, date, direct pointer, single I.D.P, Double I.D.P, shadow i-node 정보가 저장
                   #ls -i : i-node의 Number를 확인
 *shadow i-node : ACL정보를 저장

⑦ 데이터 블럭 : 실제 데이터의 실제 저장소


링크파일
     - symbolic link : 윈도우의 단축아이콘과 비슷, 사이즈는 경로명의 글자수 (file type : l)
                               디렉토리 링크 가능
                               원본에 문제가 생기면 내용을 확인 할 수 없다.
                               #ln -s a b (ln -s 원본파일명 링크파일명)
     - Hard link : 원본과 동일한 i-node 사용, 파일로 만들어지지 않으며, 디렉토리 안에 i-node정보를 변경하기 때문에 링크수가 증가한다)
                        디렉토리 자체는 링크 할 수 없다
                        원본에 문제가 생겨도 내용확인이 가능하다
                        #ln a b   (ln 원본파일명 링크파일명)
                        *복사와는 개념이 틀림 (복사는 데이터블록도 틀리고, i-node정보도 틀림)


Device File
 + 시스템의 하드웨어나 주변기기를 나타내는 파일
 + 디바이스 파일의 실제 크기는 존재하지 않음 (185, 3등으로 표시한다)
     ┌ major number : 디바이스 파일의 종류 , 185
     └ minor number : 디바이스의 위치 , 3



mount : 물리적인 저장공간을 사용하기 위하여, 저장매체를 논리적인 저장공간으로 포인터로 연결 (디렉토리로 연결)
  옵션) -F (ufs, hsfs, pcfs, nfs) : 파일시스템을 지정하는 옵션 (기본적으로 ufs파일 시스템으로 지정)
    > mount 명령어는 재부팅을 하면 사라짐



퍼미션만으로는 충분치 않을 때 ACL을 사용하라.

예전에는 대체로 Unix 의 파일 퍼미션만으로 충분했다. 그러나, 다중 사용자로 구성된 고도의 협업 환경에서는 이 방법만으로는 관리가 힘들게 되었다. ACL(Access control list)은 오픈 소스Unix(Linux계열)에서는 새로운 기능이지만, 예전부터 상용 OS에서는 사용되고 있었다. ACL은 원래 시스템의 안전성을 높여주는 것이 아니라, 복잡한 퍼미션 관리를 편리하게 해주는 것이다. ACL은 파일과 디렉터리 퍼미션을 적용하는 새로운 방법으로, 불필요한 그룹을 생성하지는 않는다.

ACL은 파일시스템의 메타데이터의 확장된 속성으로서 저장된다. 당신이 정한 기준에 근거하여 파일이나 디렉터리에 액세스를 허가하거나 거부하는 리스트를 ACL에 정의할 수 있다. 하지만, ACL은 기존의 퍼미션 시스템을 완전히 버리는 것은 아니다. ACL은 user와 group에 지정할 수 있고, read, write, execute 영역으로 구분된다. 게다가 ACL은 파일 모드의 "other" 비트처럼 어떠한 유저 ACL이나 그룹 ACL에도 속하지 않는 유저나 그룹에도 정의할 수 있다.

또한 ACL은 ACL 마스크(mask)라는 것을 가지고 있어, 유저와 그룹에 지정된 모든 ACL의 퍼미션 마스크로서 동작한다. 이것은 umask와 비슷하지만, 약간 다르다. 예를 들어, ACL마스크를 r-- 로 설정하면, 일치하는 모든 ACL은 자신의 갖고 있는 퍼미션(예: rw-)이 효력을 잃게 되어, r--로 설정된다. 디렉터리는 디폴트 ACL을 가질 수 있는데, 이것은 해당 디렉터리에 내에서 생성되는 파일이나 서브디렉터리의 디폴트 ACL이다.


1. ACL의 활성화

Linux 계열(Ext2/3, ReiserFS, JFS, XFS)에서 사용되는 대부분의 파일시스템은 ACL을 지원하고 있다. Linux의 경우, 당신이 사용하고 있는 파일 시스템의 종류에 해당하는 커널 구성 옵션이 설정되어 있는지 확인하면 된다.

CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y


FreeBSD의 경우에는 파일시스템을 acls 옵션으로 마운트하면 ACL을 사용할 수 있다.

# mount -o acls -u /usr
# mount

/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1e on /tmp (ufs, local, soft-updates)
/dev/ad0s1f on /usr (ufs, local, soft-updates, acls)
/dev/ad0s1d on /var (ufs, local, soft-updates)


-u옵션은 현재 마운트되어 있는 파일시스템의 마운트 옵션을 업데이트한다. 비활성화할 경우에는 noacls 옵션을 사용한다. 파일시스템 부팅시 자동으로 ACL을 활성화하려면, /etc/fstab 에서 해당 파일시스템 부분을 다음과 같이 수정한다.

/dev/ad0s1f /usr ufs rw,acls 2 2


2. ACL관리

ACL이 활성화되면, setfacl커맨드를 사용하여 ACL의 설정, 수정 및 삭제가 가능하다. ACL을 생성하거나 수정하기 위해서는 -m옵션을 사용한다. -x옵션과 함께 ACL이나 ACL리스트를 지정하면 ACL을 삭제할 수 있다.

다음과 같이 ACL은 일반적으로 user, group, other의 형태로 나뉜다.

# User ACL
u:[user]:
# Group ACL
g:[group]:
# Other ACL
o:


user와 group 에 ACL을 지정할 때 ACL명은 옵션이다. ACL명이 생략되면, ACL은 base ACL을 적용하는데, 이것은 파일의 mode bit에서 유래한 것이다. 따라서 base ACL을 변경하면, 마찬가지로 mode bit도 변경된다.

다음은 myfile이라는 파일을 생성하고, 그 파일의 base ACL을 수정하는 예이다.

$ touch myfile
$ ls -l myfile

-rw-rw-r-- 1 andrew andrew 0 Oct 13 15:57 myfile
$ setfacl -m u::---,g::---,o:--- myfile
$ ls -l myfile

---------- 1 andrew andrew 0 Oct 13 15:57 myfile


이 예에서는 컴마(,)를 사용하여 여러 ACL을 지정하고 있다.

다음 예는 유저나 그룹에 ACL을 지정하는 것을 나타낸다.

$ touch foo
$ setfacl -m u:jlope:rwx,g:wine:rwx,o:--- foo
$ getfacl foo

# file: foo
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx
group::---
group:wine:rwx
mask::rwx
other::---


마스크를 r--로 변경하면, jlope 과 wine 의 ACL은 실제 r-- 이 된다.

$ setfacl -m m:r-- foo
$ getfacl foo

# file: foo
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx #effective:r--
group::---
group:wine:rwx #effective:r--
mask::r--
other::---


위에서 언급했듯이, 디렉터리는 자신의 디렉터리내에서 생성되는 파일에 자동으로 적용되는 디폴트 ACL을 가질 수 있다. 디폴트 ACL을 지정하기 위해서는 d: 를 사용한다.

$ mkdir mydir
$ setfacl -m d:u:jlope:rwx mydir
$ getfacl mydir

# file: mydir
# owner: andrew
# group: andrew
user::rwx
group::---
other::---
default:user::rwx
default:user:jlope:rwx
default:group::---
default:mask::rwx
default:other::---

$ touch mydir/bar
$ getfacl mydir/bar

# file: mydir/bar
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx #effective:rw-
group::---
mask::rw-
other::---


getfacl 커맨드를 사용하여 ACL을 참조할 수 있다. 이 커맨드는 간단하여 옵션이 별로 없지만, -R옵션을 사용하면 ACL을 반복하여 실행하므로 유용하다(ls –R과 유사). 

 

UFS(Unix file system) 구조 

0      Disk Label
1~15   Bootblk
16~31  Super Block 
32     Backup Super Block         ---------------------------------------------
       Cylinder Group Block       First cylinder group
       Inode table
       Data Block                 ---------------------     ufs file system                      
       Backup Super Block         Second cylinder group
       Cylinder Group Block
       Inode table
       Data Block                 ----------------------------------------------


◆ Disk Label

- 하드 디스크 전체 정보를 담고 있는 영역으로 0번 sector에 저장된다.
- 디스크 레이블에 저장되는 데이터는 섹터의 크기, 트랙 하나당 섹터의 개수,
- 실린더 하나 당 트랙의 개수, 실린더 하나당 섹터의 개수, 전체 실린더의 개수,
- 슬라이스 테이블 등의 내용이 저장된다.
- 디스트 레이블은 VTOC 라고 불리기도 한다.

# prtvtoc /dev/dsk/c0d0s2

 

◆ Boot Block [1~15] (7.5kbyte)

- bootprogram저장
- 각각의 파일 시스템에 존재
- root file system은 오직 하나의 active boot block 소유


. 시스템이 부팅하는 대 사용되는 bootblk 프로그램이 저장되는 곳

 

◆ Superblock [16~31]

. 파일 시스템에 대한 중요한 정보가 저장되어 있다.

 

file system 에 대한 정보를 저장

-datablock의 수
-cylinder group의 수
-data block크기와 fragment의 수
-mount point 이름
-file system  상태 플래그
(clean,stable,active,logging,unknown)

 

◆ Cylinder groups

 

Definition

* disk 접근 속도 향상
* 최소 16개의 cylinder로 구성

구성요소

* Backup super block
* cylinder group block
-inode 의 수, cylinder group 에서 data block의 수, 디렉토리 수
-free block, free inode, free fragment, free block map
-사용중인 inode map

* Inode table
-data block에 대한 위치 정보

* Data block
-data의 실제 저장소
-8kbyte 단위

. 실제 파일이나 디렉토리의 저장하는 영역이다.

. 백업 수퍼블럭, 실린더 그룹 블록, i-node table, 데이터 블록이 모여 하나의 실린더 그룹을 이룬다.
. 파일 시스템이 크면 실런더 구룹도 커진다. 최소 16개의 실런더부터 최대 256개까지 가능하다.
. i-node의 크기는 항상 일정하지만 데이터 블록의 크기는 파일의 크기에 따라 다른다.

 

◆ Backup Superblock

*Definition
- super block의 backup
- 각 cylinder group당 하나씩 존재
- 첫번째 backup block는 32sector부터 시작

.실린더 그룹의 내용 중 가장 먼저 나오는 내용이다.

.백업 수퍼 블록은 수퍼 블록이 잘못 되었을 경우를 대비하여 수퍼블록과 동일한 내용을 가지는 영역이다
.항상 실린더 그룹의 처음에 위치하고 크기도 수퍼 블록과 동일하다.
.수퍼블록이 잘못 되었을 경우 fsck 명령어를 사용해 백업 수퍼 블록으로 정정할 수 있다.

 

◆ Inode

* i-node table

전체 파일 시스템에 존재하는 i-node중 현재 실린더 그룹에 할당된 i-node들의 시작 위치가 기록됨

.ls-l 명령어를 사용 했을 경우 파일 이름을 제외한 나머지 정보가 모두 기록되어있다.

.실제 데이터를 저장하는 데이터 블록의 위치가 어디에 있는지 저장된다.
.i-node table 정보는 file type, permission ,uid, gid, size, date, direct pointer, single
I.D.P , Double I.D.P, Triple I.D.P shadow i-node 정보가 들어가 있다.
.direct-pointer는 4byte로 1개의 data블록을 가르킨다. 12개의 data 블록, 즉 96kbyte를 저장한다.
.단일 간접 포인터가 지정하는 위치의 파일 시스템 블록에는 8kbyte는 4byte direct-pointer 2048
를 가진다. 즉 16MB까지 표현 가능하다
.이중 간접 포인터가 지정하는 위치의 파일 시스템 블록에는 단일 간접 포인터가 단일 간접 포인터에는
직접 포인터가 존재한다. 즉 2048 * 2048 * 8kbyte 의 내용을 추가할 수 있기에 32GB까지 표현 가능하다
.삼중 간접포인터가 지정하는 위치의 파일 시스템 블록에는 이중 간접 포인터가 이중 간접 포인터는
단일 간접 포인터를 단일 간접 포인터는 직접 포인터를 가르킨다. 즉 2048 * 2048 * 8Kbyte의
내용을 추가할 수 있기에 64TB까지 표현 가능하다.

 

◆ shadow inode

*definition
-setfacl에 의 해 설정된 permission
-ufs inode (일반) vs shadown inode

*file inodes

owner permission
group permission
other permission
shadow adress  -------------------------*shadown inode         
file data address-----↓                   ACL
                               ↓                    ↓
                               ↓                    ↓
                        *data black            *DATA BLACK
                             file data             ACL list
                                                     user100:rwx
                                                    group700;r-x

-shadow i-node

.기본 권한 이외에 ACL(access control list)이 추가로 설정된 파일이나 디렉토리는 i-node와 함께 shadow i-node를 가진다
.i-node 기본 권한과 함께 ACL이 저장된 데이터 블럭에 대한 직접 포인터도 함께 가진다
.setfacl명령어 사용해서 ACL 설정을 하게 되면 shadow i-node가 추가로 생성된다
shadow i-node에는 i-node가 가지는 권한 소유주 이름 그룹 소유주 이름에 관련된 정보가
저장되고 shadow i-node가 직접 포인터를 사용해 지저하는 데이터 블럭에 setfacl명령어로 설저한 ACL내용이 저장된다.

 

◆ Datablack

*definition
-실제 데이터가 저장되는곳
-8kbyte단위 

*fragmentation

   frament
      ↑
ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ ㅁ )->전체 data black(8192byte)

1024byte

- data black & data black fregment

.솔라리스에서 파일의 실제 데이터를 저장하기 위해 8kb의 데이터 블록을
파일 크기에 따라 할당한다

.touch를 이용해 파일을 생성할 경우에도 데이터 블록을 할당한다 touch뿐 아니라작은 데이터 파일에도 동일하게8kb의 데이터 블록을 할당할 경우 공간 낭비가도기 때문에
하나의데이터 블록을 8개 조각으로 나누어 블록 조각 하나하나를 파일마다 할당해서 사용할수 있다

.파일이 아무리 작아도 동일한 데이터 블록을 공유 할수 없다.

728x90

댓글