다음 작품을 발표 할 때 시작하는 데 실패FreeBSD의 감옥은 파이썬 스레드에서
이root 15231 0.0 0.0 8296 2056 1 I+ 4:52PM 0:00.01 /bin/sh /usr/local/etc/rc.d/ezjail.sh start content
root 15240 0.0 0.0 8296 2120 1 I+ 4:52PM 0:00.06 sh /etc/rc.d/jail onestart content
root 15407 0.0 0.0 8296 2016 1 I+J 4:52PM 0:00.01 /bin/sh /etc/rc
root 15467 0.0 0.0 8296 2060 1 I+J 4:52PM 0:00.00 /bin/sh /etc/rc
root 15474 0.0 0.0 6920 1224 1 I+J 4:52PM 0:00.00 /usr/sbin/syslogd -ss
감옥이 시작되지만 무료로 /etc/rc
보인다 잘하지만 제대로 시작되지 않습니다 syslogd를 시작한 후 ze하십시오.
어떻게 든 스레드에서 실행하면 jail rc가 실패합니다. jexec이 제대로 작동하려면 일부 환경 설정이 누락 된 것 같습니다 (어쩌면 pty?).
jexec
또는 ezjail-admin console
과 함께 콘솔을 연결하려고해도 실패합니다 (실제 감옥 사본이 별도로 실행됩니다). 감옥의 /var/log
에는 내용이 없으며 (syslogd를 시작할 때 빈 로그 파일이 생성되는 것을 제외하고) 호스트 로그 파일도 마찬가지입니다.
아무도 왜 스레드가 아닌 응용 프로그램에서 작업 명령을 실행하는지 알 수 있습니까?하지만 스레드에서 실행되자 마자 뭔가 잘못되었습니다.
TLDR : 파이썬 스레드에서 감옥을 시작하려고하면 syslogd가 시작된 후 rc가 중단됩니다. 동일한 명령이 스레드되지 않은 응용 프로그램에서 감옥을 성공적으로 시작합니다.
편집 : 포크가 작동합니다 ... 스레드와 관련이 있습니다.
ezjail-admin start
의 경우 다음은 작동하지 않습니다. ezjail-admin create
은 완벽하게 작동합니다.
class TestThread(threading.Thread):
def run(self):
command = 'ezjail-admin create -f content content 10.0.254.33'
os.system(command)
command = 'ezjail-admin start content'
os.system(command)
tt = TestThread()
tt.start()
실제 코드는 초기 포크를 사용 https://github.com/masom/Puck/tree/master/client 현재 구현에서 볼 수 있지만, 스레드가 훨씬 깨끗하다.
초기 포크는 내가 끝내 었습니다. 추악한 해킹하지만 작동합니다. 이것은 여전히 나를 괴롭힌다. –