fdopen을 사용하여 Python 프로세스에서 생성된 파일에 대한 권한을 최소화하는 방법

王林
풀어 주다: 2023-04-28 22:22:05
앞으로
1124명이 탐색했습니다.

요구사항 배경

파이썬을 사용하여 파일을 생성하고 읽고 쓸 때 생성된 파일의 권한 구성에 거의 주의를 기울이지 않습니다. 보안이 높은 일부 시스템의 경우, 우리가 생성한 파일 권한이 다른 사용자 또는 동일한 사용자 그룹에 속한 다른 사용자에 대한 읽기 권한을 가지고 있다면 불필요한 정보 유출의 위험이 발생할 수 있습니다. 따라서 보다 안전하고 비공개적인 개인 환경(예: 컨테이너 환경 등)을 만드는 것 외에도 생성된 파일의 구성에 대한 권한을 최소화할 수도 있습니다.

일반적인 방법과 결함 분석

파이썬 파일을 생성하고 읽고 쓰는 데 일반적으로 사용되는 방법은 내장된 열기 기능을 통해 직접 파일을 생성하는 것입니다. with 구문을 사용하여 생성된 경우 열려 있는 객체는 문이 끝난 후 자동으로 닫힙니다. open 함수를 직접 사용하여 객체를 정의하는 경우 작업이 끝날 때 닫기 작업을 수동으로 수행해야 합니다. 다음은 내장 함수 open의 사용법과 해당 파일 작업 속성을 보여줍니다. 먼저 file-test.py라는 파일을 만듭니다.

# file-test.py
 
with open('test1.txt', 'w') as file:
    file.write('hello world!')
로그인 후 복사

작업 내용은 다음과 같습니다. 현재 파일에 test1.txt라는 파일을 만듭니다. 디렉토리를 삭제하고 파일 내용 뒤에 hello world! 문자열을 작성합니다. 다음으로 python3을 사용하여 파일을 실행합니다:

[dechin@dechin-manjaro os_security]$ python3 file-test.py
[dechin@dechin-manjaro os_security]$ ll
총 사용량 8
-rw-r--r - - 1 dechin dechin 83 January 25 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 January 25 13:43 test1.txt

여기서 실행 후 성공했음을 확인했습니다. test1.txt 파일이 생성되고 해당 권한은 이전에 생성된 file-test.py와 일치하는 644로 구성됩니다. 내장 함수 open의 구현 원리를 몰랐을 때 처음에는 생성된 파일 권한 구성이 현재 py 파일과 일치한다고 생각했습니다. 그러나 추가 테스트 후 py 파일의 권한을 440으로 구성한 다음 파일을 다시 실행했습니다:

[dechin@dechin-manjaro os_security]$ chmod 440 file-test.py
[dechin@dechin-manjaro os_security]$ ll
총 사용량 8
-r---r----- 1 dechin dechin 83 1월 25일 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 1월 25일 13 : 43 test1.txt
[dechin@dechin-manjaro os_security]$ rm test1.txt
[dechin@dechin-manjaro os_security]$ python3 file-test.py
[dechin@dechin-manjaro os_security]$ ll
총 사용량 8
-r--r----- 1 dechin dechin 83 1월 25일 13:43 file-test.py
-rw-r--r-- 1 dechin dechin 12 1월 25일 13:44 test1.txt

여기서 우리는 Python의 내장 함수 open에 의해 생성된 파일 형식이 소스 py 파일과 아무런 관련이 없다는 것을 테스트 결과에서 볼 수 있습니다. 이 py 파일을 실행하려면 실행 권한이 필요한지 여부에 대해서는 이 블로그를 참조하세요.

향상된 Python 파일 생성 방법

fdopen 라이브러리 및 특수 권한 사양을 통해 생성된 파일에 대한 액세스 권한을 설정할 수 있습니다. Python 코드 예는 다음과 같습니다.

# fdopen-test.py
 
import os
import stat
 
file_name = 'test2.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')
로그인 후 복사

실행 후 현재에서 확인할 수 있습니다. 디렉토리 test2.txt라는 파일이 생성되고 해당 권한은 코드에서 설정한 mode = stat.S_IRUSR | 여기서는 먼저 몇 가지 매개변수에 대해 설명합니다. os.O_WRONLY는 쓰기 전용 모드로 열기를 의미하고, os.O_CREAT는 새 파일을 생성하고 여는 것을 의미하며, os.O_EXCL은 파일이 이미 존재하는 경우 오류를 보고하는 것을 의미합니다. 모드에서 구성된 권한은 각각 rwx 구성에 해당하며 USR, GRP 및 OTH는 각각 사용자, 사용자 그룹 및 기타 사용자에 대한 구성을 세분화하여 모드 매개 변수를 변경하여 모든 유형의 권한 구성을 실현할 수 있습니다.

위 사용 사례에서 700:

# fdopen-test.py
 
import os
import stat
 
file_name = 'test3.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')
로그인 후 복사
에 실행 권한을 추가하는 등 모드를 조정할 수 있습니다.

# fdopen-test.py
 
import os
import stat
 
file_name = 'test4.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')
로그인 후 복사

또는 640 권한과 같이 사용자 그룹의 다른 사용자에 대한 액세스 권한을 추가해야 합니다.

# fdopen-test.py
 
import os
import stat
 
file_name = 'test5.txt'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
 
with os.fdopen(os.open(file_name, flags, mode), 'w') as file:
    file.write('hello world!')
로그인 후 복사
시스템의 기본 644개 파일 권한을 작성할 수도 있습니다.

rrreee

마지막으로 위의 Python 예제를 실행한 후 얻은 결과를 살펴보겠습니다.


[dechin@dechin-manjaro os_security]$ ll
총 사용량 28
-rw-r--r-- 1 dechin dechin 269 1월 25일 14:58 fdopen-test.py
-r--r----- 1 dechin dechin 84 1월 25일 14:11 file- test.py
- rw-r--r-- 1 dechin dechin 12 1월 25일 13:44 test1.txt
-rw------ 1 dechin dechin 12 1월 25일 14:44 test2.txt
-rwx---- - 1 데친 데친 12월 1월 25일 14:48 test3.txt
-rw-r----- 1 데친 데친 12월 1월 25일 14:56 test4.txt

-rw-r- -r-- 1 데친 데친 1월 12일 25 14:58 test5.txt

결과에서 생성된 모든 파일 test*.txt가 예상된 파일 권한 구성에 따라 생성되었음을 확인할 수 있습니다. 여기서는 모든 예상 목표가 달성되었습니다. 🎜

위 내용은 fdopen을 사용하여 Python 프로세스에서 생성된 파일에 대한 권한을 최소화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿