두 프로그램을 setuid를, /usr/bin/bar
그리고 /usr/bin/baz
하나의 구성 파일을 공유 foo
. 구성 파일의 모드는 0640
민감한 정보를 보유하기 때문에입니다. 하나의 프로그램은 다음과 같이 실행됩니다 bar:bar
(즉, 사용자 막대, 그룹 막대 ). 다른 baz:baz
. 사용자 변경은 옵션이 아니며 그룹 변경도 바람직하지 않습니다.
단일 구성 파일을 /etc/bar/foo
and 로 하드 링크하고 싶습니다 /etc/baz/foo
. 그러나 내가 아는 한 파일이 root:bar
또는에 속해야하기 때문에 이것은 실패합니다 root:baz
.
잠재적 해결책 : barbaz
회원이 bar
및 인 새 그룹을 만듭니다 baz
. 에 foo
속 합시다 root:barbaz
.
그것은 나에게 꽤 무거운 솔루션처럼 보입니다. foo
두 프로그램간에 구성 파일을 공유하는 더 깔끔하고 간단한 방법이 없습니까?
지금은 동일한 사본 두 개를 유지하고 있습니다. 이것은 작동하지만 분명히 잘못되었습니다. 무엇이 옳을까요?
정보 : 유닉스 그룹에 대한 경험이 거의 없으며 setgid (2)에 대해서는 경험이 없습니다.
답변
ACL을 사용하여 두 그룹의 사람들이 파일을 읽을 수 있습니다.
chgrp bar file
chmod 640 file
setfacl -m g:baz:r-- file
이제 bar
와 baz
그룹 모두 파일을 읽을 수 있습니다.
예를 들어, 다음은 bin : bin이 640 모드로 소유 한 파일입니다.
$ ls -l foo
-rw-r-----+ 1 bin bin 5 Aug 17 12:19 foo
+
수단 그래서 그것을 살펴 보자, ACL에 세트가있다.
$ getfacl foo
# file: foo
# owner: bin
# group: bin
user::rw-
group::r--
group:sweh:r--
mask::r--
other::---
우리는 행을 볼 수 있습니다 group:sweh:r--
. 즉, 그룹의 사람들 sweh
이 읽을 수 있음을 의미 합니다.
이봐, 나야!
$ id
uid=500(sweh) gid=500(sweh) groups=500(sweh)
그리고 네, 파일을 읽을 수 있습니다.
$ cat foo
data
답변
이 진술을 다시 고려할 수 있습니다.
잠재적 해결책 : 멤버가
bar
및 인 새 그룹 바바 즈를 만듭니다baz
. 에foo
속 합시다root:barbaz
.그것은 나에게 꽤 무거운 솔루션처럼 보입니다.
foo
두 프로그램간에 구성 파일을 공유하는 더 깔끔하고 간단한 방법이 없습니까?
새로운 그룹을 만드는 것이 왜 무겁습니까? 그렇게하면 ACL에 비해 다음과 같은 장점이 있습니다.
- 이것을 명령
/usr/bin/bar
과 가설로 가정했다고 말했지만/usr/bin/baz
,이 두 프로그램이 구성 파일을 공유 할 수 있다는 것은 관련이 있습니다. 이것은 프로그램이 자연스럽게 관련되어 있음을 나타냅니다. 이들을 위해 새 그룹을 작성하면 실제로 존재하는 관계를 설명하는 것처럼 보이고 (공통 구성 파일을 읽을 수있는 권한과 같은) 동작을 트리거해야합니다. - 그룹을 통해이 문제를 해결하는 것은 모든 Unix에 이식 가능하므로 모든 Unix 또는 Unix 계열 시스템에서 동일한 방식으로 정확하게 동일한 방식으로 작동 할 수 있습니다. ACL은 훨씬 더 복잡하며 이식성이 문제가 될 수 있습니다.
개인적으로 저는 여기서 ACL을 강력한 솔루션으로보고 그룹을 더 단순하고 전통적인 유닉스 방식으로 그룹화합니다.
답변
이것이 ACL (Access Control Lists)의 일반적인 용도라고 생각합니다. 두 사용자 (또는 그룹)를 구성 파일의 ACL에 추가하십시오.
/etc/foo root:root rw------- # Traditional Unix ownership and permission for foo
$ setfacl -m user : bar : rw- / etc / foo # 사용자 바가 foo를 읽고 쓸 수 있도록합니다. $ setfacl -m user : baz : rw- / etc / foo # 사용자 baz도 foo를 읽고 쓸 수 있습니다
acl-package를 먼저 설치해야 할 수도 있습니다.
답변
파일 모드 0660
(또는 0440
쓰기가 필요하지 않은 경우 에도 ) 및 소유권을 확인하십시오 bar:baz
. 그런 다음 한 가지 프로세스는 사용자 권한으로 인해 파일에 액세스 할 수 있고 다른 프로세스는 그룹 권한으로 인해 파일에 액세스 할 수 있습니다. ACL이없는 파일 시스템에서도 작동합니다.
답변
아직 언급되지 않았으므로 제출하겠습니다. 이것은 아마도 당신이 원하는 것이 아니지만 비슷한 질문을 가진 다른 사람들에게 답이 될 수 있습니다.
“새로운” “클라우드”방식은 모든 구성이 구성 관리 시스템 (예 : chef , puppet 또는 ansible )에 의해 처리되도록하는 것 입니다. 서버에 두 개의 서로 다르지만 동일한 파일이 있는지는 중요하지 않습니다. 둘 다 구성 관리 시스템의 단일 파일 사본이기 때문입니다.
이렇게하는 것의 주요 장점은 구성이 버전 이 다른 모든 과 함께 버전 지정 되어 있고 동일하거나 거의 동일한 새 서버를 배포하기가 쉬워 자동화 할 수 없다는 것입니다.
(기록을 위해 구성 관리를 사용하지 않기 때문에 @drg의 답변과 같이 그룹 시스템을 사용합니다).