在root拥有的shell脚本中创建文件,而不需要sudo

时间:2014-04-09 03:29:35

标签: bash shell ubuntu

起初这可能看起来有点奇怪,但是我出去了。

我正在编写一个shell脚本,该脚本构成一个文件系统,该文件系统将被压缩回一个存档,并且需要其中的一些文件由root用户拥有。整个过程很快就会自动化,但现在它有点问题,因为如果我使用sudo,我需要输入密码。

看到文件是在我自己的主目录下创建的,我有完全访问权限,我想也许我可以将他们的所有权更改为root用户。这可能吗?

如果我正常尝试,我会得到"操作不被允许"。也许有另一种选择?

1 个答案:

答案 0 :(得分:4)

您可以使用fakeroot执行所需操作。它是一个库,使程序认为它们以root用户运行,而不是。 IIRC,dpkg使用它来允许非root用户构建包含root拥有文件的.deb包。

查看此shell脚本:

#!/bin/bash

mkdir image
touch image/user-owned
touch image/root-owned

chown renato.renato image/user-owned
chown root.root     image/root-owned

tar cf image.tar image

通常,我只能以root身份创建此tar存档。但是,如果我使用fakeroot:

$ fakeroot ./create-image.sh
$ tar tvf image.tar

drwxr-xr-x root/root         0 2014-04-09 01:09 image/
-rw-r--r-- root/root         0 2014-04-09 01:09 image/root-owned
-rw-r--r-- renato/renato     0 2014-04-09 01:09 image/user-owned

但是,磁盘上的文件仍然是用户拥有的,因此没有安全风险:

$ ls -l image/

total 0
-rw-r--r-- 1 renato renato 0 Abr  9 01:09 root-owned
-rw-r--r-- 1 renato renato 0 Abr  9 01:09 user-owned