문제

실행 중에 내 스크립트에 대한 관리자 특수성을 확인하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

UNIX에서는 루트를 사용하고 있는지 확인할 수 있습니다. os.getuid 기능:

os.getuid() == 0 and "root" or "not root"

다른 팁

미세한 곡물 특권 통제의 날에 "관리자-특징"이라는 개념은 정의하기가 어려워지고 있습니다. "전통적인"액세스 제어 모델로 UNIX에서 실행중인 경우 효과적인 사용자 ID (OS 모듈에서 사용 가능)를 얻고 루트 (0)에 대해 확인하는 것이 원하는 것일 수 있습니다. 시스템에서 파일에 액세스하려면 스크립트가 원하는 권한이 필요하다는 것을 알고 있다면 os.access ()를 사용하여 충분히 특권이 있는지 확인할 수 있습니다.

불행히도 쉽게 제공 할 수있는 휴대용 방법은 없습니다. 사용 된 보안 모델, 쿼리 및 설정 권한을 설정하고 API에 액세스하는 데 사용할 수있는 적절한 Python 모듈을 찾거나 구현하려고 시도한 API가 제공되는 시스템을 찾거나 정의해야합니다.

고전적인 질문, 왜 알아야합니까? 스크립트가해야 할 일을하려고 시도하고 "그냥"실패를 올바르게 처리하고 처리한다면 어떨까요?

관리 권한이 필요한 특정 파일에 액세스 할 수 있는지 확인하려는 경우 확인하는 좋은 방법은 다음과 같습니다.

import os
print os.access("/path/to/file", os.W_OK) 
#replace W_OK with R_OK to test for read permissions

반면에 사용자가 관리 계정인지 실제로 알아야 할 경우 Windows 2000 이상 에서이 코드를 사용할 수도 있습니다.

import ctypes
print ctypes.windll.shell32.IsUserAnAdmin()

따라서 사용자가 관리자인지 확인하는 더 나은 크로스 플랫폼 방법은 다음과 같습니다.

import ctypes, os
try:
 is_admin = os.getuid() == 0
except:
 is_admin = ctypes.windll.shell32.IsUserAnAdmin()

print is_admin

물론이 방법은 사용자가 뿌리 UNIX에서 또는 Windows의 관리자 그룹의 구성원입니다. 그러나 이것은 내 생각에 대부분의 목적에 충분합니다.

또한 2000 미만의 Windows 버전과 Windows ME에서는 실패 할 것입니다. 이는 DOS 기반 Windows 버전이며 권한이라는 개념이 없기 때문입니다.

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