只有 python 文件可以读取特定文件

Only python file can read a specific file

提问人:Leonardo Rafael Mora 提问时间:8/21/2023 最后编辑:Leonardo Rafael Mora 更新时间:8/22/2023 访问量:83

问:

对于高中项目,我必须使用私钥来加密文件。我更改了我的 pk 的权限,只有 root 用户才能读取此文件。我将所有者(更改为 root)并将 uid 权利放在这个 python 文件中,但是当我执行这个 python 文件时,我无法访问我的 pk,对我来说我必须更改 python 的权限,但我不想要,(安全问题)。 您有没有想过只能通过 python 文件访问文件?

python 文件包含在 django 项目 (view.py) 中,我也想使用该过程的 pid,但它并没有改变我的问题。

我在 view.py 上使用了带有 0777 的 chown root 和 chmod,但它说我无法读取此文件(具有所有者 root 的读取权限)。

我的回溯错误:

Traceback (most recent call last):
  File "/home/mora/anaconda3/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/mora/anaconda3/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/mora/Bureau/secProject/computer_project_54740/secuServer/accounts/views.py", line 65, in home_view
    with open("certificats/pkeyRSA.key", "r") as fd:

Exception Type: PermissionError at /home/
Exception Value: [Errno 13] Permission denied: 'certificats/pkeyRSA.key'```


I added the uid right to python file with:
```sudo chown root view.py
sudo chmod 0777 view.py```
for the pkeyRSA.key:
```sudo chown root pkeyRSA.key
sudo chmod u+r pkeyRSA.key```
蟒蛇 django linux openssl chmod

评论

1赞 willeM_ Van Onsem 8/21/2023
python 文件的访问模式与 .您与某个用户一起运行 Python 文件,如果该用户无权访问将使用该程序打开的文件,则不会发生这种情况。您可以更改程序的所有权或访问权限,但这是为了读取*/*update*/*执行程序。但是运行器本身(调用 python 文件的用户)将需要访问程序应该打开的文件。pk
0赞 ewokx 8/21/2023
欢迎使用 Stack Overflow。什么是完整的回溯错误?
0赞 Leonardo Rafael Mora 8/21/2023
是的,我知道 Willem,pk 具有 root 的读取访问权限,我将我的 python 文件的所有者更改为 root 并更改权限,通常如果 python 文件以 root 的 right 和 uid 执行,它应该可以工作,但在我的情况下不行。我添加了回溯错误
0赞 willeM_ Van Onsem 8/21/2023
@LeonardoRafaelMora:但是 Python 文件的所有者不会更改任何内容,当您运行文件时,这不会进程的所有者。python 解释器将简单地尝试打开 Python 文件并与调用解释器的用户一起运行。如果这将使用 python 文件的所有者,这将是一个严重的权限升级问题。

答:

0赞 willeM_ Van Onsem 8/21/2023 #1

我在 view.py 上使用和 with,但它说我无法读取此文件(具有所有者根目录的读取)。chown rootchmod0777

的所有者或访问权限与打开(另一个)文件无关。您只需使用用户(默认情况下是启动程序的用户,但您可以更改程序的用户)运行 Python 程序。因此,Python 文件不是与不同的用户一起运行每个文件的独立实体,事实上,只要解释器可以读取文件,文件的所有者根本不重要。views.py

这意味着运行 Django 服务器的程序最终将尝试打开该文件,因此操作系统将检查运行该程序的用户是否有权打开该文件。python

文件本身具有特定所有者或权限这一事实并不重要。如果运行 Python 程序的用户尝试打开 Python 文件来启动程序,但程序不会更改程序运行的所有权(“进程”),以防文件具有不同的所有者,这将是一个严重的权限升级 [wiki] 问题。*.py

因此,您必须使用正确的用户运行 Python 文件,例如:

sudo python manage.py runserver   # very bad idea

因此,这个想法是使用于运行 Web 服务器的用户可以访问该文件,例如。www-data

评论

0赞 Leonardo Rafael Mora 8/21/2023
好的,所以我只需要创建一个用户来执行这个项目,只有这个用户才能访问私钥,我会尝试这个,谢谢