Python 3을 실행하고 싶습니다.http 서버존재하다포트 80,아니요추가 소프트웨어(예: authbind)를 설치하지 않고 루트로 실행합니다. 저는 아치 리눅스를 사용하고 있습니다. 가능하다면 systemd를 사용하여 이 작업을 수행하고 부팅 시 자동으로 시작되도록 하는 것을 선호합니다.
저는 다음과 같은 간단한 래퍼를 만들었습니다.
#!/bin/sh
cd /srv/http/mywebsite/
python -m http.server 80
다음 유닛 파일을 사용하여 실행할 수 있습니다.
[Unit]
Description=Python 3 http.server
[Service]
Type=simple
ExecStart=/usr/local/bin/website_start.sh
[Install]
WantedBy=multi-user.target
이것은 "작동"하지만 안전하지는 않습니다. 사용자와 그룹을 추가하면 "권한 거부" 오류가 발생합니다(포트 80에는 루트 권한이 필요하기 때문인 것 같습니다).
[Unit]
Description=Python 3 http.server
[Service]
Type=simple
ExecStart=/usr/local/bin/website_start.sh
User=http
Group=http
[Install]
WantedBy=multi-user.target
오류는 다음과 같습니다
Jun 23 00:58:57 myvps systemd[43060]: http_python_server.service: Failed to execute command: Permission denied
Jun 23 00:58:57 myvps systemd[43060]: http_python_server.service: Failed at step EXEC spawning /usr/local/bin/website_start.sh: Permission denied
error: connect_to website port 80: failed.
답변1
서비스 프로세스에 포트 <1024를 사용하는 기능을 부여할 수 있지만 다른 루트 권한은 부여할 수 없습니다.
[Unit]
Description=Python 3 http.server
[Service]
Type=simple
ExecStart=/usr/local/bin/website_start.sh
User=http
Group=http
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
man 7 capabilities
더 알고 싶다면 읽어보세요.
이 /sbin/getpcaps
명령은 PID별로 프로세스에 사용 가능한 기능을 쿼리하는 데 사용할 수 있습니다. 일반적으로 루트 소유 프로세스에는 많은 기능 목록이 있지만 루트가 아닌 프로세스에는 전혀 기능이 없습니다.