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 ファイルの実行に実行権限が必要かどうかについては、このブログを参照してください。
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 サイトの他の関連記事を参照してください。