fastcgi 서버(또는 네트워크 프록시 서버)를 감옥에 넣는 방법은 무엇입니까?

fastcgi 서버(또는 네트워크 프록시 서버)를 감옥에 넣는 방법은 무엇입니까?

웹 서버(예: nginx)가 있는 경우 일반적으로 fast-cgi 서버나 다른 애플리케이션 http 서버를 사용하여 동적 콘텐츠를 가져옵니다. 이는 두 경우 모두 웹 서버 프로세스와 fast-cgi(또는 애플리케이션 http 서버 프로세스 - 아래에서는 슬레이브 프로세스라고 함) 사이에 프로세스가 잘 분리되어 있음을 의미합니다.

웹 서버는 fast-cgi가 소켓이나 프록시를 통해 http 요청을 처리하도록 구성됩니다.

슬레이브 프로세스에 보안 문제가 있는 경우 슬레이브 서버와 웹 서버에 대해 서로 다른 사용자를 생성하면 파일 시스템 위치를 보호할 수 있습니다.

하지만 Linux에서 슬레이브 프로세스를 추가로 제한하는 방법은 무엇입니까?

(예를 들어 인터넷 접속이 불가능하거나 이메일을 보낼 수 없는 경우 등)

다음과 같은 경로를 생각해 볼 수 있습니다.

  • SELinux
  • Linux 시스템 네임스페이스("컨테이너",cgroup)

현재 배포판(예: Debian)에서 가장 편리한 방법은 무엇입니까? 실제 운영에서는 어떻게 해야 할까요? 구성 예시가 있나요?

답변1

우분투에서 투옥하는 또 다른 방법은 다음과 같습니다.아파모어!

경로 기반 필수 액세스 제어(MAC) Linux 보안 모듈(LSM)입니다. Ubuntu 10.04에서는 선택한 서비스에 대해 기본적으로 활성화되어 있습니다.

문서가 꽤 흩어져 있습니다. 우분투 문서가 더 좋을 수도 있습니다. ~ 일지라도업스트림 문서소개를 잘 안 했네요. 이것참고페이지 현황:

경고: 이 문서는 작성 초기 단계에 있으며 아직 참조 매뉴얼로 사용할 수 있는 형식이 아닙니다.

그러나 시작하는 것은 비교적 쉽습니다. AppAmor 프로필은 실행 가능한 경로와 일치합니다 /var/www/slave/slave(예: . 프로필 거부 규칙은 항상 허용 규칙보다 먼저 일치합니다. 빈 프로필은 모든 것을 무효화합니다.

다양한 바이너리에 대한 프로필은 에 저장됩니다 /etc/apparmor.d. apparmor_status활성화된 프로필, 강제 모드(양호) 또는 불평 모드(로그 메시지만 인쇄)에 있는 프로필을 표시합니다.

새 프로필을 만드는 방법은 /var/www/slave/slave다음과 같습니다.

aa-genprof /var/www/slave/slave

다른 터미널에서 시작하여 /var/www/slave/slave일반적인 사용 사례를 실행합니다. 완료되면 이전 터미널에서 및 키를 누르세요 s.f

이제 /etc/apparmor.d구성 파일이 포함되어 있습니다 var.www.slave.slave. 슬레이브가 일부 분기를 수행하면 프로필이 매우 희박해지며 자식의 모든 액세스가 무시됩니다.

그럼에도 불구하고 프로필은 이제 시행 모드에서 활성화되며 슬레이브 장치에서 작업을 반복적으로 트리거하고 tail -f /var/log/messages위반을 모니터링할 수 있습니다. 다른 터미널에서는 구성 파일을 편집하고 aa-enforce var.www.slave.slave각 변경 후에 실행합니다. 그러면 로그에 다음이 표시됩니다.

audit(1308348253.465:3586):  operation="profile_replace" pid=25186 name="/var/www/slave/slave"

위반 사항은 다음과 같습니다.

operation="open" pid=24583 parent=24061 profile="/var/www/slave/slave" 
  requested_mask="::r" denied_mask="::r" fsuid=10004 ouid=10000 name="/var/www/slave/config"

구성 파일 규칙은 다음과 같습니다.

/var/www/slave/config r,

향후 액세스가 허용됩니다.

그것은 모두 매우 간단합니다.

AppAmor는 다음과 같은 대략적인 네트워크 규칙을 지원합니다.

network inet stream,

이 규칙이 없으면 인터넷(localhost 포함)에 액세스할 수 없습니다. 이 규칙을 사용하더라도 iptables보다 세분화된 규칙(예: 슬레이브 uid 기반)을 사용할 수 있습니다.

또 다른 문서 조각에는 다음에 대한 정보가 포함되어 있습니다.하위 구성 파일PHP 스크립트의 경우.

var.www.slave.slave 구성 파일 골격은 다음과 같습니다.

#include <tunables/global>

/var/www/gapapp/gap.wt {

  #include <abstractions/base>

  network inet stream,

  /var/www/slave/config r,
  /var/www/slave/exehelper/foo ix,
  /var/www/slave/db/* rw,

  ...
}

이러한 구성 파일을 사용하면 슬레이브는 더 이상 mail또는 같은 유틸리티를 호출할 수 없습니다 sendmail.

답변2

감옥에 가두는 또 다른 방법이 있습니다. iptables소유자 일치 확장 프로그램을 사용하세요!

iptables를 사용하면 사용자에게 속한 모든 프로세스에 대해 나가는(OUTPUT) 네트워크 트래픽을 차단할 수 있습니다. 설정이 매우 쉽습니다. 즉, 매우 편리합니다.

이는 이 간단한 설정을 통해 파일 시스템 위치와 네트워크에서 슬레이브 프로세스를 감옥에 넣을 수 있음을 의미합니다.

$ iptables -N slave_chain
$ iptables -A slave_chain -m owner --uid-owner 10004 -p tcp --dport 1:1024 -j REJECT
$ iptables -A slave_chain -m owner --uid-owner 10004 -p tcp -d 127.0.0.1 -j ACCEPT
$ iptables -A slave_chain -m owner --uid-owner 10004 -j REJECT
$ iptables -A OUTPUT -j slave_chain

여기서 10004는 하위 사용자의 uid입니다. 슬레이브는 프록시 웹 서버 요청에만 응답하면 됩니다. 스팸을 보내기 위해 localhost 포트 25에서 MTA에 연결하려는 시도와 같은 다른 모든 것은 거부됩니다.

슬레이브는 mail또는 if available과 같은 명령을 통해 메일을 보낼 수 있습니다 sendmail. 이를 위해서는 fs 위치(예: chroot/cgroups)에 대한 추가 탈옥이 필요하거나 슬레이브 사용자가 메일을 보낼 수 없도록 MTA를 구성해야 합니다.

답변3

Cgroup은 투옥의 한 형태입니다. 2007년부터,cgroup하위 시스템에는 소위네트워크 네임스페이스.

현재 배송 선박Linux 컨테이너 사용자 공간 도구lxc-*, 명령줄 도구 모음( ) 및 샘플 구성 파일입니다. 또한 네트워크 네임스페이스 예제도 포함되어 있습니다.

안타깝게도 우분투 10.04(LTS)최근 커널 업데이트로 인해 네트워크 네임스페이스가 손상되었습니다..

전체적으로 lxc에 대한 문서는 그다지 길지 않으며 일부 샘플 구성 파일을 자세히 살펴보아야 합니다.

루트 없는 컨테이너를 설정하는 모범 사례가 무엇인지 명확하지 않습니다.

관련 정보