chroot() - Unix,Linux系統呼叫 - 技術教學
Tutorials Point


  Unix入門
  Unix Shell程式設計
  高階Unix
  Unix有用參考
  Unix有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論區     關於TP  

chroot() - Unix,Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

chroot - 更改根目錄

概要

#include <unistd.h> 

int chroot(const char *path);

描述

chroot() 將根目錄更改為path中指定目錄。此目錄將用於以/開頭的路徑名。根目錄由當前程序的所有子程序繼承。

只有特權程序(Linux:具有CAP_SYS_CHROOT功能的程序)才能呼叫chroot(2)。此呼叫更改路徑名解析過程中的一個組成部分,而不會執行其他操作。

此呼叫不會更改當前工作目錄,因此呼叫後“.”可能位於以“/”為根的樹之外。特別是,超級使用者可以透過執行“mkdir foo; chroot foo; cd ..”來逃脫“chroot監獄”。

此呼叫不會關閉開啟的檔案描述符,並且此類檔案描述符可能允許訪問chroot樹外的檔案。

返回值

成功時,返回零。發生錯誤時,返回 -1,並且errno被相應地設定。

錯誤

根據檔案系統,可能會返回其他錯誤。下面列出了更常見的錯誤

錯誤程式碼描述
EACCES 路徑字首的元件被拒絕搜尋許可權。(另請參見path_resolution(2)。)
EFAULT path 指向您可訪問的地址空間之外。
EIO 發生I/O錯誤。
ELOOP 在解析path時遇到太多符號連結。
ENAMETOOLONG path 太長。
ENOENT 檔案不存在。
ENOMEM 核心記憶體不足。
ENOTDIR path 的一個元件不是目錄。
EPERM 呼叫者許可權不足。

符合標準

SVr4、4.4BSD、SUSv2(標記為LEGACY)。此函式不是POSIX.1-2001的一部分。

備註

透過fork(2)建立的子程序繼承其父程序的根目錄。根目錄不會被execve(2)更改。

FreeBSD 有一個更強大的jail() 系統呼叫。

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.