FreeBSD에서 Squid 서비스 UID를 변경하는 방법은 무엇입니까?

FreeBSD에서 Squid 서비스 UID를 변경하는 방법은 무엇입니까?

이상하게도 오징어는 다음과 같은 경우에는 시작되지 않는 것 같습니다.오징어사용자는 UID 100의 영향을 받지 않습니다. 다른 PID를 사용하려고 하면 다음 오류와 함께 서비스가 체계적으로 시작되지 않습니다.

2016/03/10 10:53:13| storeDirWriteCleanLogs: Starting...
2016/03/10 10:53:13|   Finished.  Wrote 0 entries.
2016/03/10 10:53:13|   Took 0.00 seconds (  0.00 entries/sec).
FATAL: Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (17) File exists

Squid Cache (Version 3.5.15): Terminated abnormally.
CPU Usage: 0.026 seconds = 0.026 user + 0.000 sys
Maximum Resident Size: 48640 KB
Page faults with physical i/o: 0

일반적으로 서비스 PID를 변경하는 방법은 다음과 같습니다.

  1. vi /etc/group서비스의 GID를 변경합니다.

    앞으로:

    squid:*:100:
    

    뒤쪽에:

    squid:*:1234:
    
  2. vipw서비스 UID 변경:

    앞으로:

    squid:*:100:100::0:0:squid caching-proxy pseudo user:/var/squid:/usr/sbin/nologin
    

    뒤쪽에:

    squid:*:1234:1234::0:0:squid caching-proxy pseudo user:/var/squid:/usr/sbin/nologin
    
  3. 파일 소유권을 복원하려면 다음 두 명령을 사용하십시오.

    find / -uid 100 -exec chown -v squid {} +
    find / -gid 100 -exec chgrp -v squid {} +
    

ezjail이 관리하는 FreeBSD 감옥에 Squid를 설치하고 있습니다.

ipcs -aIPC에 대해 생각해 보았지만 Squid가 제대로 실행될 때 사용하는 것을 찾지 못했습니다 .

나는 또한 새로운 깨끗한 감옥에서 처음으로오징어사용자 정의 UID를 사용하는 경우 squid 패키지를 설치하여 처음부터 올바른 UID가 사용되는지 확인하십시오.오징어PID 100을 가진 사용자는 항상 존재하지만 동일한 문제가 발생합니다. (또한 이 문제는 소유권 문제에서 발생할 수 없다는 결론을 내렸습니다.) UID를 100으로 설정하면 Squid가 시작됩니다.

여러 PID(101과 같은 낮은 PID 포함)를 시도했는데 모두 동일한 동작을 보여줍니다.

나는 또한 squid_user매개 변수를 사용해 보았지만 rc.conf운이 없었습니다.오징어또는뿌리아무것도 바뀌지 않는 것 같습니다.

동일한 시스템에 Squid가 PID 100으로 실행되는 또 다른 감옥이 있지만 그것을 꺼도 문제는 전혀 바뀌지 않았습니다(모든 경우에 두 감옥 사이의 간섭에 매우 놀랐습니다).

답변1

알았어, 이제 이해됐어. 여러번의 검사를 거쳐FreeBSD 포럼에서, 이제 FreeBSD Jail이 SHM 개체에 관한 한 스위스 치즈와 비슷하게 동작한다는 것을 확인할 수 있습니다. 실제로 FreeBSD는 SHM 개체에 대한 격리를 전혀 제공하지 않습니다. 모든 감옥은 시스템 전체의 모든 SHM 개체에 액세스할 수 있으며 이를 방지할 방법이 없습니다.

따라서 이 질문에 언급된 오류는 매우 논리적입니다.

  • 다른 UID를 사용할 때 Squid는 다른 사용자가 소유한 SHM 개체에 액세스하려고 시도하기 때문에 시작하지 못하므로 오류 메시지가 나타납니다."shm_open(/squid-cf__metadata.shm) 생성 실패: (17)존재하는 파일입니다",
  • 두 설치 모두에서 동일한 UID를 사용하면 Squid가 성공적으로 시작되지만, 두 인스턴스가 이제 동일한 메모리 개체와 경쟁하여 서로의 데이터를 덮어쓰고 종료 시 개체를 삭제하므로 상황은 더 악화될 수 있습니다.... .

따라서 각 Squid 인스턴스가 서로 다른 SHM 개체 이름을 사용하도록 특별한 조치를 취해야 합니다.

기본적으로 Squid는 FreeBSD 시스템에서 다음 SHM 객체를 생성합니다(정확한 동작은 운영 체제에 따라 다름):

/squid-cf__metadata.shm
/squid-cf__queues.shm
/squid-cf__readers.shm

squid-n인스턴스에 특정 이름을 지정할 수 있는 매개변수를 제공합니다 . 특히 이 이름은 위의 SHM 개체 이름에서 "squid"를 대체하므로 SHM 개체 이름은 시스템 전체에서 고유하게 됩니다.

따라서 새 감옥에 새 Squid 인스턴스를 설정할 때 다음 항목을 편집하고 추가해야 합니다 /etc/rc.conf("something_unique"를 호스트의 고유한 인스턴스 이름으로 교체).

squid_flags="-n something_unique"

이를 통해 각각 다른 UID를 가진 두 개의 Squid 서버를 올바르게 시작할 수 있습니다.

분명히 범위를 벗어나더라도 Squid의 SHM 개체가 모든 감옥에서 자유롭게 액세스할 수 있다는 사실은 그 자체로 보안 문제를 구성하며 무시할 수 없습니다...

관련 정보