Shell-Script

註銷後 Cron 無法訪問我的主目錄

  • February 22, 2015

我在使用 cron 時遇到了一個很奇怪的問題。到目前為止,我對其進行了提煉:

我創建了以下簡單的 bash 腳本/home/user1/cron_dir/cron.sh

#!/bin/bash
echo "Success"

作為 user1,我創建了以下 crontab:

*/1 * * * * sh /home/user1/cron_dir/cron.sh

這將按預期安裝並執行(從我的本地郵件中的 cron 獲取“成功”消息)。但是,如果我從我的 user1 帳戶註銷,等待幾分鐘以執行 cron 作業,然後重新登錄並檢查我的本地郵件,我會得到:

sh: 0: Can't open /home/user1/cron_dir/cron.sh

編輯:感謝 garethTheRed,我意識到了問題:我的主目錄已加密。當然,只有在我登錄後才能訪問該目錄。

回答這個問題是因為只編輯你的問題以將答案內聯是不好的形式(真的,只要回答你自己的問題,如果是善意的就可以了)。

我遇到了類似的問題 - 通過 cron 開始的作業在前幾次似乎可以工作,但後來失敗了。這些症狀都可以追溯到無法訪問使用者的主目錄和其中的文件。相同的腳本和設置在以前的 Ubuntu 機器上執行良好。

答案是肯定的,如果你在 Ubuntu 安裝過程中選擇加密你的 $HOME 目錄,你會發現 cron 作業將無法訪問它下面的文件,除非你碰巧手動登錄機器導致文件要解密並保持掛載的系統。我對那個選項說是,因為這聽起來是個好主意,但我並沒有堅定地接受它。

我要採用的解決方案是不加密我的主目錄;這意味著我必須從中刪除加密。看起來這是一個小心的過程,將所有相關內容移出文件夾,解除安裝它,然後將它們全部移回 - 不愉快。

我為此遵循的基本過程如下。注意:在執行之前要非常小心並通讀所有步驟,尤其是最後的步驟,因為我懷疑一旦您解除安裝了 ecryptfs,要恢復舊的加密主文件夾將非常棘手。如果您不確定自己在做什麼,請不要嘗試這樣做,因為數據失去的風險是非常真實的。我只是繼續前進,因為我知道我有備份並且可以輕鬆重新安裝。

  • 添加一個新使用者fixeradduser因為你需要以其他人的身份登錄才能移動你的主目錄),並給他們 sudo 權限
  • 使用 sudo,創建一個新文件夾sudo mkdir /home/chrisc.unencrypted以將主目錄的內容傳輸到
  • 使用 .將我的主目錄的內容複製到新的未加密文件夾中rsync -aP /home/chrisc /home/chrisc.unencrypted。確保所有隱藏文件也已移動(例如 .bash_profile 等)
  • 刪除 /home/chrisc.unencrypted/.ecryptfs 文件夾
  • 註銷(並可能重新啟動,因為您需要解除安裝加密的 /home/chrisc 文件夾)
  • 再次登錄fixer
  • 用於sudo su以 root 身份執行
  • 檢查內容是否/home/chrisc.unencrypted與應有的內容匹配。這非常重要,因為接下來的幾個步驟將刪除您查看原始主文件夾的能力
  • 使用 . 重命名舊的(加密的)主目錄mv /home/chrisc /home/chrisc.old。您可能會發現您需要先重新啟動以確保沒有使用該文件夾(否則您將收到阻止重命名的設備正在使用消息)。
  • 將未加密的主文件夾重命名為使用者的預設文件夾mv /home/chrisc.unencrypted /home/chrisc
  • 使用 . 解除安裝 ecryptfs 工具apt-get remove ecryptfs-utils libecryptfs0。如果我不這樣做,然後以 chrisc 身份登錄,我會看到一個空的主目錄(好像它仍在掛載加密的主目錄並隱藏我實際未加密的主目錄)。我必須重新啟動才能將其解除安裝並且真正未加密的 /home/chrisc 可見。
  • 再次以原始使用者身份登錄並檢查

可能會刪除 ecryptfs 的配置文件夾,或者某處的每個使用者配置顯示“當您以 chrisc 身份登錄時,安裝 /home/chrisc/.Private 中可用的 ecryptfs 卷”如果您可以切斷它連結,那麼您可能不需要解除安裝 ecryptfs。

如果您的新主文件夾看起來不包含正確的內容,您應該能夠通過反轉動作來恢復加密的主文件夾chrisc.oldchrisc未加密的主文件夾chrisc.unencrypted。但這只會在您解除安裝 ecryptfs 之前有效。

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