Permissions

如何將root無法訪問的目錄複製到只有root可以訪問的目錄?

  • August 23, 2016

我在 nfs 掛載上有一個目錄,該目錄在伺服器上位於/home/myname/.rubies

Root 無法訪問此目錄:

[mitchell.usher@server ~]$ stat /home/mitchell.usher/.rubies
 File: `/home/mitchell.usher/.rubies'
 Size: 4096            Blocks: 8          IO Block: 32768  directory
Device: 15h/21d Inode: 245910      Links: 3
Access: (0755/drwxr-xr-x)  Uid: (  970/mitchell.usher)   Gid: (  100/   users)
Access: 2016-08-22 15:06:15.000000000 +0000
Modify: 2016-08-22 14:55:00.000000000 +0000
Change: 2016-08-22 14:55:00.000000000 +0000

[mitchell.usher@server ~]$ sudo !!
sudo stat /home/mitchell.usher/.rubies
stat: cannot stat `/home/mitchell.usher/.rubies': Permission denied

我正在嘗試從該目錄中複製某些內容/opt,只有 root 可以訪問:

[mitchell.usher@server ~]$ cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot create directory `/opt/ruby-2.1.3': Permission denied

[mitchell.usher@server ~]$ sudo !!
sudo cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot stat `.rubies/ruby-2.1.3/': Permission denied

顯然我可以執行以下操作(並且是我暫時所做的):

[mitchell.usher@server ~]$ cp -r .rubies/ruby-2.1.3/ /tmp/
[mitchell.usher@server ~]$ sudo cp -r /tmp/ruby-2.1.3/ /opt/

有什麼方法可以不涉及將其複制為中間步驟或更改權限?

您可以tar用作緩衝過程

cd .rubies
tar cf - ruby-2.1.3 | ( cd /opt && sudo tar xvfp - )

第一個tar以您的身份執行,因此可以讀取您的主目錄;第二次tar執行sudo,因此可以寫入/opt.

您可以使用rsyncscp複製user@localhost到本地目錄。

範例rsync

# rsync "$real_user@localhost:$PWD/.rubies/ruby-2.1.3" /opt

你也可以選擇

$ rsync .rubies/ruby-2.1.3 "root@localhost:/opt"

如果您讓 root 直接訪問 localhost(不推薦;我們通常更喜歡 root 訪問 via sudo)。

引用自:https://unix.stackexchange.com/questions/305055