문제

내 스크립트 메모리에 저장하지 않고 루트 PW를 요청하고 일부 OS를 실행할 수 있습니까?* 명령은 루트로 명령합니까?

내 대본

  1. 작업을 수행 할 수 있는지 확인하기 위해 일부 폴더와 파일을 스캔합니다.
  2. /etc /...
  3. 스크립트를 운영 한 사용자가 소유 해야하는 폴더와 파일을 만듭니다.

(1) 정상적인 사용자로 수행 할 수 있습니다. 나는 (2) 스크립트를 sudo로함으로써 할 수 있지만 (3)의 폴더와 파일은 루트가 될 것이다.

문제는 많은 os.makedirs, os.symlink 등을 사용하여 일반 사용자가 실행할 수 없게 만드는 것입니다.

제안을 위해 탱크 2 모두

지금까지의 해결책은 다음과 같습니다.

# do all in sudo
os.chown(folder, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

감사합니다 Gnibbler 힌트를 위해.

도움이 되었습니까?

해결책 5

Gnibbler 힌트를 주었다 os.chown. 그런 다음 문제는 Sudo 뒤에있는 사용자의 신분증을 아는 것이 었습니다. 이 정보는 환경 변수에 저장됩니다 SUDO_*:

os.chown, (some_path, int(os.getenv('SUDO_UID')), int(os.getenv('SUDO_GID')))

3 파일로 코드를 분할하는 것은 솔루션이 될 수 있지만 코드는 이미 혼합되어 있으므로 적합하지 않습니다.

다른 팁

어쩌면 (2) 별도의 스크립트에 넣을 수 있습니다. script2.py, 그리고 메인 스크립트에서 당신은 호출합니다 sudo script2.py a popen ?

이런 식으로 만 (2)는 루트로 실행됩니다.

yourscript.py:

run_part_1()
subprocess.call(['sudo', sys.executable, 'part2.py'])
run_part_3()

part2.py:

run_part_2()

사용을 고려 하시겠습니까? 리눅스 팸? 당신은 그것을보고 싶을 것입니다 Linux-Pam 응용 프로그램 개발자 안내서 그리고 PAM 용 Python API

스크립트를 루트로 실행하고 os.chmod 및 os.chown을 사용하여 (3)에 대한 권한을 올바르게 변경해야합니다.

Sudo를 통해 루트 권한을 가진 다른 스크립트를 실행할 수는 있지만, Sudo로 전달하려면 스크립트에 사용자의 암호를 저장해야합니다. 이는 보안 관점에서 끔찍한 아이디어입니다.

따라서 문제는 일부 파일/폴더에서 올바른 권한을 얻는 것입니다. 먼저, 일반 사용자의 UID/사용자 이름을 전달하거나 하드 코드하십시오. 그런 다음 os.chown을 사용하여 소유자를 변경하고 OS.Chmod를 변경하여 권한을 변경하십시오. OS 패키지에는 대체 chown/chmod 메소드도 있습니다. http://docs.python.org/library/os.html

마지막 참고 사항 : Symlinks의 권한에 대해 걱정할 필요가 없습니다. 그들은 자신이 가리키는 것에 대한 권한을 가지고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top