2013-11-21 4 views
0

파일에서 구성을 읽는 서버 구성 요소가 있습니다. 구성 파일은 관리 구성 요소에 의해 읽고 쓰여집니다. 구성 요소는 별도의 프로그램으로 별도의 계정으로 실행됩니다. I가 구성 파일에 ACL을 변경하려면 :C API를 사용하여 파일 사용 권한 수정

application: read 
administration: read and write 

그것의 응용 프로그램이 수신 대기 소켓을 열기 때문에 응용 프로그램에서 기록을 삭제하는 것이 중요합니다. 즉, 위험이 높으며 최대한 많이 억제하고 싶습니다.

검색 후 C에서이 작업을 수행하는 데 ioctl이 사용 된 것 같습니다. ioctl_list은 제어 코드 목록을 제공하지만 구성 파일에 다른 사용 권한을 가진 두 명의 사용자를 추가하는 방법은 분명하지 않습니다. die.net 온라인 매뉴얼 페이지는 사용 권한에 대해 자세히 설명하지 않거나 샘플 코드를 제공하지 않습니다. 예를 들어 "perm"이라는 단어 ("permission"의 루트)는 토론에서 한 번 나타납니다.

Windows에서 최소 권한을 부여하는 권한 축소는 있지만 매우 간단합니다 (Richter는 그의 Advanced Windows 프로그래밍 시리즈에서 좋은 예를 보여줍니다).

C API를 사용하여 Linux 파일에 대한 사용 권한을 변경하는 방법은 무엇입니까? 어떤 제어 코드가 사용될 것입니까?

미리 감사드립니다.

+0

'man 2 chmod' BTW : 청취 소켓의 문제점을 이해할 수 없습니다. BTW2 : 이것은 초등 유닉스 물건이며 고급 버전이 아닙니다. 어쩌면 먼저 독서를해야 할 것입니다. – wildplasser

+0

ACL은 linux에 설정된 acl API를 사용합니다. p. 330 - 'The Linux Programming Interface'M Kerrisk. 이 페이지에는 설명에 하이퍼 링크로 연결된 API 호출 코드가 있습니다. [Linux ACL] (http://man7.org/tlpi/code/online/dist/acl/acl_update.c.html) –

+0

감사합니다. 와일드 카드입니다. 네가 이해하지 못하는 것을 모르겠다. 미안하다.그런데'chmod'는 고급 속성에 대한 사용자/그룹이 아닌 경로와 모드 만 사용합니다 (예, chattr을 보았습니다). – jww

답변

2

ioctl으로 수행되지 않고 전용 시스템 호출 : chmod, chown 및 파일 권한의 기본 사용자/그룹/기타 세트 chgrpacl_* 본격적인 ACL을 위해. 또한 실행중인 응용 프로그램에서 권한을 삭제하는 방법 인 setuid, setgidsetgroups 시스템 호출에 대해 알고 싶을 것입니다.

기본 사용자/그룹/기타 권한 만 사용하여 목표를 달성 할 수 있습니다. 다음과 같이 시스템을 구성하십시오.

  • 서버 응용 프로그램에는 전용 사용자 ID 및 그룹이 있습니다. 둘 다 nlserver ("noloader"의 경우 "nl")이라고 가정 해 보겠습니다.
  • 관리 구성 요소에도 전용 사용자 ID와 그룹이 있습니다 (예 : nladmin).
  • 구성 파일은 모드 0640 (별칭 -rw-r-----)으로 설정되고 사용자 nladmin, 그룹 nlserver이 소유합니다. 이 작업을 담당하는 코드는 서버 자체가 아닌 관리 구성 요소에 있어야합니다. 서버가 시작될 때 root (예 : 낮은 번호의 포트 바인드)으로해야하는 모든 작업을 수행 한 후에 setgroups을 사용합니다 , setgidsetuid (그 순서대로!) 사용자 nlserver, 그룹 nlserver으로 변경하고 보조 그룹 목록을 지우십시오. 그렇게 한 후에 만 ​​구성 파일이 열립니다.
+0

Zack에게 감사드립니다. 나는 그룹과 사용자가 섞여서 매치되는 이유를 결코 깨닫지 못했습니다. 나는'acl_ *'API를 모두 피할 수 있다고 생각한다. 그래서 나는 분명하다. 셋째 사용자/그룹이 특별한 접근을 필요로한다면'acl_ *'을 사용할 필요가있을 것이다. 맞습니까? – jww

+0

파일을 읽을 * 필요가있는 다른 프로세스가 있다면'nlserver' 그룹에 추가 할 수 있습니다 (프로세스는 한번에 많은 그룹에있을 수 있습니다, 이것은'setgroups'와'getgroups'의 요점입니다). 그러나 다른 것이 파일을 써야 할 필요가 있고'nladmin' 또는'root' 사용자로 실행하는 것은 부적절합니다. 그렇다면 ACL이 필요합니다. – zwol

+0

완벽한, 감사합니다. – jww