fdopen を使用して、Python プロセスによって生成されたファイルのアクセス許可を最小限に抑える方法
要件の背景
Python を使用してファイルの作成、読み取り、書き込みを行う場合、作成されたファイルの権限設定に注意を払うことはほとんどありません。セキュリティを強化した一部のシステムでは、作成したファイル権限に他のユーザーや同じユーザーグループ内の他のユーザーに読み取り権限が設定されている場合、不要な情報漏洩のリスクにつながる可能性があります。したがって、より安全でプライベートな個人環境 (コンテナー環境など) を作成することに加えて、生成されるファイルの構成の権限を最小限に抑えることもできます。
一般的な方法と欠陥分析
Python ファイルの作成、読み取り、書き込みに一般的に使用される方法は、組み込みの open 関数を使用してファイルを直接作成することです。 with 構文を使用して作成された場合、開かれたオブジェクトはステートメントの終了後に自動的に閉じられます。 open 関数を直接使用してオブジェクトを定義する場合は、タスクの最後に close 操作を手動で実行する必要があります。以下は、組み込み関数 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
Total使用法 8
-rw-r--r-- 1 デチン デチン 83 1月 25 日 13:43 file-test.py
-rw-r--r-- 1 デチン デチン 12 1 月 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 ファイル-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 January 25 13:44 test1.txt
テスト結果から、ファイルが Python の組み込みによって生成されたことがわかります。 function 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 | stat.S_IWUSR と比較すると、そのアクセス許可が 600 に設定されていることがわかります。ここで最初にいくつかのパラメータについて説明します。os.O_WRONLY は書き込み専用モードで開くことを意味し、os.O_CREAT は新しいファイルを作成して開くことを意味し、os.O_EXCL はファイルがすでに存在する場合にエラーを報告することを意味します。 mode で設定される権限はそれぞれ rwx 設定に対応しており、USR、GRP、OTH はそれぞれユーザー、ユーザーグループ、その他のユーザー向けに細分化された設定があり、mode パラメータを変更することであらゆる種類の権限設定を実現できます。
実行可能権限を 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!')
または、ユーザー グループ内の他のユーザーに実行可能権限を追加する必要があります640 権限などのアクセス権限:
# 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!')
システムのネイティブ 644 ファイル権限を書き出すこともできます:
# 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!')
最後に、上記の 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 デチン デチン 84 1月 25 日 14:11 file-test.py
-rw-r--r-- 1 デチン デチン 12 1 月 25 日 13:44 test1.txt
-rw------ 1 でちんでちん 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 デチンデチン 12 1月25日 14:58 test5.txt
結果から、生成されたすべてのファイル test*.txt が、予想されるファイル権限設定に従って生成されていることがわかります。この時点で、予想されるすべての目標を完了しました。
以上がfdopen を使用して、Python プロセスによって生成されたファイルのアクセス許可を最小限に抑える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Pythonクロスプラットフォームデスクトップアプリケーション開発ライブラリの選択多くのPython開発者は、WindowsシステムとLinuxシステムの両方で実行できるデスクトップアプリケーションを開発したいと考えています...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

なぜ私のコードはAPIによってデータを返しているのですか?プログラミングでは、APIが呼び出すときにヌル値を返すという問題に遭遇することがよくあります。

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...
