国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動(dòng)安全 安全管理 應(yīng)用案例 網(wǎng)絡(luò)威脅系統(tǒng)安全 應(yīng)用安全 數(shù)據(jù)安全 云安全
當(dāng)前位置: 主頁(yè) > 信息安全 > 系統(tǒng)安全 >

若何利用chroot保障開(kāi)源系統(tǒng)辦事安然

時(shí)間:2013-12-24 11:26來(lái)源:TuZhiJiaMi企業(yè)信息安全專(zhuān)家 點(diǎn)擊:
1、首要功能 在初期的UNIX系統(tǒng)中,根目次是文件系統(tǒng)中的一個(gè)固定點(diǎn)。在當(dāng)前UNIX變體中,包含Linux,你可以在每個(gè)過(guò)程的根本上定義根目次。chroot合用法度法度承諾你用根目次(而非/)運(yùn)行一個(gè)
Tags系統(tǒng)安全(735)系統(tǒng)服務(wù)(2)chroot(1)  

  1、首要功能

  在初期的UNIX系統(tǒng)中,根目次是文件系統(tǒng)中的一個(gè)固定點(diǎn)。在當(dāng)前UNIX變體中,包含Linux,你可以在每個(gè)過(guò)程的根本上定義根目次。chroot合用法度法度承諾你用根目次(而非/)運(yùn)行一個(gè)過(guò)程。

  根目次位于目次層次布局的頂部,并且沒(méi)有父目次。是以,一個(gè)過(guò)程沒(méi)法拜候根目次以上的文件,因?yàn)椴淮嬖?。例如,假定運(yùn)行一個(gè)法度(過(guò)程),指定其根目次為 /home/sam/jail,該法度沒(méi)有/home/sam中的任何文件的概念:jail是該法度的根目次,并標(biāo)識(shí)表記標(biāo)幟為/(不是jail)。

  經(jīng)由過(guò)程成立一小我工的根目次,凡是被稱(chēng)為(chroot)jail,可以避免一個(gè)法度拜候、履行或點(diǎn)竄(可能歹意)始自其根目次層次布局以外的文件。你必需 準(zhǔn)確設(shè)置一個(gè)chroot jail以進(jìn)步安然性:假定你沒(méi)有準(zhǔn)確設(shè)置chroot jail,歹意用戶會(huì)比沒(méi)有chroot jail更等閑獲得拜候系統(tǒng)的權(quán)限。

  2、利用chroot

  1)成立chrot jail

  成立一個(gè)chroot jail很簡(jiǎn)單:利用root權(quán)限,履行/usr/sbin/chroot directory號(hào)令。此中directory成為根目次,該過(guò)程試圖運(yùn)行默許shell。利用root權(quán)限,下面的號(hào)令在(現(xiàn)有的)/home /sam/jail目次中設(shè)置一個(gè)chroot jail:

  # /usr/sbin/chroot /home/sam/jail

  /usr/sbin/chroot: failed to run command '/bin/bash': No such file or directory

  這個(gè)例子設(shè)置一個(gè)chroot jail,可是當(dāng)系統(tǒng)試圖運(yùn)行bash shell時(shí),把持掉敗。一旦設(shè)置了jail,名為jail的目次將代替根目次的名稱(chēng)/。是以,chroot環(huán)境沒(méi)法找到由/bin/bash路徑名標(biāo)識(shí) 的文件。在這類(lèi)環(huán)境下chroot jail正常工作,但沒(méi)有效處。

  讓chroot jail按你想要的編制工作是較為復(fù)雜的。要讓前面的例子在chroot jail中運(yùn)行bash,在jail (/home/sam/jail/bin)中成立一個(gè)bin目次并將/bin/bash復(fù)制這個(gè)目次。因?yàn)閎ash二進(jìn)制文件是到共享庫(kù)的動(dòng)態(tài)鏈接,你還 需要將這些庫(kù)文件(在lib中)復(fù)制到j(luò)ail中。

  2)一個(gè)具體的例子

  下面的示例成立需要的目次、復(fù)制bash、利用ldd來(lái)顯示bash依托的共享庫(kù)和復(fù)制需要的庫(kù)文件到lib中。 linux-gate.so.1文件是一個(gè)動(dòng)態(tài)共享對(duì)象(DSO),由內(nèi)核供給以加快系統(tǒng)調(diào)用,沒(méi)必要復(fù)制它。

  $ pwd

  /home/sam/jail

  $ mkdir bin lib

  $ cp /bin/bash bin

  $ ldd bin/bash

  linux-gate.so.1 => (0×00988000)

  libtinfo.so.5 => /lib/libtinfo.so.5 (0×0076b000)

  libdl.so.2 => /lib/libdl.so.2 (0×00afb000)

  libc.so.6 => /lib/libc.so.6 (0×00110000)

  /lib/ld-linux.so.2 (0×00923000)

  $ cp /lib/ lib

  此刻再次啟動(dòng)chroot jail。當(dāng)然一個(gè)通俗用戶可以完成所有設(shè)置,但必需利用root權(quán)限來(lái)運(yùn)行chroot:

  $ su

  Password:

  #/usr/sbin/chroot .

  bash-4.1# pwd

  /

  bash-4.1# ls

  bash: ls: command not found

  bash-4.1#

  這一次chroot查找并啟動(dòng)bash,顯示其默許的提示符(bash-4.1#)。pwd號(hào)令工作,因?yàn)樗且粋€(gè)shell內(nèi)置號(hào)令。但是,bash無(wú) 法找到ls號(hào)令,因?yàn)樗辉赾hroot jail中。假定想要jail中的用戶可以或許利用ls,可以把/bin/ls及其庫(kù)文件復(fù)制到j(luò)ail中。exit號(hào)令承諾你從jail退出。

  假定為chroot供給第二個(gè)參數(shù),它把該參數(shù)作為jail內(nèi)運(yùn)行的法度的名稱(chēng)。下面的號(hào)令與前一個(gè)等價(jià):

  # /usr/sbin/chroot /home/sam/jail /bin/bash

  要成立一個(gè)有效的chroot jail,起首要肯定chroot jail的用戶需要哪些合用法度。然后將響應(yīng)的二進(jìn)制文件及其庫(kù)文件復(fù)制到j(luò)ail中?;?,可以成立二進(jìn)制文件的靜態(tài)副本并把它們放進(jìn)jail中,無(wú)需 安裝伶仃的庫(kù)。(靜態(tài)鏈接二進(jìn)制文件大年夜大年夜超越其對(duì)應(yīng)的動(dòng)態(tài)二進(jìn)制文件。bash根基系統(tǒng)及其核心東西的范圍超越50兆字節(jié)。)你可以在bash和 coreutils SRPMS(源RPM)軟件包中找到最常常利用東西的源代碼。

  chroot合用法度將掉敗,除非以root權(quán)限運(yùn)行。以root權(quán)限運(yùn)行chroot的成果是一個(gè)root shell(具有root權(quán)限的shell)運(yùn)行在chroot jail內(nèi)。因?yàn)榫哂衦oot權(quán)限的用戶可以沖破chroot jail,當(dāng)務(wù)之急是在chroot jail中要以降落的特權(quán)運(yùn)行一個(gè)法度。

  有幾種編制可以降落用戶的特權(quán)。例如,可以把su或sudo放在jail中,然后啟動(dòng)shell或jail內(nèi)的守護(hù)法度,利用這些法度之一,來(lái)降落在jail中工作的用戶的特權(quán)。以下號(hào)令以jail中降落的特權(quán)啟動(dòng)一個(gè)shell:

  # /usr/sbin/chroot jailpath /bin/su user -c /bin/bash

  此中jailpath是jail目次的路徑名,和user是shell以特權(quán)運(yùn)行的用戶名。這類(lèi)環(huán)境下的標(biāo)題問(wèn)題是sudo和su調(diào)用PAM。要運(yùn)行這些實(shí) 用法度之一,需要把所有的PAM,包含它的庫(kù)和建設(shè)文件,與sudo (或 su)和/etc/passwd文件一路放在jail中?;?,可以從頭編譯su或sudo。但是,其源代碼調(diào)用PAM,所以需要點(diǎn)竄其源代碼以便它不調(diào) 用PAM。這些手藝既費(fèi)時(shí)又引進(jìn)了復(fù)雜性,從而導(dǎo)致不服安的jail。

  下面的C法度以降落的特權(quán)運(yùn)行chroot jail中的一個(gè)法度。因?yàn)樵摲ǘ仍谡{(diào)用chroot()之前獲得你在號(hào)令行上指定的用戶的UID和GID,不需要把/etc/passwd放進(jìn) jail。該法度降落了指定用戶的指定法度的特權(quán)。該法度為前面的標(biāo)題問(wèn)題供給了一個(gè)簡(jiǎn)單的解決方案,所以你可以實(shí)驗(yàn)chroot jail并更好地輿解其工作道理。

  $ cat uchroot.c

  /* See svn.gna.org/viewcvs/etoile/trunk/Etoile/LiveCD/uchroot.c for terms of use. */

  #include

  #include

  #include

  int main(int argc, char * argv[])

  {

  if(argc < 4)

  {

  printf("Usage: %s [arguments]n",

  argv[0]);

  return 1;

  }

  /* Parse arguments */

  struct passwd * pass = getpwnam(argv[1]);

  if(pass == NULL)

  {

  printf("Unknown user %sn", argv[1]);

  return 2;

  }

  /* Set the required UID */

  chdir(argv[2]);

  if(chroot(argv[2])

  ||

  setgid(pass->pw_gid)

  ||

  setuid(pass->pw_uid))

  {

  printf("%s must be run as root. Current uid=%d, euid=%dn",

  argv[0],

  (int)getuid(),

  (int)geteuid()

  );

  return 3;

  }

  return execv(argv[3], argv + 3);

  }

  以下號(hào)令的第一行利用cc(gcc軟件包)編譯uchroot.c,成立一個(gè)uchroot可履行文件。后續(xù)號(hào)令將uchroot移進(jìn)/usr/local/bin目次,并賜與響應(yīng)的所有權(quán)。

  $ cc -o uchroot uchroot.c

  $ su

  password:

  # mv uchroot /usr/local/bin

  # chown root:root /usr/local/bin/uchroot

  # exit

  $ ls -l /usr/local/bin/uchroot

  -rwxrwxr-x. 1 root root 5704 12-31 15:00 /usr/local/bin/uchroot

  利用本節(jié)前面的設(shè)置,履行下面的號(hào)令以chroot jail內(nèi)用戶sam的特權(quán)運(yùn)行一個(gè)shell:

  # /usr/local/bin/uchroot sam /home/sam/jail /bin/bash

  假定你打算擺設(shè)多個(gè)chroot jail,最好保留bin和lib目次的一個(gè)潔凈副本。

  3、運(yùn)行chroot Jail中的一個(gè)辦事

  運(yùn)行jail內(nèi)的shell,用處不大年夜。在實(shí)際中,你更可能要運(yùn)行jail內(nèi)的一個(gè)特定辦事。要運(yùn)行jail內(nèi)的辦事,確保該辦事所需的所有文件在jail內(nèi)。利用uchroot在chroot jail中啟動(dòng)一個(gè)辦事的號(hào)令格局為:

  # /usr/local/bin/uchroot user jailpath daemonname

  此中jailpath是jail目次的路徑名,user是運(yùn)行守護(hù)過(guò)程的用戶名,daemonname是供給辦事的守護(hù)過(guò)程的路徑名(jail內(nèi))。

  已設(shè)置了某些辦事器來(lái)操縱chroot jail。例如,可以設(shè)置DNS以便named運(yùn)行在jail中,和vsftpd FTP辦事器可覺(jué)得客戶端主動(dòng)啟動(dòng)chroot jail。

  4、安然性考慮

  有些辦事需要由具有root權(quán)限的用戶或過(guò)程來(lái)運(yùn)行,但一旦啟動(dòng)就釋放其root權(quán)限(例如Apache、Procmail和vsftpd)。假定運(yùn)行如許的辦事,沒(méi)必要利用uchroot或把su或sudo放進(jìn)jail內(nèi)。

  以root權(quán)限運(yùn)行的過(guò)程有可能從chroot jail退出。出于這個(gè)啟事,在啟動(dòng)一個(gè)運(yùn)行在jail內(nèi)的法度之前,應(yīng)當(dāng)降落特權(quán)。別的,慎重對(duì)待jail內(nèi)承諾的setuid二進(jìn)制文件—此中的安然 縫隙可能會(huì)危及jail的安然。別的,確保該用戶不克不及拜候他上傳到j(luò)ail的可履行文件。

------分隔線----------------------------

推薦內(nèi)容