1. 簡(jiǎn)介
chroot是在unix系統(tǒng)的一個(gè)操作,針對(duì)正在運(yùn)作的軟件進(jìn)程和它的子進(jìn)程,改變它外顯的根目錄。一個(gè)運(yùn)行在這個(gè)環(huán)境下,經(jīng)由chroot設(shè)置根目錄的程序,它不能夠?qū)@個(gè)指定根目錄之外的文件進(jìn)行訪問(wèn)動(dòng)作,不能讀取,也不能更改它的內(nèi)容。chroot這一特殊表達(dá)可能指chroot(2)系統(tǒng)調(diào)用或chroot(8)前端程序。默認(rèn)情況下我們指的是chroot(8)前端程序。
由chroot創(chuàng)造出的那個(gè)根目錄,叫做“chroot監(jiān)獄”(chroot jail,或chroot prison)。
2. 功能
Linux官方MAN手冊(cè)對(duì)chroot命令的定義是:
run command or interactive shell with special root directory,即運(yùn)行命令或者具有指定根目錄的交互式shell?;驹谒兄С衷撁畹膌inux系統(tǒng)中,都需要以超級(jí)管理員的權(quán)限才可以執(zhí)行該命令。
3. 常見(jiàn)應(yīng)用領(lǐng)域
- 系統(tǒng)修復(fù)
- 系統(tǒng)啟動(dòng)時(shí)切換根目錄,引導(dǎo)系統(tǒng)啟動(dòng)
- 特權(quán)分離
4. 發(fā)展
chroot從1979年誕生至今,已經(jīng)發(fā)展成為支持docker這樣的容器的底層技術(shù)之一了。
docker約等于chroot+namespace+other。
5. 問(wèn)題
在openssh的sftp中可能會(huì)經(jīng)常碰到的問(wèn)題就是用戶認(rèn)證都通過(guò)了,但是最終還是會(huì)登錄失敗。在ubuntu系統(tǒng)的auth.log日志中我們能看到類似
bad ownership or modes for chroot directory xxx這樣的內(nèi)容,這個(gè)就是因?yàn)槲覀儼裞hroot的目錄所屬的用戶設(shè)置錯(cuò)了。
在/etc/ssh/sshd_config目錄中ChrootDirectory后面所接的路徑的根目錄屬主必須是root用戶。
當(dāng)時(shí)就是因?yàn)檫@個(gè)目錄屬主設(shè)置錯(cuò)誤耽誤了我兩天時(shí)間,一直摸不著頭腦,從google的很多答案來(lái)說(shuō)都有點(diǎn)兒不匹配,但是看到很多提到了chroot,然后就去看了下chroot的知識(shí),然后做了上述修改后就成功了。