2016-09-18 4 views
2

저는 파이썬 스크립트를 작성했습니다. 함수 중 하나가 수신 대기 할 포트를 엽니 다. 수신 대기 할 포트를 열려면 수퍼 유저로해야합니다. sudo 또는 루트 권한 등으로 스크립트를 실행하고 싶지 않습니다. sudo을 사용하는 하위 프로세스와 관련된 여기에 대한 답변을 보았습니다. 내가 아는 한 원하는 하위 프로세스가 아닙니다. 응용 프로그램 내의 함수 일뿐입니다.스크립트에서 슈퍼 유저 권한을 프로그래밍 방식으로 구현하는 방법은 무엇입니까?

질문 : 슈퍼 유저 권한으로 프로그래밍 방식으로 포트를 열려면 어떻게해야합니까?

+0

이 문제와 관련하여 작성한 코드를 공유 할 수 있습니까? – nbryans

+0

[authbind] (https://manned.org/authbind.1)와 같은 도구를 사용할 수 없으므로 특정 권한을 파이썬 프로세스에 부여하면됩니다 ...? –

+0

대신 기능을 살펴보십시오 : https://linux.die.net/man/7/capabilities. 스크립트에 CAP_NET_BIND_SERVICE와 같은 기능을 설정하면 루트 액세스 없이도 모든 포트에 바인드 할 수 있어야합니다. – kfx

답변

0

당신은 그렇게 할 수 없습니다. 그럴 수 있다면 악성 코드는 언제든지 루트 권한으로 모든 시스템에 자유롭게 액세스 할 수 있습니다!

슈퍼 유저 권한을 원한다면 루트 계정에서 스크립트를 실행하거나 sudo를 사용하여 비밀번호를 입력해야합니다. 이것은 사용자 계정이있는 전체 지점입니다.

편집

그것은 당신이 배쉬는 파이썬 스크립트 내에서 명령을 실행할 수 있다는 것을 주목할 필요가있다 - 서브 프로세스 모듈을 사용하여 예를 들어.

import subprocess 
subprocess.run(['sudo', 'blah']) 

이것은 기본적으로 지정된 명령을 실행하는 새로운 bash 프로세스를 만듭니다.

이렇게하면 사용자는 예상했던 것과 같은 방법으로 암호를 입력하라는 메시지가 표시되며 권한은 호출하는 스크립트가 아니라 작성중인 하위 프로세스에만 적용됩니다 (원래의 질문 일 수도 있음).

0

이렇게 python 스크립트에서 sudo를 사용할 수 있으므로 sudo 또는 루트 권한으로 스크립트를 실행할 필요가 없습니다.

import subprocess 
subprocess.call(["sudo", "cat", "/etc/shadow"]) 
+1

확실하지만 이는 동일한 문제에 대한 해결 방법입니다. 사용자는 여전히 자신의 암호를 입력해야합니다 ... –

+1

orginial 질문은 비밀 번호를 입력하지 않는 것에 대해 아무 말도하지 않습니다. 분명히 당신은 상관없이 그렇게해야 할 것입니다. – vesche

+0

암호를 입력하지 않고 su 권한을 얻으시겠습니까? 아니오 – Jeon

관련 문제