비대화형 프로그램이 /etc의 파일을 편집할 수 있는 권한을 얻는 방법

비대화형 프로그램이 /etc의 파일을 편집할 수 있는 권한을 얻는 방법

저는 Python으로 프로그램을 작성 중이고 /etc의 일부 파일을 편집해야 합니다. 일부 시스템에는 자체 시스템이 있습니다. 프로그램은 비대화형이므로 sudo를 실행하지 않고 프로그램 자체에서 이러한 권한을 어떻게 얻을 수 있습니까?

프로그램을 어디에서 자동 시작할지는 아직 확실하지 않지만 아마도 이 목적을 위해 monit 또는 유사한 도구를 사용할 것입니다.

답변1

해결책은 프로그램 자체를 루트로 실행하여 /etc의 파일에 대한 권한을 갖는 것입니다.

답변2

물론 두 가지 가능성이 있습니다.

  1. 사용자가 액세스할 수 있는 수준으로 파일 권한을 줄입니다.
  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가 기능에 관계없이 신뢰할 수 있는지 확인해야 합니다. 예를 들어, 루트가 아닌 사용자는 쉽게 루트 권한을 얻을 수 있기 때문에 비밀번호 파일을 편집할 수 없도록 하고 싶습니다.

관련 정보