2014-04-09 76 views
2

這看起來似乎有點奇怪,但在這裏我可以看出來。在不需要sudo的情況下在我的shell腳本中創建文件

我正在編寫一個shell腳本,它構成一個文件系統,該文件系統將被壓縮回檔案中,並且它需要一些文件被root用戶擁有。這整個事情將很快自動化,但現在這是一個問題,因爲如果我使用sudo,我需要輸入密碼。

由於文件是在我自己的主目錄下創建的,我可以完全訪問它,所以我想也許我可以將它們的所有權更改爲root用戶。那可能嗎?

如果我通常嘗試,我會得到「操作不允許」。也許有另一種選擇?

+0

你可以用'su'或'sudo',但這是關於它的結束。您不能以普通用戶身份創建屬於其他人的文件,至少所有的「root」。您最好的選擇可能是修改歸檔工具以更改歸檔文件中記錄的權限。 –

+0

你是root用戶還是sudoers? – MLSC

+0

hmm。也許我可以用schroot來做 – Matt

回答

4

您可以使用fakeroot來做你想做的事。這是一個庫,它使程序認爲它們以root用戶身份運行,當它們不在。 IIRC,dpkg使用它來允許非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 

通常情況下,我只能夠創建這個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 
+1

啊,現在你正在談點什麼...我很久以前就記得這個命令。這就是爲什麼我問這個問題,因爲我認爲這樣的工具存在。 – Matt

相關問題