如何更改Linux用戶的根目錄?

如何更改Linux用戶的根目錄?

對於 Linux 主機上的用戶,我需要讓除了他的主目錄之外的所有內容都無法存取。

我聽說這通常是透過更改使用者的根目錄(並將其設定為使用者的主目錄)來完成的,但是我找不到執行此操作的方法。

我考慮了該chroot命令,但似乎它只是運行指定的命令,將指定的目錄視為根目錄。所以這似乎chroot不是我需要的。

所以我的問題是:更改使用者根目錄的指令是什麼?

答案1

聽起來您想更改主目錄,而不是根目錄。根目錄始終為 / 或 /root。

usermod -d /path/to/new/homedir/ username

答案2

為了確保此主目錄後面的“所有內容都無法訪問”,我將使用 chroot,但是如果您不準備 chroot 目錄,則在您無法執行任何操作後,您將沒有任何可用的二進位檔案或庫。

FTP 伺服器的設定對您很有用: http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec296.html

這是一個完整的 chroot 設置,用於將 ftp 使用者限製到此 chroot 目錄。

答案3

我堅持這個答案,我不在乎我是否得到-1。 Unix 無法以任何合理的方式為您做到這一點。你所要求的東西其實是不可能的。

但有一種方法可以得到你所要求的東西。使用虛擬機器。為相關使用者設定一個虛擬機器實例,並只授予他們登入權限,而不是主機作業系統的登入權限。

這是我原來的答案:

只需使用權限即可。這就是他們的目的。無論如何,使用者通常無權寫入 /tmp 及其主目錄之外的任何內容。他們必須具有/bin//usr/bin、的讀取權限/usr/lib/lib否則他們將無法執行任何操作。

如果您確實想要比權限更嚴格的東西,那麼請考慮設定 selinux,以便您可以進一步限制它們。

僅僅使用chroot不會給你想要的東西。設定起來確實很複雜,並且有很多方法可以解決它。

答案4

我想如果你添加

if grep "\\<${USER}\\>" /etc/jailbirds > /dev/null
then
    echo I am not a crook
else
    exec chroot $CWD
endif

到最後/etc/profile你可能會得到你想要的東西,但它可能會產生一些我不知道的副作用(接管 shell 運行/etc/profile可能會導致問題)。在這種情況下,您需要建立一個文件/etc/jailbirds,其中包含您想要 chroot 的使用者清單。您還需要確保該文件存在,並決定在訪問該文件時出現錯誤時該怎麼做,以確保其他用戶(尤其是 root 用戶)不會被 chroot 鎖定

此外,做到這一點將會很困難。使用者將無法訪問,/proc這將使許多 shell 實用程式(例如pstop和許多其他實用程式)無法運作。用戶也將無法訪問/dev/null,這會破壞很多東西。

使用者也將無法存取與標準輸入一起使用時/dev/tty會中斷的情況lessmore使用者的應用程式將從 chroot 之前繼承 stdin、stdout 和 stderr 打開檔案描述符,但 less 開啟 /dev/tty,以便它可以從使用者獲取擊鍵來處理從管道重定向的 stdin。

您也將無法存取許多程式使用的任何程式或共用程式庫或位於 /etc 下的許多檔案(例如 /etc/protocols )。

所有這些都是您可以解決的問題,但您最終需要做比我想像的更多的工作才能使用戶的環境可用。

如果您確實嘗試我的建議,我建議您要非常小心。很容易出錯,把事情搞砸。順便說一下,我還沒有測試過這個。

相關內容