中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 如何使用fdopen實現對Python進程產生的文件進行權限最小化配置

如何使用fdopen實現對Python進程產生的文件進行權限最小化配置

發布時間:2023-03-13 16:53:26 來源:億速云 閱讀:88 作者:iii 欄目:開發技術

今天小編給大家分享一下如何使用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
總用量 8
-rw-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

這里我們發現,在執行之后成功產生了test1.txt這個文件,其權限配置為644,與前面創建的file-test.py保持一致。在不清楚內置函數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的文件,其權限配置為600, 對照于我們在代碼中設置的mode = stat.S_IRUSR | stat.S_IWUSR。這里我們先對其中的一些參數作一個解釋:os.O_WRONLY表示以只寫的方式打開,os.O_CREAT表示創建并打開一個新文件,os.O_EXCL表示如果文件已存在則報錯。而mode中所配置的權限分別對應rwx配置,其中USR,GRP,OTH又分別對用戶、用戶組、其他用戶進行了細分的配置,從而我們就可以通過改變mode參數來實現所有種類的權限配置。

我們可以嘗試將上述用例中的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 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 dechin dechin  12  1月 25 14:48 test3.txt
-rw-r----- 1 dechin dechin  12  1月 25 14:56 test4.txt
-rw-r--r-- 1 dechin dechin  12  1月 25 14:58 test5.txt

從結果中我們可以看出,所有產生的文件test*.txt都按照我們預期的文件權限配置生成,到這里我們就完成了所有預期的目標。

以上就是“如何使用fdopen實現對Python進程產生的文件進行權限最小化配置”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漳平市| 盐边县| 云霄县| 阿合奇县| 元阳县| 清镇市| 和平县| 肇庆市| 娄底市| 常州市| 洛扎县| 方城县| 额尔古纳市| 嫩江县| 安泽县| 扶沟县| 阿坝| 明溪县| 云浮市| 元氏县| 常德市| 阳高县| 繁昌县| 江油市| 申扎县| 宁蒗| 庆阳市| 娱乐| 饶阳县| 宁化县| 海盐县| 南城县| 安达市| 花莲市| 定日县| 那坡县| 太康县| 额济纳旗| 迁安市| 丰都县| 昌乐县|