我编写了一个 Python 脚本,它基本上保存了我在 Reddit 上使用的一个特殊帐户的帐户信息。一切都很顺利,直到我意识到,即使文件夹是隐藏的,用户等仍然可以通过手动或类似方式访问该目录(例如,通过执行 以纯文本形式查看我用于脚本的文件gedit /path/to/.hidden
)。
我尝试解决这个问题,只需让root
主要所有者和唯一可以查看的人那个特定的文件夹,强调一下,以免人们认为我将自己锁在了主文件夹之外,但现在的问题是 Python 无法查看所需的文件,因为它没有读取权限。
是否有可能将 Python 添加到其自己的组中,类似于设置 Virtualbox 时自动执行的操作(例如,这样我就可以执行类似的操作sudo chown python:python /path/to/files
)?如果没有,是否有其他方法可以防止窥探,但仍允许 Python 查看和读取文件?
我正在使用 Ubuntu 18.04(如果它有帮助,我已经安装并主要使用 MATE 桌面环境。)
答案1
您可以创建新用户,使其成为脚本的所有者,并禁用所有其他人对脚本的访问(0700 权限)。
要运行脚本,请使用 sudo 命令,如下所示,因此您每次都必须输入密码,这会提高一点安全性。
sudo -u newuser python /path/to/.hidden
更新:要在登录页面隐藏新用户,请将其 uid 设置为 1000 以下,并将 shell 设置为 /bin/false,这样无论如何都不允许登录,但仍然可以以此用户身份进行 sudo
答案2
不,从根本上来说不是。您希望用户能够通过 python 命令读取文件,但不能检查文件的内容。
首先,从技术角度来看,可以如果您将 python 设为 setuid 二进制文件,则有可能(注意:不要这样做;这可能会破坏系统的其他部分)。但是。Python 不是为此而设计的。
我可以使用以下命令启动 python python -i script
:
-i When a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command. It does not read the $PYTHONSTARTUP file. This can be useful to inspect global variables or a stack trace when a script raises an exception.
这基本上意味着我可以访问全部脚本中的变量和方法可以自由修改。我可以修改脚本的行为。如果它登录 reddit,我可以获取身份验证令牌,并使用浏览器登录。可能还可以检索密码。
我甚至可以编写一个小的 Python 脚本,逐行读取你的脚本并将其打印给我。Python不能确保 setuid 的安全,因为它是一种功能齐全的编程语言。如果你允许 python 读取文件,则允许任何可以运行 python 来读取文件的用户。
问题从根本上在于你试图向用户隐藏信息。然而,要执行预期的功能,用户需要这些信息。这是一个无法解决的问题。