成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用chroot保障開源系統服務安全

安全 網站安全
通過創建一個人工的根目錄,通常被稱為(chroot)jail,可以防止一個程序訪問、執行或修改(可能惡意)始自其根目錄層次結構之外的文件。

本文中,作者將為大家講述如何使用chroot保障開源系統服務安全。

1、主要功能

在早期的UNIX系統中,根目錄是文件系統中的一個固定點。在當前UNIX變體中,包括Linux,你可以在每個進程的基礎上定義根目錄。chroot實用程序程序允許你用根目錄(而非/)運行一個進程。

根目錄位于目錄層次結構的頂部,并且沒有父目錄。因此,一個進程無法訪問根目錄以上的文件,因為不存在。例如,如果運行一個程序(進程),指定其根目錄為/home/sam/jail,該程序沒有/home/sam中的任何文件的概念:jail是該程序的根目錄,并標記為/(不是jail)。

通過創建一個人工的根目錄,通常被稱為(chroot)jail,可以防止一個程序訪問、執行或修改(可能惡意)始自其根目錄層次結構之外的文件。你必須正確設置一個chroot jail以提高安全性:如果你沒有正確設置chroot jail,惡意用戶會比沒有chroot jail更容易獲得訪問系統的權限。

2、使用chroot

1)創建chrot jail

創建一個chroot jail很簡單:使用root權限,執行/usr/sbin/chroot directory命令。其中directory成為根目錄,該進程試圖運行默認shell。使用root權限,下面的命令在(現有的)/home/sam/jail目錄中設置一個chroot jail:

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

這個例子設置一個chroot jail,但是當系統試圖運行bash shell時,操作失敗。一旦設置了jail,名為jail的目錄將取代根目錄的名稱/。因此,chroot環境無法找到由/bin/bash路徑名標識的文件。在這種情況下chroot jail正常工作,但沒有用處。

讓chroot jail按你想要的方式工作是較為復雜的。要讓前面的例子在chroot jail中運行bash,在jail (/home/sam/jail/bin)中創建一個bin目錄并將/bin/bash復制這個目錄。由于bash二進制文件是到共享庫的動態鏈接,你還需要將這些庫文件(在lib中)復制到jail中。

2)一個具體的例子

下面的示例創建必要的目錄、復制bash、使用ldd來顯示bash依賴的共享庫以及復制必要的庫文件到lib中。 linux-gate.so.1文件是一個動態共享對象(DSO),由內核提供以加速系統調用,不必復制它。

$ 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/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux.so.2} lib

現在再次啟動chroot jail。雖然一個普通用戶可以完成所有設置,但必須使用root權限來運行chroot:

$ su
Password:
#/usr/sbin/chroot .
bash-4.1# pwd
/
bash-4.1# ls
bash: ls: command not found
bash-4.1#

這一次chroot查找并啟動bash,顯示其默認的提示符(bash-4.1#)。pwd命令工作,因為它是一個shell內置命令。然而,bash無法找到ls命令,因為它不在chroot jail中。如果想要jail中的用戶能夠使用ls,可以把/bin/ls及其庫文件復制到jail中。exit命令允許你從jail退出。

如果為chroot提供第二個參數,它把該參數作為jail內運行的程序的名稱。下面的命令與前一個等價:

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

要建立一個有用的chroot jail,首先要確定chroot jail的用戶需要哪些實用程序。然后將相應的二進制文件及其庫文件復制到jail中。或者,可以建立二進制文件的靜態副本并把它們放入jail中,無需安裝單獨的庫。(靜態鏈接二進制文件大大超過其對應的動態二進制文件。bash基本系統及其核心工具的規模超過50兆字節。)你可以在bash和coreutils SRPMS(源RPM)軟件包中找到最常用工具的源代碼。

chroot實用程序將失敗,除非以root權限運行。以root權限運行chroot的結果是一個root shell(具有root權限的shell)運行在chroot jail內。由于具有root權限的用戶可以突破chroot jail,當務之急是在chroot jail中要以降低的特權運行一個程序。

有幾種方法可以降低用戶的特權。例如,可以把su或sudo放在jail中,然后啟動shell或jail內的守護程序,使用這些程序之一,來降低在jail中工作的用戶的特權。以下命令以jail中降低的特權啟動一個shell:

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

其中jailpath是jail目錄的路徑名,以及user是shell以特權運行的用戶名。這種情況下的問題是sudo和su調用PAM。要運行這些實用程序之一,需要把所有的PAM,包括它的庫和配置文件,與sudo (或 su)和/etc/passwd文件一起放在jail中。或者,可以重新編譯su或sudo。然而,其源代碼調用PAM,所以需要修改其源代碼以便它不調用PAM。這些技術既費時又引入了復雜性,從而導致不安全的jail。

下面的C程序以降低的特權運行chroot jail中的一個程序。因為該程序在調用chroot()之前獲取你在命令行上指定的用戶的UID和GID,不需要把/etc/passwd放入jail。該程序降低了指定用戶的指定程序的特權。該程序為前面的問題提供了一個簡單的解決方案,所以你可以試驗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 {username} {directory} {program} [arguments]\n",
argv[0]);
return 1;
}
/* Parse arguments */
struct passwd * pass = getpwnam(argv[1]);
if(pass == NULL)
{
printf("Unknown user %s\n", 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=%d\n",
argv[0],
(int)getuid(),
(int)geteuid()
);
return 3;
}
return execv(argv[3], argv + 3);
}

以下命令的第一行使用cc(gcc軟件包)編譯uchroot.c,創建一個uchroot可執行文件。后續命令將uchroot移入/usr/local/bin目錄,并給予相應的所有權。

$ 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

使用本節前面的設置,執行下面的命令以chroot jail內用戶sam的特權運行一個shell:

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

如果你計劃部署多個chroot jail,最好保存bin和lib目錄的一個干凈副本。

3、運行chroot Jail中的一個服務

運行jail內的shell,用處不大。在現實中,你更可能要運行jail內的一個特定服務。要運行jail內的服務,確保該服務所需的所有文件在jail內。使用uchroot在chroot jail中啟動一個服務的命令格式為:

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

其中jailpath是jail目錄的路徑名,user是運行守護進程的用戶名,daemonname是提供服務的守護進程的路徑名(jail內)。

已經設置了某些服務器來利用chroot jail。例如,可以設置DNS以便named運行在jail中,以及vsftpd FTP服務器可以為客戶端自動啟動chroot jail。

4、安全性考慮

有些服務需要由具有root權限的用戶或進程來運行,但一旦啟動就釋放其root權限(例如Apache、Procmail和vsftpd)。如果運行這樣的服務,不必使用uchroot或者把su或sudo放入jail內。

以root權限運行的進程有可能從chroot jail退出。出于這個原因,在啟動一個運行在jail內的程序之前,應該降低特權。此外,慎重對待jail內允許的setuid二進制文件—其中的安全漏洞可能會危及jail的安全。此外,確保該用戶不能訪問他上傳到jail的可執行文件。

責任編輯:藍雨淚 來源: TechTarget中國
相關推薦

2013-11-12 09:56:03

系統服務安全TCP wrapper企業安全

2011-07-22 14:11:17

組策略

2010-05-24 19:31:48

SNMP服務

2010-07-16 12:10:15

2013-04-17 11:11:28

2022-09-08 15:36:07

物聯網安全物聯網網絡

2011-07-25 15:20:27

2013-12-02 15:54:34

2023-01-09 10:19:38

2022-06-14 15:06:08

Arch Linuxchroot 命令軟件包

2010-08-31 14:19:17

2023-05-23 12:28:04

2023-06-30 17:18:09

2017-11-16 15:14:54

2021-09-13 15:44:52

智慧城市大數據安全

2020-10-14 11:30:10

PHP網絡安全加密

2021-12-21 22:58:31

云計算云安全數字化轉型

2018-09-10 21:14:48

2013-05-17 11:03:26

2016-11-02 00:00:18

物聯網數據安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费久久网站 | 亚洲免费在线观看视频 | 综合久久综合久久 | 青青久草 | 男女羞羞视频网站 | 干出白浆视频 | 精品在线看 | 国产精品中文 | 国产不卡视频 | 99精品在线 | 亚洲精品久久久久中文字幕欢迎你 | 日韩欧美在线观看视频 | 91资源在线 | 久久一区二区三区四区 | 免费黄色大片 | 99久久精品国产毛片 | 国产欧美一区二区三区在线看蜜臀 | 国产精品国产三级国产aⅴ中文 | 狠狠综合久久av一区二区老牛 | 一区二区影视 | 亚洲精品欧美一区二区三区 | 中文字幕在线精品 | 国产激情在线 | 黄色一级免费 | 国产成人免费视频网站视频社区 | 国产伦精品一区二区三区在线 | 久久国产精品99久久久大便 | 国产亚洲区 | 91福利在线观看 | 亚洲日本免费 | 国产精品电影在线观看 | 亚洲韩国精品 | 国产区在线观看 | 亚洲国产成人精品久久久国产成人一区 | 国产精品一区在线 | 国产精品久久久久一区二区三区 | 狠狠艹 | 男女网站免费观看 | 午夜激情视频在线 | 日韩1区| 午夜丁香视频在线观看 |