Cp

為什麼cp不設置源屬性並以-p失敗?

  • July 1, 2017

我有這些文件:

-rw-rw-r-- 1 root   adm    0 Jun 22 11:25 a
-rw-rw-r-- 1 wilmes wilmes 0 Jun 22 11:23 b

當我以使用者 wilmes 的身份 cp b 到 a 時,為什麼它保留 a (root) 的原始所有者?

我使用這個命令(沒有別名):cp ba

為什麼我在命令 cp -pba 中使用 -p 會失敗?

cp: preserving times for 'a': Operation not permitted

我在帶有 ext4 的 Ubuntu 17.04 上註意到了這一點。使用者 wilmes 是組 adm 的成員,包含目錄如下所示:

drwxrwxr-x 2 wilmes wilmes 4,0K Jun 22 12:09 ../user/

最重要的是:這在哪裡記錄?

它失敗是因為您需要成為目標 (a) 文件所有者,cp 不會覆蓋基本的 unix 安全性。使用者可以保留自己的文件 wilmes -> wilmes,但不能為其他使用者這樣做,當然也不能為 root。我假設您沒有以 root 身份登錄,也沒有以 wilmes 身份登錄。

在這種情況下,一個文件歸 root 所有,另一個歸 wilmes 所有。要保留,您應該嘗試執行:

sudo cp -p b a

相關連結:

例子:

為 root 使用者創建一個文件 a,並為標準使用者 (joe) b 創建一個文件。

joe@testbed:~/tmp2$ sudo touch a
joe@testbed:~/tmp2$ touch b

驗證權限是否正確。

joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 root    root    0 Jun 22 13:51 a
-rw-r--r-- 1 joe     joe     0 Jun 22 13:51 b

嘗試將使用者擁有的文件 b 複製到根擁有的文件(這將違反權限):

joe@testbed:~/tmp2$ cp -p b a
cp: cannot create regular file 'a': Permission denied

以root身份重複複製,保留權限:

joe@testbed:~/tmp2$ sudo cp -p b a
joe@testbed:~/tmp2$ ls -l
total 0
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 a
-rw-r--r-- 1 joe joe 0 Jun 22 13:51 b

注意: Permission denied ,不是Operation not allowed。我想你看到 not allowed 因為使用者 wilmes 確實可以通過組訪問文件,但是,他們不是owner,所以他們不能完全覆蓋它。

從邏輯上講,您正在替換屬於另一個使用者(root)的文件並要求系統也使您成為該文件的所有者,這將是一個災難性的安全漏洞。

例如,如果我作為一個普通使用者來了很長一段時間,malicious.username01並且想將 crontab 替換為屬於 root 的 ntp 之類的東西怎麼辦?如果您嘗試做的工作,我可以簡單地編寫我自己的惡意版本,然後簡單地cp -p my-malicious-script /etc/cron.daily/ntp. 這將是可怕的。真的真的太可怕了。

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