【发布时间】:2019-05-02 06:43:11
【问题描述】:
我正在编写将在不同机器上运行的代码。 在代码内部,需要将日志文件创建为"/tmp/2019-05-02/log_file",即为每天创建一个子目录,然后在新文件夹中创建日志文件。出于这个原因,在“/tmp”目录中创建目录我需要运行我的代码
sudo python /path/to/code.py
稍后在相同的代码中,我需要在 "Documents" 中为每一天创建另一个目录。这个新创建的目录的所有者是 root,因为我的代码是作为 sudo 运行的。 当我想从 UI 应用程序中删除 Documents 中这个新创建的子目录时,真正的问题出现了:Files。
所以我所做的是更改了目录权限。这样我就可以毫无问题地删除这个文件夹。
os.chmod("/path/to/directory/inside/Documents", 0747)
但现在当我ls进入文档时。这些新创建的文件夹显示为带有绿色背景的蓝色文本 |表示目录可由拥有用户和组以外的其他人写入,并且没有设置粘性位 (o+w, -t)。
有什么方法可以使 /tmp/2019-05-2 中创建的文件夹的所有者是 root 并且在 Documents 中创建的文件夹归普通用户所有(从该用户我以 sudo 执行程序)。
在我的机器中,用户是 dell。因为我知道我的用户名,所以我可以在我的机器中使用 chown 更改所有者。但即使代码在不同用户名的不同机器上执行,我也需要更改所有者。
【问题讨论】:
-
查看示例 here 他们展示了 setuid 脚本如何返回到原始用户的 ID。
-
试试看:print(os.getenv("SUDO_USER"))
-
我认为你不需要运行 sudo 在 /tmp 中创建目录。
-
@kantal print(os.getenv("SUDO_USER")) 它有效。谢谢。我运行 sudo 因为我使用 os.makedirs() 在 /tmp 下创建多个目录,就像在 /tmp/1/2/3 中一样。
-
@kantal os.getenv("SUDO_USER") 当我以非 sudo 运行时返回无。 os.getlogin() 无论如何都返回关联的登录名。
标签: python operating-system chown