답변:
꼭두각시 파일 서버
이 가이드는 Puppet의 파일 제공 기능 사용에 대해 설명합니다.
퍼펫 마스터 서비스에는 정적 파일을 전송하기위한 파일 서버가 포함되어 있습니다. 파일 자원 선언에 소스 속성에 꼭두각시 : URI가 포함 된 경우 노드는 마스터의 파일 서버에서 해당 파일을 검색합니다.
# 원격 파일을 / etc / sudoers에 복사 파일 { "/ etc / sudoers": 모드 => 440, 소유자 => 루트, 그룹 => 루트, source => "puppet : /// modules / module_name / sudoers" }
모든 퍼펫 파일 서버 URI는 다음과 같이 구성됩니다.
puppet://{server hostname (optional)}/{mount point}/{remainder of path}
서버 호스트 이름이 생략 된 경우 (즉 puppet:///{mount point}/{path}
, 트리플 슬래시 참고) URI는 평가 노드가 마스터로 간주하는 서버로 확인합니다. 이렇게하면 매니페스트 코드가 이식성과 재사용 성이 향상되므로 가능할 때마다 호스트 이름을 생략해야합니다.
퍼펫의 나머지 부분 : URI는 파일이에 의해 제공되는지 module
또는를 통해 노출 되는지에 따라 두 가지 방법 중 하나로 서버의 파일 시스템에 맵핑됩니다 custom mount point
.
서빙 모듈 파일
대부분의 파일 서비스는 모듈을 통해 수행되어야하므로 Puppet 파일 서버는 기본적으로 사용 가능한 모듈이라는 특수한 반 마법 마운트 지점을 제공합니다. URI의 마운트 지점이 모듈 인 경우 Puppet은 다음을 수행합니다.
즉, test_module이라는 모듈이 중앙 서버의 /etc/puppet/modules
디렉토리에 설치되면 다음 꼭두각시 : URI ...
puppet:///modules/test_module/testfile.txt
... 다음과 같은 절대 경로로 해결됩니다.
/etc/puppet/modules/test_module/files/testfile.txt
test_module
에 설치된 경우 /usr/share/puppet/modules
동일한 URI가 대신 다음과 같이 해결됩니다.
/usr/share/puppet/modules/test_module/files/testfile.txt
모듈 마운트 포인트를 사용하기 위해 추가 구성이 필요하지는 않지만 [modules]
구성 블록 을 추가하여 파일 서버 구성에서 일부 액세스 제어를 지정할 수 있습니다 . 보안을 참조하십시오.
사용자 정의 마운트 지점에서 파일 제공
Puppet은 서버의 파일 서버 구성에 지정된 임의의 마운트 지점에서 파일을 제공 할 수도 있습니다 (아래 참조). 사용자 정의 마운트 지점에서 파일을 제공 할 때 Puppet은 모듈 마운트에 사용 된 추가 URI 추상화를 수행하지 않으며 마운트 이름 다음의 경로를 간단한 디렉토리 구조로 분석합니다.
파일 서버 구성
파일 서버 구성 데이터의 기본 위치는 /etc/puppet/fileserver.conf
; 이것은 --fsconfig
퍼펫 마스터에 플래그를 전달하여 변경할 수 있습니다 .
fileserver.conf
파일 형식은 형식과 거의 동일 rsync
하며 INI 파일과 거의 비슷합니다.
[mount_point]
path /path/to/files
allow *.domain.com
deny *.wireless.domain.com
주어진 마운트 지점에 대해 다음 옵션을 현재 지정할 수 있습니다.
path는 유일한 필수 옵션이지만 기본 보안 구성은 모든 액세스를 거부하는 것이므로 allow 지시문이없는 마운트 포인트는 어떤 노드에서도 사용할 수 없습니다.
경로는 일부 또는 모두 포함 할 수 있습니다 %h
, %H
그리고 %d
동적으로 각각 클라이언트의 호스트 이름, 정규화 된 도메인 이름과 도메인 이름으로 대체되는을. 모두 클라이언트의 SSL 인증서에서 가져옵니다 (호스트 이름 / 인증서 이름이 일치하지 않는 경우주의하십시오). 개인 ssh 호스트 키와 같이 각 클라이언트의 파일이 완전히 별도로 유지되는 모듈을 만드는 데 유용합니다. 예를 들어, 구성
[private]
path /data/private/%h
allow *
/private/file.txt
클라이언트 client1.example.com의 파일 요청은 파일 을 찾고 /data/private/client1/file.txt
, 동일한 요청 client2.example.com
은 파일 서버에서 /data/private/client2/file.txt 파일을 검색하려고합니다.
현재 경로는 슬래시를 포함 할 수 없거나 오류가 발생합니다. 또한 puppet.conf
슬래시가있는 디렉토리 위치를 지정하지 않도록 주의하십시오 .
보안
Puppet 파일 서버 보안은 마운트 지점마다 (다양한 수준의 특정) 액세스를 허용하고 거부하는 것으로 구성됩니다. 노드 그룹은 IP 주소, 이름 또는 단일 전역 와일드 카드 (*)로 세 가지 방법으로 권한을 부여하거나 거부 할 수 있습니다. 사용자 정의 탑재 지점은 기본적으로 모든 액세스를 거부합니다.
사용자 지정 마운트 지점 외에도 fileserver.conf
다음 modules
과 같이 관리 할 수있는 두 가지 특수 마운트 지점이 있습니다 plugins
. 이 마운트 지점 중 어느 것도 경로 옵션을 지정하지 않아야합니다. 모듈 마운트 지점의 동작은 위에서 사용자 정의 마운트 지점에서 파일 제공에 설명되어 있습니다. 플러그인 마운트는 실제 마운트 지점이 아니라 fileserver.conf가 Puppet Master에서 플러그인을 동기화 할 수있는 노드를 지정할 수 있도록하는 후크입니다. 이 두 마운트 지점은 기본적으로 존재하며 모든 액세스 지점은 기본적으로 모든 액세스를 허용합니다. 이러한 특수 마운트 중 하나에 대해 허용 또는 거부 지시문이 설정되면 해당 보안 설정은 일반 마운트의 보안 설정처럼 작동합니다 (즉, 기본적으로 모든 액세스를 거부합니다). 이것들은 deny *가 중복되지 않는 유일한 마운트 포인트입니다.
노드가 Puppet 파일 서버에 직접 연결되지 않은 경우 (예 : 리버스 프록시 및 Mongrel 사용) (Mongrel 사용 참조), 파일 서버는 모든 연결이 Puppet Agent 노드가 아닌 프록시 서버의 IP 주소에서 오는 것으로 간주합니다. . 이 경우 호스트 이름을 기준으로 액세스를 제한하는 것이 가장 좋습니다. 또한 리버스 프록시 (보통 127.0.0.0/8)로 작동하는 머신은 해당 마운트 지점에 액세스 할 수 있어야합니다.
우선 순위
보다 구체적인 거부 및 허용 문은 덜 구체적인 문보다 우선합니다. 즉, node.domain.com에 대한 allow 문은 * .domain.com에 대한 거부 문에도 불구하고 연결할 수 있습니다. 특정 수준의 특정 성에서 거부 문은 허용 문보다 우선합니다.
IP 주소 지시문과 호스트 이름 및 도메인 이름 지시문을 혼합하면 예기치 않은 동작이 발생할 수 있으므로 그렇게하지 마십시오. (현재 node.domain.com의 IP 주소가 192.168.1.80이고 fileserver.conf에 allow 192.168.1.80 및 deny node.domain.com이 포함 된 경우 IP 기반 allow 지시문이 실제로 우선합니다.이 동작은 다음에서 변경 될 수 있습니다. 미래에 의존해서는 안됩니다.)
호스트 이름
호스트 이름은 완전한 호스트 이름을 사용하거나 * 와일드 카드를 사용하여 전체 도메인을 지정하여 지정할 수 있습니다.
[export]
path /export
allow host.domain1.com
allow *.domain2.com
deny badhost.domain2.com
IP 주소
완전한 IP 주소 또는 와일드 카드 주소를 사용하여 호스트 이름과 유사하게 IP 주소를 지정할 수 있습니다. CIDR 스타일 표기법을 사용할 수도 있습니다.
[export]
path /export
allow 127.0.0.1
allow 192.168.0.*
allow 192.168.1.0/24
글로벌 허용
단일 와일드 카드를 지정하면 모든 노드가 마운트 지점에 액세스 할 수 있습니다.
[export]
path /export
allow *
사용자 지정 마운트 지점의 기본 동작은 deny *와 같습니다.