我正在尝试使用从python脚本预定义的所有者:group在linux上创建一个文件。
问题是python脚本以root身份运行,我无法通过两个步骤进行所有者设置:
subprocess.call("cp a b", shell=True)
subprocess.call("chown user:group b", shell=True)
因为文件创建必须通过适用于文件所有权的incron触发另一个进程。如果我分2步执行它总是以root身份触发进程(从第一个cp开始);我不想要
简而言之,有一种简单的方法可以创建一个文件,在创建时自己创建一个以root用户身份运行的python进程。
答案 0 :(得分:1)
您可以更改当前进程的有效uid和gid,但新用户必须具有对要复制的文件的读取权限。那可以吗?
import os
import shutil
gid = 20 # Target group id
uid = 501 # Target user id
os.setegid(gid)
os.seteuid(uid)
from_file = '/var/root/rootfile' # File to copy from (tested on OS X)
to_file = 'rootfile' # Filename to copy to
shutil.copyfile(from_file, to_file)
# Switch back to root
os.setegid(0)
os.seteuid(0)
答案 1 :(得分:0)
好的,这不是python而是UNIX问题:
默认情况下,文件始终由创建过程的用户拥有。
作为root用户,您可以更改此类操作的有效UID,然后您可以更改文件所有权。
cp
支持保留原始所有者:cp -a
这可能已经解决了您的问题。
在python进程中设置UID非常简单:
import os
os.setuid(<userid>)