저는 Python으로 프로그램을 작성 중이고 /etc의 일부 파일을 편집해야 합니다. 일부 시스템에는 자체 시스템이 있습니다. 프로그램은 비대화형이므로 sudo를 실행하지 않고 프로그램 자체에서 이러한 권한을 어떻게 얻을 수 있습니까?
프로그램을 어디에서 자동 시작할지는 아직 확실하지 않지만 아마도 이 목적을 위해 monit 또는 유사한 도구를 사용할 것입니다.
답변1
해결책은 프로그램 자체를 루트로 실행하여 /etc의 파일에 대한 권한을 갖는 것입니다.
답변2
물론 두 가지 가능성이 있습니다.
- 사용자가 액세스할 수 있는 수준으로 파일 권한을 줄입니다.
- 애플리케이션이 소유한 권한 추가 및 수정
1)에 관해서는 ACL을 통해 추가 권한을 추가해 볼 수 있습니다(UNIX 권한 변경을 강력히 권장하지 않습니다. 많은 프로그램에는 기대치가 있으며 다음 업데이트 등에서 변경될 예정입니다).
setfacl -m "u:auto_user:rw" /etc/passwd
(이 파일 시스템에서 확장 ACL을 활성화해야 합니다)
이 접근 방식을 사용하면 다른 프로그램에서 해당 액세스 권한을 사용할 위험이 있습니다. 예: /etc/passwd 수정을 허용하기 위해 apache 사용자를 추가하면 apache 사용자에 대한 제어권을 얻은 사람은 이제 이 파일을 변조할 수 있습니다. 사용자 계정은 일반적으로 루트 수준 액세스보다 덜 강화됩니다.
정보 2) 이 파일에 액세스할 수 있는 권한을 높였습니다. sudo 및 NOPASSWD 변수를 사용하여 이를 수행할 수 있지만 올바른 액세스 권한을 설정하려면 주의해야 합니다. 비슷한 것
auto_user = NOPASSWD: /bin/sed ... /etc/passwd
안전하지 않습니다(sed가 쉘을 생성할 수 있음)! 가장 좋은 해결책은 a) 입력을 필터링하고 b) 원하는 것을 정확하게 수행하는 특수 프로그램을 작성하는 것입니다.
답변3
모든 프로그램(예: 대화형이든 vi
비대화형이든 sed
)에는 시스템이 액세스할 수 있는 파일과 수행할 수 있는 작업(읽기, 쓰기 및 / 또는 실행). (EUID가 파일 소유자와 다른 경우 동일한 목적으로 사용되는 그룹 ID 세트도 있습니다. EUID와 GID가 일치하지 않으면 "기타" 권한 비트에 의해 액세스가 제어됩니다.)
프로그램이 (EUID 0)로 실행되면 root
가능한 모든 것에 액세스할 수 있지만 여전히 읽기 전용으로 설정할 수 있습니다. (물론 root
이런 것에 대한 권한은 변경될 수 있으므로 읽기 전용은 권고사항일 뿐입니다 root
.)
일부 사용자나 프로그램에만 액세스를 허용하는 일반적인 방법은 파일 소유자를 이 목적을 위해 생성된 특수 사용자로 변경하는 것입니다. 예를 들어, 적절한 구성 파일을 편집할 수 있는 웹 관리자 또는 데이터베이스 관리자 사용자를 만드는 경우가 많습니다.
귀하의 경우에는 특수 사용자를 생성하고 액세스할 수 있는 파일의 소유자를 변경한 /etc
다음 를 사용할 수 있습니다 su
.
또 다른 접근 방식은 편집 가능한 파일을 다른 위치로 이동하고 /etc
.
어떤 방법을 사용하든 파일에 액세스할 수 있는 사용자/UID/GID가 기능에 관계없이 신뢰할 수 있는지 확인해야 합니다. 예를 들어, 루트가 아닌 사용자는 쉽게 루트 권한을 얻을 수 있기 때문에 비밀번호 파일을 편집할 수 없도록 하고 싶습니다.