最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用fdopen實(shí)現(xiàn)對(duì)Python進(jìn)程產(chǎn)生的文件進(jìn)行權(quán)限最小化配置

 更新時(shí)間:2023年03月13日 15:11:17   作者:DECHIN  
用python進(jìn)行文件的創(chuàng)建和讀寫(xiě)操作時(shí),我們很少關(guān)注所創(chuàng)建的文件的權(quán)限配置。本文就來(lái)聊聊如何使用fdopen實(shí)現(xiàn)對(duì)Python進(jìn)程產(chǎn)生的文件進(jìn)行權(quán)限最小化配置吧

需求背景

用python進(jìn)行文件的創(chuàng)建和讀寫(xiě)操作時(shí),我們很少關(guān)注所創(chuàng)建的文件的權(quán)限配置。對(duì)于一些安全性較高的系統(tǒng),如果我們創(chuàng)建的文件權(quán)限其他用戶(hù)或者同一用戶(hù)組里的其他用戶(hù)有可讀權(quán)限的話(huà),有可能導(dǎo)致不必要的信息泄漏的風(fēng)險(xiǎn)。因此,除了創(chuàng)建一個(gè)更加安全和隱私的個(gè)人環(huán)境之外(如容器環(huán)境等),我們還可以對(duì)生成的文件的配置進(jìn)行權(quán)限最小化處理。

常用方法及其缺陷分析

常用的python文件創(chuàng)建和讀寫(xiě)方法,是直接通過(guò)內(nèi)置的open函數(shù)創(chuàng)建一個(gè)文件。這里如果是使用with語(yǔ)法來(lái)創(chuàng)建的,結(jié)束語(yǔ)句后會(huì)自動(dòng)關(guān)閉被打開(kāi)的對(duì)象。而如果是直接使用open函數(shù)來(lái)定義一個(gè)對(duì)象,則需要在任務(wù)結(jié)束時(shí)手動(dòng)的執(zhí)行close操作。以下演示內(nèi)置函數(shù)open的用法及其文件操作屬性,首先創(chuàng)建一個(gè)名為file-test.py的文件:

# file-test.py
 
with open('test1.txt', 'w') as file:
    file.write('hello world!')

該任務(wù)的內(nèi)容為:在當(dāng)前目錄下創(chuàng)建一個(gè)名為test1.txt的文件,清空該文件的內(nèi)容后,在文件中寫(xiě)入hello world!這個(gè)字符串。接下來(lái)用python3執(zhí)行該文件:

[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

這里我們發(fā)現(xiàn),在執(zhí)行之后成功產(chǎn)生了test1.txt這個(gè)文件,其權(quán)限配置為644,與前面創(chuàng)建的file-test.py保持一致。在不清楚內(nèi)置函數(shù)open的實(shí)現(xiàn)原理時(shí),原本以為這個(gè)產(chǎn)生的文件權(quán)限配置是與當(dāng)前的py文件保持一致的。然而經(jīng)過(guò)進(jìn)一步的測(cè)試,將py文件的權(quán)限配置為440之后再重新執(zhí)行該文件:

[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

這里從測(cè)試結(jié)果我們可以看出,python的內(nèi)置函數(shù)open產(chǎn)生的文件類(lèi)型是與源py文件無(wú)關(guān)的。關(guān)于這里py文件的執(zhí)行是否需要可執(zhí)行權(quán)限,可以參考這篇博客。

改進(jìn)后的python文件創(chuàng)建方法

通過(guò)fdopen這個(gè)庫(kù)以及特殊的權(quán)限指定,我們可以設(shè)置生成文件的訪問(wèn)權(quán)限,以下直接展示一個(gè)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!')

執(zhí)行之后我們可以發(fā)現(xiàn),當(dāng)前目錄下生成了一個(gè)名為test2.txt的文件,其權(quán)限配置為600, 對(duì)照于我們?cè)诖a中設(shè)置的mode = stat.S_IRUSR | stat.S_IWUSR。這里我們先對(duì)其中的一些參數(shù)作一個(gè)解釋?zhuān)簅s.O_WRONLY表示以只寫(xiě)的方式打開(kāi),os.O_CREAT表示創(chuàng)建并打開(kāi)一個(gè)新文件,os.O_EXCL表示如果文件已存在則報(bào)錯(cuò)。而mode中所配置的權(quán)限分別對(duì)應(yīng)rwx配置,其中USR,GRP,OTH又分別對(duì)用戶(hù)、用戶(hù)組、其他用戶(hù)進(jìn)行了細(xì)分的配置,從而我們就可以通過(guò)改變mode參數(shù)來(lái)實(shí)現(xiàn)所有種類(lèi)的權(quán)限配置。

我們可以嘗試將上述用例中的mode作一個(gè)調(diào)整,比如添加一個(gè)可執(zhí)行權(quán)限變?yōu)?00:

# 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!')

又或者,我們需要為用戶(hù)組里的其他用戶(hù)添加可訪問(wèn)權(quán)限,比如640權(quán)限:

# 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!')

甚至我們也可以寫(xiě)出系統(tǒng)原生的644文件權(quán)限:

# 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示例執(zhí)行后得到的結(jié)果:

[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

從結(jié)果中我們可以看出,所有產(chǎn)生的文件test*.txt都按照我們預(yù)期的文件權(quán)限配置生成,到這里我們就完成了所有預(yù)期的目標(biāo)。

總結(jié)概要

使用python進(jìn)行文件的創(chuàng)建和讀寫(xiě)時(shí),常規(guī)的內(nèi)置函數(shù)open得到的結(jié)果會(huì)是一個(gè)644權(quán)限的文件,這不一定能夠滿(mǎn)足很多對(duì)安全性需求較高的執(zhí)行環(huán)境的要求。因此我們可以通過(guò)fdopen來(lái)對(duì)所創(chuàng)建的文件進(jìn)行進(jìn)一步的權(quán)限約束,具體的操作方法可以在mode中定義一系列的權(quán)限配置,比如帶有USR的表示當(dāng)前用來(lái)執(zhí)行python文件的用戶(hù),帶有GRP的表示用來(lái)執(zhí)行python文件的整個(gè)用戶(hù)組,而OTH則表示其他的所有的用戶(hù)。這當(dāng)中尤其是OTH這個(gè)選項(xiàng)往往是不必要開(kāi)放的權(quán)限,我們也可以根據(jù)具體的場(chǎng)景需求對(duì)創(chuàng)建的文件權(quán)限進(jìn)行配置。這里還有一點(diǎn)補(bǔ)充介紹的是,os.O_EXCL這個(gè)指令的開(kāi)啟表示如果存在同名文件就無(wú)法創(chuàng)建,需要先使用os.remove操作刪除原文件后再進(jìn)行新的文件操作,避免文件權(quán)限被覆蓋或者重用,從而導(dǎo)致創(chuàng)建的新文件權(quán)限配置與我們所預(yù)期的不符合。

到此這篇關(guān)于使用fdopen實(shí)現(xiàn)對(duì)Python進(jìn)程產(chǎn)生的文件進(jìn)行權(quán)限最小化配置的文章就介紹到這了,更多相關(guān)Python文件權(quán)限最小化配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用python-docx讀寫(xiě)word文檔

    Python使用python-docx讀寫(xiě)word文檔

    這篇文章主要為大家詳細(xì)介紹了Python使用python-docx讀寫(xiě)word文檔,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Python中enumerate函數(shù)代碼解析

    Python中enumerate函數(shù)代碼解析

    這篇文章主要介紹了Python中enumerate函數(shù)代碼解析,涉及函數(shù)說(shuō)明以及相關(guān)示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Python爬蟲(chóng)抓取論壇關(guān)鍵字過(guò)程解析

    Python爬蟲(chóng)抓取論壇關(guān)鍵字過(guò)程解析

    這篇文章主要介紹了Python爬蟲(chóng)抓取論壇關(guān)鍵字過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Django 前后臺(tái)的數(shù)據(jù)傳遞的方法

    Django 前后臺(tái)的數(shù)據(jù)傳遞的方法

    本篇文章主要介紹了Django 前后臺(tái)的數(shù)據(jù)傳遞的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Pytest斷言的具體使用

    Pytest斷言的具體使用

    本文主要介紹了Pytest斷言的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Keras設(shè)置以及獲取權(quán)重的實(shí)現(xiàn)

    Keras設(shè)置以及獲取權(quán)重的實(shí)現(xiàn)

    這篇文章主要介紹了Keras設(shè)置以及獲取權(quán)重的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Windows平臺(tái)Python連接sqlite3數(shù)據(jù)庫(kù)的方法分析

    Windows平臺(tái)Python連接sqlite3數(shù)據(jù)庫(kù)的方法分析

    這篇文章主要介紹了Windows平臺(tái)Python連接sqlite3數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了Windows平臺(tái)安裝SQLite數(shù)據(jù)庫(kù)及創(chuàng)建、連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • Keras實(shí)現(xiàn)支持masking的Flatten層代碼

    Keras實(shí)現(xiàn)支持masking的Flatten層代碼

    這篇文章主要介紹了Keras實(shí)現(xiàn)支持masking的Flatten層代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 如何在Win10系統(tǒng)使用Python3連接Hive

    如何在Win10系統(tǒng)使用Python3連接Hive

    這篇文章主要介紹了如何在Win10系統(tǒng)使用Python3連接Hive,幫助大家更好的利用python讀取數(shù)據(jù),進(jìn)行探索、分析和挖掘工作。感興趣的朋友可以了解下
    2020-10-10
  • Python的@property的使用

    Python的@property的使用

    通常,當(dāng)我們需要對(duì)對(duì)象的敏感屬性或者不希望外部直接訪問(wèn)的屬性進(jìn)行私有化,但是某些時(shí)候我們又需要對(duì)這些私有屬性進(jìn)行修改,該怎么處理呢,感興趣的可以了解一下
    2021-07-07

最新評(píng)論

新平| 宁国市| 安龙县| 阿图什市| 合水县| 蒙阴县| 德保县| 闽清县| 嵩明县| 茂名市| 苗栗市| 石门县| 甘肃省| 闸北区| 重庆市| 崇信县| 马边| 大港区| 大荔县| 腾冲县| 磐石市| 平塘县| 古交市| 平潭县| 化德县| 偏关县| 竹山县| 邳州市| 克山县| 北流市| 郴州市| 武定县| 集贤县| 漳平市| 龙南县| 麻江县| 黄平县| 洛川县| 东安县| 英德市| 临沭县|