簡體   English   中英

允許python應用程序為任何用戶創建和訪問文件,但不允許用戶直接訪問文件

[英]Allow python application to create and access files for any user, but not the users to acces the files directly

我正在用python開發應用程序,而我在文件權限方面苦苦掙扎。

我的應用程序正在使用貨架日志記錄模塊創建,訪問和修改多個文件。

該應用程序將位於服務器上,並將被屬於不同組的多個用戶使用。

我的問題是,文件被標記為首次啟動該應用程序的用戶所擁有,從而創建了文件,此后,當另一個用戶啟動該應用程序時,他沒有訪問文件所需的權限,並且應用程序崩潰。

我可以修改權限,以允許所有用戶訪問和修改文件,但這並不能令人滿意。

我發現使用setuid可能允許應用程序在任何用戶啟動時訪問文件,但不允許用戶直接修改文件。 這正是我所需要的。

但是,我找不到修改貨架日志記錄模塊創建的文件的umask或權限的方法。

我認為也許對於擱置訪問的文件,我可以在訪問它們之前使用os.umask創建文件,但是似乎不適用於通過日志記錄創建的文件,因為我使用的是旋轉文件處理程序只要日志文件已滿,就創建文件。

有什么更Python的方式來處理呢?

編輯:

正如評論中所問的那樣,這是復制我的問題的簡單代碼段。

#!/usr/bin/env python2.7
import logging

logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)

fh = logging.FileHandler('logfile.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)

logger.info('Test')

現在,如果用戶A啟動該應用程序,則會創建一個日志文件。 如果用戶B隨后啟動了該應用程序,則出現錯誤,因為他沒有訪問日志文件的權限。

錯誤是IOError:權限被拒絕[...] / logfile.log

編輯2

一些其他信息:

我在我的應用程序所在的系統上沒有root用戶訪問權限,因此專門為我創建一個僅可用於我的應用程序的用戶設置用戶似乎是不可能的。

該應用程序很少使用,只有少數人使用,因此,我現在假設不會同時訪問它。

我在應用程序中不需要身份驗證和授權。 對於任何用戶,它應該以完全相同的方式工作。

我認為,按照goncalopp的建議,創建用戶並以該用戶身份運行應用程序將是最好的解決方案,但恐怕不可能。 我將不得不問系統管理員。

您的問題尚不清楚,如果多個用戶同時運行該應用程序會發生什么情況。 除非您有顯式的鎖定文件或其他某種同步機制,否則您將有多個進程同時寫入相同的文件。

假設您已解決了同步問題,那么setuid可能不是此處的最佳解決方案。 由於python是一種解釋型語言, 因此設置起來特別困難,並且通常需要考慮安全性

解決此類問題的通常的unix解決方案是讓您的程序以特定的系統用戶身份運行,該用戶是出於該特定目的而創建的 該程序可以作為守護程序運行,也可以在cronjob中運行。 使用這種方法,如果需要用戶交互,則必須向程序中的用戶顯式公開操作 ,並具有身份驗證和授權機制

對於交互,您可以使用(unix或普通)套接字或受監視/池目錄,具體取決於程序的性質。 對於身份驗證,

當然,所有這些都意味着額外的開發工作,您此時可能無法執行。 一種解決方法是允許特定用戶和命令使用無密碼sudo

您可以嘗試使用webbrowser api打開文件,

不需要權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM