2015년 12월 2일 수요일

Operating System : Files and Directories.


1. stat , fstat, and lstat function


  • 기본적인 파일에 관련된 정보를 얻을 수 있는 함수
  • stat 기본적인 파일 정보를 원하는 버퍼로 넘겨줘 보여줌 
  • fstat 파일디스크립터로 열린 파일만 , 원하는 버퍼로 넘겨줘 보여줌
  • lstat은 심볼릭링크에 대한 정보만을 버퍼로 넘겨줌, 심볼링링크에 연결된 파일을 보여주는 것이 아님.
2. File Type
file 자료형 구조

  • Regular File : 어떤 형태의 데이터를 갖고 있는 가장 흔한 타입, unix에 관련된 특이점이 없으며, 단지 text이거나 binary이다. 주의할만한 점은 kernel은 반드시 이 포맷을 이해된 상태여야함, 프로그램을 실행하기 위해 이 포맷(txt나 데이터를 커널에 인지해주는)을 사용해야하기 때문에….
  • Directory File : 파일들의 정보 pointer를 갖고있는 파일, 프로세스는 읽기만 가능하며, kernel만 쓰기 가능
  • Block special File : buffer를 사용하여 access하거나 일정한 크기의 디바이스를 access할 때 사용.
  • Character special File : 버퍼를 사용하지 않거나, 다양한 크기의 디바이스를 access할 때 사용
  • FIFO : process간의 통신을 가능하게 하는 파일, 잘 알려진 파이프라고 간주
  • Socket : 프로세스간의 통신을 가능하게 하는 파일, 싱글 host에서 프로세스들 간의 통신을 가능케함.
  • Symbolic link : 또 다른 파일을 가리키는 파일
3. Set-userID and Set-group ID 

프로세서는 6개이상의 ID정보를 가지고 있다. 

  • read UserId와 real group ID 로 누구인지를 식별한다. 로그인 세션동안에서 얻은 사용자 자체를 일컫는다. 
  • effective 와 supplementary gruoup ID 는 프로세스가 파일에 접근하기 위해 사용하는  접근자 ID 및 그룹 ID 을 관리한다.
  • save 계열은 프로세스가 실행될때, effective user Id와 group Id의 복사본을 저장한다.
  • 파일 구조에서 파일에 st_mode의 special flag을 조정할 수 있다.  그러면 파일이 실행할때 그 파일을 실행한 프로세스가 그 파일의 owner가 되거나 group owner가 될수 있다. 이러한 mode word를 set-user-Id, set-group-id라고 한다. 
  • 예를들어 슈퍼유저권한의 파일이라 하더라도, set-user-id 비트가 셋팅되어있고 실행되어있디면 해당 프로세스는 슈퍼유저권한으로 그 파일을 사용할 수 있다.
4. File Permission 

3번에서 말햇던 파일의 권한은 파일구조체 st_mode에서 관리한다. 밑에 그림에서 각 st_mode의 마스크와 기능을 알아보자.

  • 위의 그림에서 볼수 있듯이 st_mode에는 세가지의 권한에 대해 명시하고 있다. user, group, other이 각 3비트씩을 가지고 있으며, 그 3비트는 읽기, 쓰기, 실행으로 나뉘어져있다. 이러한 파일 st_mode의 마스크는 프로세스가 가지고 있는 ID와 비교하여 개인소유자인지, 그룹소유자인지를 판별한 후, 권한에 부여된 행동에 접근할 수 있도록 제공한다.
  • 총 4개의 순서로 실행되는데, 1. 슈퍼유저인지 확인 2. 소유자확인 3. 그룹소유자확인 4. 다른사람(other)인지 확인 총 4가지 순서로 실행된다. 순서 도중 해당 확인과정과 일치하면 그 일치된 과정을 실행하고, 나머지는 수행하지 않는다. 
  • 파일만 소유권을 보는것이 아니다. 디렉토리 또한 소유권을 확인하게 되는데, 실질적으로 파일을 실행할때, 앞에 절대 경로가 붙게된다. 이러한 절대경로는 디렉토리가 들어가게되는데 , 이러한 디렉토리의 권한이 만족되지 않는다면 접근이 불가하다.
5.  Ownership of New files and Directory
  • 새로운 파일이나 디렉토리의 주인은 바로 프로세스의 effective user Id 로 할당된다.
  • 파일의 group ID는 posix1. 에서 두가지를 제공한다.
    • 디렉토리의 그룹아이디를 할당받는다.
    • 프로세스의 effective group Id를 할당받는다.
6. Access and faceessat function 

  • 파일에 real user ID와 real group ID로 테스트 하고 싶을때 사용한다. 
  • 실질적으로 real ID로 권한이 없어, 접근이 불가하지만 set-user-Id, set-group-Id가 설정되면 파일에 접근이 가능하다. 
  • Access 는 실질적인 절대경로로 접근하며, faccessat함수는 file descriptor와 연결된 오픈된 디렉토리의 상대주소로 접근이 가능한 함수이다. 
7. umask 
  • 프로세서나 터미널에서 파일을 만들때, 파일의 권한에 대해 지정할수 있는데, umask 함수를 통해 지정할 수 있다. 
  • 실질적으로 권한을 할당하기 보다는 , 권한을 배제하는 형태로 작성되어있다. umask(0) 모든 권한을 부여한다는 것으로 의미된다.
8. chmod, fchmod, and fchmodat 함수
   파일의 권한을 바꿀수 있는 함수
  • chmod 일반적으로 특정 지정한 파일의 권하을 바꾸는 함수이다.
  • fchmod 함수는 오픈한 파일디스크립터 파일의 권한을 바꾸는 함수이다.
  • fchmodat함수는 오픈한 파일디스크립터의 상대경로나, 절대경로로 제공하는 경우 사용되는 파일권한 제어자 함수이다.
  • 파일을 권한 제어자 함수는 총 사용자 , 그룹, 다른사용자 권한을 제어할수 잇으며, 특별히 sticky bit와 set-user-id, set-group-id 비트를 제어할 수 있다.
  • 하지만 특별히 sticky bit 와 set-group-id 비트를 자동적으로 제하는 경우가 잇는데, sticky bit는 일반 사용자가 사용하면, 시스템 성능에 영향을 미치기 때문에 막는다. 더불어 set-group-id 또한 해당 폴더의 그룹아이디를 상속받는 경우로 인해 해당 그룹아이디와 프로세스의 effetive group id와 달라지는 경우로 인해, set-group-id 제어를 자동적으로 막아버린다. 
9.