新聞中心
linux bound模式(也稱為seccomp)是Linux內(nèi)核在2.6.12版本中引入的一種安全增強(qiáng)功能,它的主要作用是可以限制進(jìn)程只能執(zhí)行少量的系統(tǒng)調(diào)用,減小攻擊面和提高應(yīng)用的安全性。本文將詳細(xì)講解Linux Bound模式的原理、應(yīng)用場(chǎng)景和使用方法。

一、Linux Bound模式的原理
Linux Bound模式是通過鉤子函數(shù)來實(shí)現(xiàn)的,鉤子函數(shù)是用于攔截系統(tǒng)調(diào)用的特殊函數(shù),它可以在系統(tǒng)調(diào)用接口被攻擊前進(jìn)行審查和修改,從而達(dá)到防范惡意攻擊的目的。當(dāng)一個(gè)進(jìn)程進(jìn)入Linux Bound模式后,它只能執(zhí)行指定的系統(tǒng)調(diào)用,所有未指定的調(diào)用將會(huì)被忽略而不是被執(zhí)行。此外,Linux Bound模式還可以過濾一些危險(xiǎn)的系統(tǒng)調(diào)用,如execve、fork、clone等,這些調(diào)用在惡意攻擊中被廣泛利用。
二、Linux Bound模式的應(yīng)用場(chǎng)景
1. 容器
在容器技術(shù)中,Linux Bound模式非常常用,通過限制容器中進(jìn)程的系統(tǒng)調(diào)用權(quán)限,可以保證容器中進(jìn)程只能訪問自己需要的資源和服務(wù),而不能訪問其他不必要的資源和服務(wù),從而增加容器的安全性,防止容器被攻擊和濫用。
2. Web服務(wù)器
Web服務(wù)器通常被用于托管web應(yīng)用,它需要處理大量的請(qǐng)求,而且訪問權(quán)限也比較敏感。如果Web服務(wù)器遭到攻擊,攻擊者可能會(huì)獲得服務(wù)器的控制權(quán),進(jìn)而竊取網(wǎng)站的敏感信息或者對(duì)服務(wù)器進(jìn)行濫用。因此,在Web服務(wù)器中使用Linux Bound模式是非常必要的,可以有效的減小攻擊面,增加服務(wù)器的安全性。
三、Linux Bound模式的使用方法
Linux Bound模式可以通過兩種方式來使用,一種是通過設(shè)置系統(tǒng)當(dāng)前的行為模式,另一種是通過為進(jìn)程設(shè)置行為模式。
設(shè)置系統(tǒng)的行為模式:
1. 將Linux Bound模式的默認(rèn)行為模式設(shè)置為嚴(yán)格模式。
echo ‘2’ > /proc/sys/kernel/seccomp/actions_avlable
echo ‘2’ > /proc/sys/kernel/seccomp/actions_logged
echo ‘seccomp’ > /proc/self/status
2. 將Linux Bound模式的默認(rèn)行為模式設(shè)置為過渡模式。
echo ‘1’ > /proc/sys/kernel/seccomp/actions_avlable
echo ‘1’ > /proc/sys/kernel/seccomp/actions_logged
echo ‘seccomp’ > /proc/self/status
為進(jìn)程設(shè)置行為模式:
1. 使用libseccomp庫(kù)
libseccomp是一個(gè)使用C語(yǔ)言編寫的用戶態(tài)庫(kù),可以方便地為進(jìn)程設(shè)置行為模式。 使用步驟如下:
1) 創(chuàng)建一個(gè)seccomp過濾器
int filterid = -1;
scmp_filter_ctx ctx;
ctx = seccomp_init(SCMP_ACT_ALLOW);
2) 添加需要允許的系統(tǒng)調(diào)用
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0);
3) 指定默認(rèn)的行為
seccomp_attr_set(ctx, SCMP_FLTATR_CTL_NNP, 0);
4) 安裝過濾器
filterid = seccomp_load(ctx);
seccomp_release(ctx);
2. 使用Docker
Docker是目前更流行的容器技術(shù),它在實(shí)現(xiàn)容器隔離的同時(shí),也支持設(shè)置Linux Bound模式。我們可以使用Docker的–security-opt參數(shù)來設(shè)置容器的行為模式,將它設(shè)置為seccomp嚴(yán)格模式即可。
docker run –security-opt seccomp=seccomp-strict image-name
Linux Bound模式是一種非常有效的安全增強(qiáng)功能,它可以減小進(jìn)程的攻擊面,提高應(yīng)用的安全性。在容器、Web服務(wù)器等領(lǐng)域中,它的應(yīng)用非常廣泛。在使用Linux Bound模式的時(shí)候,一定要根據(jù)自己的需求和環(huán)境來選擇合適的模式,并且保證配置的正確性和安全性。
相關(guān)問題拓展閱讀:
- 如何在linux上配置ftp 及創(chuàng)建 ftp用戶
- Linux下用C語(yǔ)言寫一個(gè)FTP系統(tǒng)程序,基于客戶/服務(wù)器模式
- 研究生課題 linux內(nèi)核怎么樣
如何在linux上配置ftp 及創(chuàng)建 ftp用戶
請(qǐng)搜索你的LINUX 版本+你要用的FTP版本
網(wǎng)上從來不缺這樣的教橡瞎輪程.
不梁信同的神則版本的LINUX 不同的FTP,具體操作過程不同.
在Internet上FTP(File Transfer Protocol,文件傳輸協(xié)議)扮 演著十分重要的角色。我們可以通過FTP與遠(yuǎn)程機(jī)器傳輸交換文件數(shù) 據(jù),下載或上傳最新的軟件?;镜腇TP服務(wù)器根據(jù)服務(wù)的對(duì)象神困可以分為兩 種,一種是Unix(當(dāng)然也包括Linux)系統(tǒng)基本的FTP服務(wù)器,使用者是服務(wù)器上合法的 用戶;而另一種是匿名FTP服務(wù)器(Anonmous FTP Service),任何人只要使用anonmous或ftp帳號(hào)并提供電子郵件地址作為口令就可以使用FTP服務(wù)。
對(duì)于系統(tǒng)中合法的用戶,其登錄目錄為他們的home目錄;如果是匿名用戶登錄的話,登錄后會(huì)到/home/ftp這個(gè)目錄中,該除非我們?cè)谠撃?錄中存放下載文件,否則匿名FTP使用者將不能做任何事情。在本章,我們將詳細(xì)地介紹FTP服務(wù)器的安裝、配置以及服務(wù) 器的維護(hù)。
安裝FTP服務(wù)器
在Linux的發(fā)行套件中都有FTP服務(wù)器的軟件包wu-ftpd(Washington University FTP server),這是目前更流行的一種免費(fèi)FTP服務(wù)器軟件,目前絕大多數(shù)的FTP站點(diǎn)都是由wu-ftpd來架設(shè)的,而wu-ftp如此流行的原因是因 為它強(qiáng)大的功能,例如:
·可控制不同網(wǎng)域的機(jī)器對(duì) FTP服務(wù)器的存取權(quán)限和訪問時(shí)段。
·使用者在下載文件時(shí),可自動(dòng)對(duì)文件進(jìn) 行壓縮或解壓縮工作。
·可以記錄文件上傳或下載的過程。
·可以限制更高訪問人數(shù),以維持系統(tǒng)的更佳運(yùn)行效率。
·可顯示相關(guān)的信息,以便用戶了解當(dāng)前的接收狀態(tài)。
·可暫時(shí)關(guān)閉FTP服務(wù)器,以便系統(tǒng)維護(hù)。
在安裝系統(tǒng)時(shí)如果選擇了wu-ftpd軟件包,就會(huì)自動(dòng)安裝。但如果我們想要使用最新的FTP軟件包的話,可以到全世界各大FTP站點(diǎn)下載。目 前最新的版本是wu-ftpd-2.5.0,得到了wu-ftpd-2.5.0.tar.gz后,請(qǐng)按照我們下面的步驟進(jìn)行安裝。
1.將wu-ftpd-2.5.0.tar.gz復(fù)制到臨時(shí)目錄中并解壓縮:
# tar zxvf wu-ftpd-2.5.0.tar.gz
進(jìn)入解壓縮產(chǎn)生的目錄wu-ftpd-2.5.0中,在開始安裝之前請(qǐng)仔細(xì)閱讀里面的README、INSTALL等文件,以便了解安裝需要注 意的事項(xiàng)。
2.執(zhí)行命令“bulid lnx”,編譯wu-ftpd-2.5.0的源程序。
# ./bulid lnx
這條命令將編譯Linux系統(tǒng)使用wu-ftpd所需的服務(wù)程序,如果一切正常的話,將產(chǎn)生如下幾個(gè)可執(zhí)行文件:
ftpd FTP服務(wù)程序
ftpshut 關(guān)閉FTP服務(wù)的程序
ftpcount 顯示FTP 服務(wù)器目前連接的人數(shù)的程序
ftpwho 查看目前使用者
3.執(zhí)行安裝命令“make install”,將編譯生成的可執(zhí)行文件和man pages安裝到系統(tǒng)中。
# make install
4. 修改/etc/inetd.conf文件,加入如下一行:
ftp stream tcp nowait root /usr/in/tcpd in.ftpd -l –a
如果系統(tǒng)中以前安裝有wu-ftpd的話,這一步可以略去不做,安裝安裝程序會(huì)自動(dòng)更新/etc/inetd.conf文件有關(guān)ftp的記錄 項(xiàng)。
5.如果想為FTP用戶提供敏碧壓縮解壓縮的功能,我們還需要將tar、gzip、compress、cpio、sh等可執(zhí)游拿念行文件復(fù)制到/home /ftp/bin目錄下。此外,還需要將ls命令復(fù)制到/home/ftp/bin中,以便使用者查看目錄。
因?yàn)槲覀儚?fù)制到/home/ftp/bin目錄下的程序有可能是動(dòng)態(tài)鏈接的,所以它們運(yùn)行時(shí)還需要共享函數(shù)庫(kù),我們要將他們運(yùn)行時(shí)需要用到的共 享庫(kù)復(fù)制到/home/frp/lib目錄中。檢查這些命令所需要的共享庫(kù)可以使用“l(fā)dd”命令。例如對(duì)于“l(fā)s”命令,我們使用“l(fā)dd /usr/bin/ls”命令就可以得到如下的輸出:
# ldd /usr/bin/ls
libc.so.6 = > /lib/libc.so.6 ( 0x)
/lib/ld-linux.so.2 = > /lib/ld-linux.so.2 ( 0x)
這樣,我們就需要將/lib/libc.so.6和/lib/ld-linux.so.2復(fù)制到/home/ftp/lib目錄中。其它命令所 需的共享庫(kù)您也可以參照上面的方法找出并復(fù)制到/home/etc/lib目錄中。
接下來復(fù)制/etc/passwd和/etc/group文件到/home/ftp/etc,并刪除其中任何個(gè)人用戶和個(gè)人用戶組的信息?;?上應(yīng)該按照下面的例子修改:
#/home/ftp/etc/passwd文件
root:*:0:0:::
bin:*:1:1:::
operator:*:11:0:::
nobody:*:99:99:::
ftp:*:1000:1000:::
# /home/ftp/etc/group文件
root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::1000:
6.為了確保提供FTP服務(wù)不會(huì)給我們的系統(tǒng)帶來安全隱患,我們還需要采取以 下措施:
# chmod 0555 /home/ftp
# chmod 0111 /home/ftp/bin/*
# chmod 0555 /home/ftp/lib/*
# chmid 0444 /home/ftp/etc/*
配置FTP服務(wù)器
在安裝好wu-ftpd之后,我們還需要定制FTP服務(wù)器,使之實(shí)現(xiàn)我們上一節(jié)中提到的各種功能。為了使我們的FTP服務(wù)器實(shí)現(xiàn)這些功能,我們 需要修改ftpusers、ftpaccess、ftpconversions、xferlog、ftpgroups、ftphosts等系統(tǒng)配置文件。 下面我們就來看一看這些文件的功能以及配置它們的方法。
各配置文件的功能
在開始配置FTP服務(wù)器的配置文件之前,我們先來簡(jiǎn)要地介紹一下各個(gè)文件的功能。在開包后的wu-ftpd-2.5.0目錄中的 doc/examples目錄下,我們可以找到以下這些文件的示例。
/etc/ftpaccess 一般情況下,我們最為重視的配置文件應(yīng)該是“ftpaccess”,因?yàn)樵撐募Q定著我們FTP服務(wù)器是否能夠正常工作。此外,我們還可以在這個(gè)系統(tǒng)參數(shù) 文件中設(shè)置多項(xiàng)有關(guān)使用權(quán)限記錄,以及與信息有關(guān)的文件名稱及路徑。
/etc/ftpusers 決定哪些人不可以執(zhí)行ftp命令來傳輸文件,這些帳號(hào)通常是root、bin、news以及guest等有特殊用途的帳戶。
/etc/ftpconversions 配置該文件可以實(shí)現(xiàn)用戶在通過FTP傳輸文件的同時(shí),對(duì)文件進(jìn)行壓縮打包等處理。
/etc/ftphosts 決定哪些網(wǎng)絡(luò)中的主機(jī)或某些用戶不能訪問FTP服務(wù)器的文件。
/etc/ftpgroups 該文件不是決定哪些用戶組不能夠訪問FTP服務(wù)器,它只有在使用SITE GROUP功能時(shí)才有用。
/var/log/xferlog FTP日志文件。該文件將記錄使用匿名帳戶的用戶所上傳或下載的過的文件,該文件只是記錄FTP信息,我們不需要對(duì)它進(jìn)行配置。
大致了解了各個(gè)設(shè)置文件的功能以后,我們就來為您介紹這些文件中的內(nèi)容以及學(xué)習(xí)如何配置。
配置/etc/ftpaccess文件
我們前面介紹的wu-ftpd的大多數(shù)功能都是在ftpaccess文件中設(shè)置的。我們無(wú)須自己編寫該文件,doc/examples /ftpaccess.heavy是一個(gè)稍微修改一下就能適用于大多數(shù)FTP服務(wù)器的例子,所以下面我們將以這個(gè)示例文件為例為您介紹ftpaccess 文件的配置。
# wu-ftpd-2.5.0的/etc/ftpaccess示例文件ftpaccess.heavy
#
# 設(shè)置用戶登錄FTP服務(wù)器時(shí),允許輸錯(cuò)密碼的次數(shù)。
# loginfails 2表示允許用戶輸錯(cuò)兩次密碼,如果兩次都輸入
# 錯(cuò)誤的話,F(xiàn)TP服務(wù)器打印“repeated login failures”的信息
# 并退出FTP會(huì)話過程。如不設(shè)置,則缺省值是5。
#
loginfails 2
#
# class是用來定義用戶級(jí)別的命令,它的格式為
# class
# FTP服務(wù)器上有三種類型的使用者,分別是“real”——表示
# 在該FTP服務(wù)器上有合法帳號(hào)的用戶;“guest”——表示另行
# 定義的某些使用組的使用者;“anonymous”——權(quán)限更低的匿名
# 用戶。有了這三種使用者以后,在ftpaccess文件中就可以根據(jù)不
# 同的使用者設(shè)置不同的存取權(quán)限。但是,只有三種定義一般是不夠
# 的,我們可以根據(jù)class的語(yǔ)法定義更多的控制命令。例如:
# class remote real,guest,anonymous *
# 這條class語(yǔ)句定義了remote中有三種不同的使用者,“*”表示網(wǎng)絡(luò)
# 上所有的計(jì)算機(jī),也就是說任何人都可以訪問FTP服務(wù)器,一般的匿名
# FTP站點(diǎn)都應(yīng)該有這一項(xiàng)。如果我們希望某臺(tái)主機(jī)或網(wǎng)域中的機(jī)器具有
# 特殊的權(quán)限,那么我們可以設(shè)置如下的class:
# class local real,guest,anonymous localhost
# 這表示本地主機(jī)的類別被定義為local,當(dāng)我們從主機(jī)連上FTP服務(wù)器上
# 時(shí),就可以用較為特別的權(quán)限。
# 下面是ftpaccess.heavy文件指定的兩個(gè)class,它們的意思是來自*.domain
# 和本地主機(jī)被歸為local組,而其它的主機(jī)則是remote組。
#
class local real,guest,anonymous *.domain 0.0.0.0
class remote real,guest,anonymous *
#
# 我們可以使用limit命令設(shè)置某個(gè)時(shí)間段的FTP用戶數(shù)量,如果超出了
# 規(guī)定的人數(shù),則打印/etc/msgs/msgs.toomany文件并拒絕用戶登錄。例如:
# limit local 20 Any /etc/msgs/msgs.roomany
# 就是限制local這個(gè)組的機(jī)器同時(shí)間內(nèi)最多允許20人連接FTP服務(wù)器,如果
# 超員,則打印/etc/msgs/msgs.toomany文件,顯示當(dāng)前在線人數(shù)太多。ftp的
# 說明文件都可以包含變量,在說明文件中可以使用“變量替換(magic
# sookies)”以指定的字符串代替某個(gè)變量:
# %T 本地時(shí)間
# %F CWD所在分區(qū)的剩余空間
# %C 當(dāng)前工作目錄
# %E 定義在ftpaccess文件中維護(hù)者的電子郵件地址
# %R 遠(yuǎn)端主機(jī)名稱
# %L 本地主機(jī)名稱
# %U 登錄時(shí)所給的用戶名稱
# %M 該class允許的更大使用者數(shù)目
# %N 該class目前的使用者數(shù)目
#
# 我們可以利用這些變量編輯一個(gè)顯示信息非常完善的說明文件。下面的
# 例子是設(shè)置當(dāng)local用戶在任何時(shí)候不能超過20人,remote用戶在周六
# 周日的18:00到6:00不能超過100人,否則將顯示/etc/msgs目錄下的
# msg.toomany文件的內(nèi)容。
#
limit local 20 Any /etc/msgs/msg.toomany
limit remote 100 SaSu|Any/etc/msgs/msg.toomany
limit remote 60 Any /etc/msgs/msg.toomany
#
# readme命令的作用是指定用戶登錄或進(jìn)行其它操作(如更換目錄)時(shí)
# FTP服務(wù)器提示用戶閱讀的文件。
#
readme README* login
readme README* cwd=*
#
# messages命令主要是設(shè)置一些FTP的顯示信息,如下面的“message
# /welcome.msg login”就是代表用戶登錄時(shí),將顯示/home/ftp目錄下的
# welcome.msg作為進(jìn)站畫面。我們要提醒您的是FTP服務(wù)器都是以
# /home/ftp這個(gè)目錄作為根目錄的,所以要寫成/welcome.msg。而
# “message .message cwd=*”則是定義用戶在更換目錄時(shí)將顯示在目錄
# 下的文件。
#
message /welcome.msg login
message .message cwd=*
#
# 下面定義的允許從local和remote登錄的機(jī)器在傳輸文件時(shí),可執(zhí)行compress
# 壓縮文件或使用tar命令將多個(gè)文件打包成一個(gè)文件。
#
compress yes local remote
tar yes local remote
#
# 是否允許通過SITE GROUP和SITE GPASS命令適用秘密文件
# allow use of private file for SITE GROUP and SITE GPASS?
#
private yes
#
# 設(shè)置密碼檢查的規(guī)則。FTP服務(wù)器將要求匿名用戶使用其電子郵件
# 地址作為密碼,可是有人還是會(huì)胡亂輸入,所以我們可以使用passwd-check
# 來查看用戶是否輸入一個(gè)類似于user@hostname的E- mail地址:none表
# 示不進(jìn)行密碼檢查; trivial表示密碼必須含有“@”;而使用rfc822時(shí),
# 表示密碼必須滿足rfc822規(guī)定的地址。當(dāng)密碼不合要求時(shí),warn將給予
# 警告,但依然允許他們登錄,而enforce則表示警告并使用戶退出。
#
# passwd-check
passwd-check rfc822 warn
#
# log commands 記錄類型(可以是anonymous、
# guest和real)用戶使用的命令。Log transfer
# 記錄類型的用戶做的(可以為inbound傳進(jìn)服務(wù)器、
# outbound傳出服務(wù)器)方向的文件傳輸。
#
log commands real
log transfers anonymous,real inbound,outbound
#
# 如果shutdown指定的文件存在,F(xiàn)TP服務(wù)器將定期檢查文件
# 以查看服務(wù)器是否預(yù)定關(guān)閉。文件的格式為:
#
# 和的意思是在服務(wù)器關(guān)閉前多長(zhǎng)時(shí)間新的登錄
# 請(qǐng)求和現(xiàn)存的連接將被拒絕和終止。是對(duì)拒絕連接的用戶的一段信息。
# 如:
#:
# System shutdown at %s
# 表示1999年10月25日00:00關(guān)閉FTP服務(wù)器,10分鐘以前拒絕連接,5分鐘
# 以前中斷正在連接的FTP服務(wù)。外部程序ftpshut可以用來產(chǎn)生文件,
# 例如上面的文件可以通過如下的命令來產(chǎn)生:
# ftpshut 0000
#
shutdown /etc/shutmsg
#
# 設(shè)置用戶在FTP服務(wù)器上可以使用的命令,我們可以看到下面所有的
# 命令后面都是“no”,也就是說guest用戶不能使用delete、overwrite、
# rename命令,而anonymous則都不能使用。只有real用戶可以使用這些命令。
# all the following default to “yes” for everybody
#
delete no guest,anonymous # delete permission?
overwrite no guest,anonymous # overwrite permission?
rename no guest,anonymous # rename permission?
chmod no anonymous # chmod permission?
umask no anonymous # umask permission?
#
# 設(shè)置用戶上傳文件的目錄。下面例子中/var/ftp目錄下的/incoming目錄可以
# 用來上傳文件,上傳文件的屬主是root,組別是daemon,讀取權(quán)限是0600,
# dirs表示在/incoming目錄中可以創(chuàng)建子目錄。
# specify the upload directory information
#
upload /var/ftp * no nobody nogroup 0000 nodirs
upload /var/ftp /bin no
upload /var/ftp /etc no
upload /var/ftp /incoming yes root daemon 0600 dirs
#
# 為/incoming目錄設(shè)置路徑別名為inc:,用戶在任何時(shí)候只要使用命令
# “cd inc:”就可以到達(dá)/incoming目錄。
# directory aliases…
#
alias inc: /incoming
# cdpath主要定義在改變目錄時(shí)使用的搜索路徑。如果我們定義:
# cdpath /incoming/test、cdpath /pub、cdpath /,那么用戶在任意路徑
# 隨便cd到一個(gè)目錄,比如cd test,那么將依次搜尋:
# /incoming/test
# /pub/test
# /test
# 以尋找一個(gè)符合test目錄的路徑。
#
cdpath /incoming
cdpath /pub
cdpath /
#
# path-filter的功能是檢查用戶上傳文件的文件名是否合法,如下面
# 之一條命令就是指定所有的匿名用戶上傳文件的文件名只能是以
# A-Z、a-z、0-9以及“._-”組成,而不能以一個(gè)“.”或是一個(gè)“-”開始。
# 如果文件名不合法,將顯示/etc/pathmsg給該用戶。
#
path-filter anonymous /etc/pathmsg ^*$ ^. ^-
path-filter guest /etc/pathmsg ^*$ ^. ^-
#
# 設(shè)置guest用戶
# specify which group of users will be treated as “guests”.
#
guestgroup ftponly
#
# FTP服務(wù)器管理員的郵件地址
#
email user@hostname
以上是一些ftpaccess常用的設(shè)置,您也可以參考ftpaccess的man pagse來獲得更詳細(xì)的配置信息。
配置/etc/ftpusers和/etc/ftphosts文件
通過ftpusers文件,我們可以限制系統(tǒng)中有哪些用戶不能使用ftp服務(wù),ftphosts文件與之類似,所不同的是該文件中記錄的是不能 訪問FTP服務(wù)器的主機(jī)。通常這樣做的目的都是出于系統(tǒng)安全的考慮。Wu-ftpd 為我們準(zhǔn)備有這兩個(gè)文件的示例,我們可以在examples 目錄中找到它們。下面是ftpusers文件設(shè)置的例子:
# 禁止使用FTP服務(wù)的用戶
root
bin
boot
daemon
digital
field
gateway
guest
nobody
operator
ris
sccs
sys
uucp
限制這些用戶使用FTP服務(wù)器主要是基于系統(tǒng)安全的考慮,避免權(quán)利過大的用戶(如root、ftpadm)登錄FTP服務(wù)器和避免使用系統(tǒng)命令作為 帳號(hào)(如shutdown、sync),以避免系統(tǒng)管理上的困惑。我們可以根據(jù)自己使用的需要,向該文件中增加或刪除用戶并將它復(fù)制到/etc目錄中。
如果我們要架設(shè)的是匿名FTP服務(wù)器,那么通常不需要設(shè)置ftphosts文件,對(duì)于其它類型的FTP服務(wù)器可以參考 examples/ftphosts文件的格式結(jié)合自己的情況加以修改,然后復(fù)制到/etc目錄中即可。下面是examples/ftphosts文件, 該文件允許網(wǎng)絡(luò)somehost.domain中的用戶ftp訪問FTP服務(wù)器(somehost.domain可以是IP地址或域名)而禁止網(wǎng)絡(luò) otherhost.domain和網(wǎng)絡(luò)131.211.32.*中的用戶fred使用FTP服務(wù)。
#
# ftphosts文件配置示例,allow和deny的格式分別為:
# allow
# deny
#
# 以“#”開頭的均為注釋,空行將被忽略
#
allow ftp somehost.domain
deny fred otherhost.domain 131.211.32.*
配置/etc/ftpconversions文件
ftpconversions文件主要定義用戶從FTP服務(wù)器中下載文件時(shí)對(duì)文件進(jìn)行格式轉(zhuǎn)換的規(guī)則。例如壓縮、解壓縮、打包和開包等操作,這 樣用戶就不必為.tar.gz、.tgz、.Z、.z之類的文件傷腦筋了。Ftpconversions文件的格式初看上去很復(fù)雜,不過不用擔(dān) 心,/examples目錄中也有該文件的例子,我們只要原封不動(dòng)的將它復(fù)制到/etc目錄中就能滿足我們的使用需要了。下面讓我們來看看 ftpconversions文件中各個(gè)記錄項(xiàng),有關(guān)各項(xiàng)的說明我們羅列在表14-1中:
#
# ftpconversions文件示例
#
#
:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
: : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
: : :.tar:/bin/tar -c -f – %s:T_REG|T_DIR:O_TAR:TAR
: : :.tar.Z:/bin/tar -c -Z -f – %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
: : :.tar.gz:/bin/tar -c -z -f – %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
: : :.crc:/bin/cksum %s:T_REG::CKSUM
: : :.md5:/bin/md5sum %s:T_REG::MD5SUM
表1 ftpconversions文件各項(xiàng)說明對(duì)照表
真實(shí)文件名
目標(biāo)文件名
命令操作
.Z
傳遞前使用comprss –d命令壓縮
.gz
傳遞前使用gzip –d命令壓縮
.Z
傳遞前使用compress 命令壓縮
.gz
傳遞前使用gzip –9命令壓縮
.tar
傳遞前使用tar –cf命令打包
.tar.Z
傳遞前使用tar –cZf命令打包并壓縮
tar.gz
傳遞前使用tar –czf命令打包并壓縮
.tar.Z
傳遞前使用tar –cZf命令對(duì)目錄打包并壓縮
.tar.gz
傳遞前使用tar –czf命令對(duì)目錄打包并壓縮
Ftpconversions文件基本上把常用的壓縮,打包命令都包括在內(nèi)了,我們只要將它復(fù)制到/etc目錄中,以后只要有人訪問我們的 FTP服務(wù)器,F(xiàn)TP服務(wù)程序就會(huì)根據(jù)用戶的需要執(zhí)行壓縮或打包的命令。例如,用戶想下載目錄Howto中所有的文件,那么他不必使用mget命令,而只 要使用get Howto.tar.gz,這時(shí)wu-ftpd就會(huì)將該目錄打包壓縮并發(fā)送到用戶的機(jī)器上了。所以使用該文件可以完成壓縮傳遞的數(shù)據(jù)量,減少傳輸時(shí)間等作 用。此外ftpconversions文件中定義的可執(zhí)行文件的位置/bin指的都是/home/ftp/bin而不是Lnux /目錄下的bin,所以請(qǐng)檢查/home/ftp/bin目錄中有無(wú)上述命令,如果沒有還需要將這些程序復(fù)制到該目錄中。
截止到這里,匿名FTP服務(wù)器的架設(shè)工作基本上就完成了,我們可以用ftp命令連接自己的服務(wù)器,檢查合法用戶和匿名用戶的連接情況以及各個(gè)目 錄的權(quán)限是否正確。之后就可以準(zhǔn)備FTP服務(wù)的開張了。
查看全部更多資料去591cto
做一個(gè)虛擬賬戶就解決了:
步驟如下:
1、建立虛擬用戶口令庫(kù)文件
口令庫(kù)文件中奇數(shù)行設(shè)置用戶名,偶數(shù)行設(shè)置口令
# vi /etc/vsftpd/logins.txt 注意,一下是4行
upload 這個(gè)是帳戶蔽旁名
upload 這個(gè)是密碼
download
download
2、生成vsftpd的認(rèn)證文件
# db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
設(shè)置認(rèn)證文件只對(duì)用戶可讀可寫
# chmod 600 /etc/vsftpd/vsftpd_login.db
3、建立虛擬用戶所需的PAM配置文件
# vi /etc/pam.d/vsftpd.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
注意:以上2行中最后的2個(gè)文件名vsftpd_login和第2個(gè)步驟中的數(shù)據(jù)庫(kù)名字必須一致!
4、建立虛擬用戶所要訪問的目錄并設(shè)置相應(yīng)權(quán)限
# mkdir /home/ftpsite
# useradd -d /home/ftpsite virtual(用戶名)
# chown virtual:virtual /home/ftpsite
# chmod 700 /home/ftpsite/
5、設(shè)置vsftpd.conf配置文件
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
6、設(shè)置主配置文件
在vsftpd.conf文件中添加用戶配置文件目錄設(shè)置
user_config_dir=/etc/宏鉛橡vsftpd_user_conf
# service vsftpd restart
7、建立用戶配置文件目錄
使用mkdir命令建立用戶配置文件目錄
# mkdir /etc/vsftpd_user_conf
為虛擬用戶建立單獨(dú)的配置文激埋件,用戶配置文件名稱與用戶名相同
touch /etc/vsftpd_user_conf/upload
touch /etc/vsftpd_user_conf/download
8、每個(gè)FTP虛擬用戶都可以獨(dú)立設(shè)置其權(quán)限
vi /etc/vsftpd_user_conf/upload
anon_world_readable_only=NO 可讀可下載
anon_upload_enable=YES 可上傳
anon_mkdir_write_enable=YES 可創(chuàng)建和刪除文件夾
anon_other_write_enable=YES 可文件改名和刪除文件
local_root=/home/ftpsite/upload 指定upload的宿主目錄
download_enable=NO 禁止下載
Linux下用C語(yǔ)言寫一個(gè)FTP系統(tǒng)程序,基于客戶/服務(wù)器模式
請(qǐng)問那你是需要客戶端代碼還是服務(wù)器端代碼呢?
在絕大多數(shù)的LINUX發(fā)行版本中都選用的是WashingtonUniversity
FTP,它是一個(gè)著名的FTP服務(wù)器軟件,一般簡(jiǎn)稱為wu-ftp。它功能強(qiáng)大,能夠很好地運(yùn)行于眾多的UNIX操作系統(tǒng),例如:IBM
AIX、FreeBSD、HP-UX、NeXTstep、Dynix、SunOS、Solaris等。所以Internet上的FTP服務(wù)器,一大半以上采用了它。wu-ftp擁有許多強(qiáng)大的功能,很適于吞吐量較大的FTP服務(wù)器的管理要求:
1) 可以在用戶下載文件的同時(shí)對(duì)文件做自動(dòng)的壓縮或解壓縮操作;
2)
可以對(duì)不同網(wǎng)絡(luò)上的機(jī)器做不同的存取限制;
3) 可以記錄文件上載和下載時(shí)間;
4)
可以顯示傳輸時(shí)的相關(guān)信息,方便用戶及時(shí)了解目前的傳輸動(dòng)態(tài);
5) 可以設(shè)置更大連接數(shù),提高了效率,有效地控制了負(fù)載。
& 2.2 所需資源
&1.2.1
所需包
RedHat6.2 服務(wù)器安裝
&1.2.2
所需配置文件
/etc/ftpusers
/etc/ftpaccess
/var/run/ftp.pids
/etc/ftpconversions
/var/log/xferlog
/etc/ftpgroups
/etc/ftphosts
&1.2.3 相關(guān)命令
ftpd FTP服務(wù)器程序
ftpshut 用于關(guān)閉FTP服務(wù)器程序
ftpcount 顯示目前在線人數(shù)
ftpwho
查看目前FTP服務(wù)器的連接情況
ckconfig 檢查FTP服務(wù)器的設(shè)置是否正確
ftprestart
重新啟動(dòng)FTP服務(wù)
&1.2.4 相關(guān)目錄
/home/ftpd/bin
存放一些供FTP用戶使用的可執(zhí)行文件
/home/ftpd/etc
存放一些供FTP用戶使用的配置文件
/home/ftpd/pub 存放供下載的信息
/home/ftpd/incoming 存放閉伏供上載信息的空間
配置方案
1.
/etc/ftpaccess
說明: ftp權(quán)限配置文件
源文件:
guestuser weboa
# FTP用戶
class all real,guest,anonymous
*
class weboa guest *
# 格式:class
功能:
這個(gè)指令的功能設(shè)定FTP服務(wù)器上用戶的類別。并可對(duì)客戶端的IP地址進(jìn)行限制,允許某部分的IP地址或全部的IP地址訪問。而在FTP
服務(wù)器上的用戶基本上可以分為以下三類:
real 在該FTP服務(wù)器有合法帳號(hào)的用戶;
guest 有記錄的匿名用戶;
轎洞攜 anonymous 權(quán)限更低的匿名用戶
loginfails 5
# 格式:loginfails
功能:設(shè)定當(dāng)用戶登錄到FTP服務(wù)器時(shí),允許用戶輸錯(cuò)密碼的次數(shù)。
readme README* login
readme README* cwd=*
message /welcome.msg
login
message .message cwd=*
#
格式:message
功能:當(dāng)用戶執(zhí)行所指定的指令時(shí),系統(tǒng)將指定的文件內(nèi)容顯示出來。
顫基 compressyesall
# 格式:compress
功能:設(shè)置哪一個(gè)類別的用戶可以使用compress(壓縮)功能。
tar
yesall
# 格式:tar
功能:設(shè)置哪一個(gè)類別的用戶可以使用tar(歸檔)功能。
chmod no
guest,anonymous
# 格式:chmod
功能:
設(shè)置是否允許指定用戶使用chmod命令更改文件權(quán)限。默認(rèn)是
允許。
deleteyesall
# 格式:delete
功能:
設(shè)置是否允許指定用戶使用delete命令刪除文件。默認(rèn)是允許。
overwrite yes guest
#
格式:overwrite
功能:設(shè)置是否允許指定用戶覆蓋同名文件。默認(rèn)是允許。
rename yes guest
#
格式:rename
功能:設(shè)置是否允許指定用戶使用rename命令來為文件改名。默認(rèn)
是允許。
log
transfers anonymous,real inbound,outbound
# 格式:log transfers
功能:
設(shè)置哪些用戶的上載(inbound)和下載(outbound)操作做日志。
shutdown
/etc/shutmsg
# 格式:shutdown
功能:
FTP服務(wù)器關(guān)閉的時(shí)間可以設(shè)置在后面所指定的文件中,當(dāng)設(shè)
置的時(shí)間一到,便無(wú)法登錄FTP服務(wù)器了,要恢復(fù)的話只有將
這個(gè)文件刪掉。而這個(gè)文件必
須由指令/bin/ftpshut來生成。
passwd-check rfc822 warn
#
格式:passwd-check
功能:設(shè)定對(duì)匿名用戶anonymous的密碼使用方式。
none 表示不做密碼驗(yàn)證,任何密碼都可以登錄;
trival 表示只要輸入的密碼中含有字符“@ ” “Times New Roman”‘>就可以登錄;
rfc822 表示密碼一定要符合RFC822中所規(guī)定的E-Mail格式才
能登錄;
enfore 表示輸入的密碼不符合以上指定的格式就不讓登錄;
warn
表示密碼不符合規(guī)定時(shí)只出現(xiàn)警告信息,仍然能夠登錄。
limit remote 32 Any
/etc/ftpd/toomany.msg
# 格式:limit
功能:這個(gè)指令的功能為設(shè)置指定的時(shí)間內(nèi)指定的類別允許連接的
指定人數(shù)上限。當(dāng)達(dá)到上限的時(shí)候,顯示指定文件的內(nèi)容。
upload /home/ftpd * no
upload /home/ftpd /pub yes anonymous 0644 dirs
# 格式:upload
功能:對(duì)可以上載的目錄進(jìn)行更加詳細(xì)的設(shè)置。
alias incoming
/home/ftp/incoming
# 格式:alias
功能:給指定目錄設(shè)置一個(gè)別名,在切換目錄時(shí)就可以使用較短的
目錄別名。
2.
/etc/ftpusers
說明:FTP用戶黑名單,為了安全考慮,需要禁止以下用戶使用FTP
源文件:
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
在眾多的網(wǎng)絡(luò)應(yīng)用中,F(xiàn)TP(File Transfer
porotocol)有著非常重要的地位。在Internet中一個(gè)十分重要的資源就是軟件資源。而各種各樣的軟件資源大多數(shù)都是放在FTP服務(wù)器中的??梢哉f,F(xiàn)TP與WEB服務(wù)幾乎占據(jù)了整個(gè)Internet應(yīng)用的80%以上。
FTP服務(wù)可以根據(jù)服務(wù)對(duì)象的不同分為兩類:一類是系統(tǒng)FTP服務(wù)器,它只允許系統(tǒng)上的合法用戶使用;另一類是匿名FTP服務(wù)器,Anonymous
FTP Server,它使用任何人都可以登錄到FTP服務(wù)器上去獲取文件。
如果你在安裝LINUX系統(tǒng)的時(shí)候,在選擇啟動(dòng)進(jìn)程的時(shí)候選擇了“ftpd”這一項(xiàng)的話,安裝完LINUX系統(tǒng)后,它已經(jīng)將一個(gè)默認(rèn)的FTP服務(wù)器安裝到系統(tǒng)中去了。我們已經(jīng)可以利用它來實(shí)現(xiàn)系統(tǒng)FTP服務(wù)器的功能了。我們只需在此基礎(chǔ)上根據(jù)我們的需要進(jìn)行一些個(gè)性化設(shè)定就可以了。
研究生課題 linux內(nèi)核怎么樣
圖2-1顯示了基于x86計(jì)算機(jī)Linux系統(tǒng)的啟動(dòng)順序。之一步是BIOS從啟動(dòng)設(shè)備中導(dǎo)入主引導(dǎo)記錄(MBR),接下來MBR中的代碼查看分區(qū)表并從活動(dòng)分區(qū)讀取GRUB、LILO或SYSLINUX等引導(dǎo)裝入程序,之后引導(dǎo)裝入程序會(huì)加載壓縮后的內(nèi)核映像并將控制權(quán)傳遞給它。內(nèi)核取得控制權(quán)后,會(huì)將自身解壓縮并投入運(yùn)轉(zhuǎn)。
基于x86的處理器有兩種操作模式:實(shí)模式和保野橋數(shù)護(hù)模式。在實(shí)模式下,用戶僅可以使用1 MB內(nèi)存,并且沒有任何保護(hù)。保護(hù)模式要復(fù)雜得多,用戶可以使用更多的高級(jí)功能(如分頁(yè))。CPU 必須中途將實(shí)模式切換為保護(hù)模式。但是,這種切換是單向的,即不能從保護(hù)模式再切換回實(shí)模式。
內(nèi)核初始化的之一步是執(zhí)行實(shí)模式下的匯編代碼,之后執(zhí)行保護(hù)模式下init/main.c文件(上一章修改的源文件)中的 start_kernel()函數(shù)。start_kernel()函數(shù)首先會(huì)初始化CPU子系統(tǒng),之后讓內(nèi)存和進(jìn)程管理系統(tǒng)就位,接下來啟動(dòng)外部總線和 I/O設(shè)備,最后一步是激活初始化(init)程序,它是所有Linux進(jìn)程的父進(jìn)程。初始化進(jìn)程執(zhí)行啟動(dòng)必要的內(nèi)核服務(wù)的用戶空間腳本,并且最終派生控制臺(tái)終端程序以及顯示登錄(login)提示。
圖2-1 基于x86硬件上的Linux的啟動(dòng)過程
本節(jié)內(nèi)的3級(jí)標(biāo)題都是圖2-2中的一條打印頌首信息,這些信息來源于基于x86的筆記本 電腦的Linux啟動(dòng)過程。如果在其他體系架構(gòu)上啟動(dòng)內(nèi)核,消息以及語(yǔ)義可能會(huì)有所不同。
2.1.1 BIOS-provided physical RAM map
內(nèi)核會(huì)解析從BIOS中讀取到的系統(tǒng)內(nèi)存映射,并率先將以下信息打印出來:
BIOS-provided physical RAM map:
BIOS-e820:0009f000 (usable)
…
BIOS-e820:ff(reserved)
實(shí)模式下的初始化代碼通過使用BIOS的int 0x15服務(wù)并執(zhí)行0xe820號(hào)函數(shù)(即上面的BIOS-e820字符串)來獲得系統(tǒng)的內(nèi)存映射信息。內(nèi)存映射信息中包含了預(yù)留的和可用的內(nèi)存,內(nèi)核將隨后使用這些信息創(chuàng)建其可用的內(nèi)存池。在附錄B的B.1節(jié),我們會(huì)對(duì)BIOS提供的內(nèi)存映射問題進(jìn)行更深入的講解。
圖2-2 內(nèi)核啟動(dòng)信息
2.1.2 758MB LOWMEM available
896 MB以內(nèi)的常規(guī)的可被尋址的內(nèi)存區(qū)域被稱作低端內(nèi)存。內(nèi)存分配函數(shù)kmalloc()就是從該區(qū)域分配內(nèi)存的。高于896 MB的內(nèi)存區(qū)域被稱為高端內(nèi)存,只有在采用特殊的方式進(jìn)行映射后才能被訪問。
在啟動(dòng)過程中,內(nèi)核會(huì)計(jì)算并顯示這些內(nèi)存區(qū)內(nèi)總的頁(yè)數(shù)。
2.1.3 Kernel command line: ro root=/dev/hda1
Linux的引導(dǎo)裝入程序通常會(huì)給內(nèi)核傳遞一個(gè)命令行。命令行中的參數(shù)類似于傳遞給C程序中main()函數(shù)的argv列表,唯一的不同在于它們是傳遞給內(nèi)核的??梢栽谝龑?dǎo)裝入程序的配置文件中增加命令行參數(shù),當(dāng)然,也可以在運(yùn)行過程中修改引導(dǎo)裝入程消辯序的提示行。如果使用的是GRUB 這個(gè)引導(dǎo)裝入程序,由于發(fā)行版本的不同,其配置文件可能是/boot/grub/grub.conf或者是/boot/grub/menu.lst。如果使用的是LILO,配置文件為/etc/lilo.conf。下面給出了一個(gè)grub.conf文件的例子(增加了一些注釋),看了緊接著title kernel 2.6.23的那行代碼之后,你會(huì)明白前述打印信息的由來。
default 0 #Boot the 2.6.23 kernel by default
timeout 5 #5 second to alter boot order or parameters
title kernel 2.6.23 #Boot Option 1
#The boot image resides in the first partition of the first disk
#under the /boot/ directory and is named vmlinuz-2.6.23. ‘ro’
#indicates that the root partition should be mounted read-only.
kernel (hd0,0)/boot/vmlinuz-2.6.23 ro root=/dev/hda1
#Look under section “Freeing initrd memory:387k freed”
initrd (hd0,0)/boot/initrd
#…
命令行參數(shù)將影響啟動(dòng)過程中的代碼執(zhí)行路徑。舉一個(gè)例子,假設(shè)某命令行參數(shù)為bootmode,如果該參數(shù)被設(shè)置為1,意味著你希望在啟動(dòng)過程中打印一些調(diào)試信息并在啟動(dòng)結(jié)束時(shí)切換到runlevel的第3級(jí)(初始化進(jìn)程的啟動(dòng)信息打印后就會(huì)了解runlevel的含義);如果bootmode 參數(shù)被設(shè)置為0,意味著你希望啟動(dòng)過程相對(duì)簡(jiǎn)潔,并且設(shè)置runlevel為2。既然已經(jīng)熟悉了init/main.c文件,下面就在該文件中增加如下修改:
static unsigned int bootmode = 1 ;
static int __init
is_bootmode_setup( char * str)
{
get_option( & str, & bootmode);
return 1 ;
}
/* Handle parameter “bootmode=” */
__setup( ” bootmode= ” , is_bootmode_setup);
if (bootmode) {
/* Print verbose output */
/* … */
}
/* … */
/* If bootmode is 1, choose an init runlevel of 3, else
switch to a run level of 2 */
if (bootmode) {
argv_init = ” 3 ” ;
} else {
argv_init = ” 2 ” ;
}
/* … */
請(qǐng)重新編譯內(nèi)核并嘗試運(yùn)行新的修改。
2.1.4 Calibrating delay…1197.46 BogoMIPS (lpj=)
在啟動(dòng)過程中,內(nèi)核會(huì)計(jì)算處理器在一個(gè)jiffy時(shí)間內(nèi)運(yùn)行一個(gè)內(nèi)部的延遲循環(huán)的次數(shù)。jiffy的含義是系統(tǒng)定時(shí)器2個(gè)連續(xù)的節(jié)拍之間的間隔。正如所料,該計(jì)算必須被校準(zhǔn)到所用CPU的處理速度。校準(zhǔn)的結(jié)果被存儲(chǔ) 在稱為loops_per_jiffy的內(nèi)核變量中。使用loops_per_jiffy的一種情況是某設(shè)備驅(qū)動(dòng)程序希望進(jìn)行小的微秒級(jí)別的延遲的時(shí)候。
為了理解延遲—循環(huán)校準(zhǔn)代碼,讓我們看一下定義于init/calibrate.c文件中的calibrate_ delay()函數(shù)。該函數(shù)靈活地使用整型運(yùn)算得到了浮點(diǎn)的精度。如下的代碼片段(有一些注釋)顯示了該函數(shù)的開始部分,這部分用于得到一個(gè) loops_per_jiffy的粗略值:
loops_per_jiffy = ( 1 >= 1 ; /* This fixes the most significant bit and is
the lower-bound of loops_per_jiffy */
上述代碼首先假定loops_per_jiffy大于4096,這可以轉(zhuǎn)化為處理器速度大約為每秒100萬(wàn)條指令,即1 MIPS。接下來,它等待jiffy被刷新(1個(gè)新的節(jié)拍的開始),并開始運(yùn)行延遲循環(huán)__delay(loops_per_jiffy)。如果這個(gè)延遲循環(huán)持續(xù)了1個(gè)jiffy以上,將使用以前的loops_per_jiffy值(將當(dāng)前值右移1位)修復(fù)當(dāng)前l(fā)oops_per_jiffy的更高位;否則,該函數(shù)繼續(xù)通過左移loops_per_jiffy值來探測(cè)出其更高位。在內(nèi)核計(jì)算出更高位后,它開始計(jì)算低位并微調(diào)其精度:
loopbit = loops_per_jiffy;
/* Gradually work on the lower-order bits */
while (lps_precision — && (loopbit >>= 1 )) {
loops_per_jiffy |= loopbit;
ticks = jiffies;
while (ticks == jiffies); /* Wait until the start of the next jiffy */
ticks = jiffies;
/* Delay */
__delay(loops_per_jiffy);
if (jiffies != ticks)/* longer than 1 tick */
loops_per_jiffy &= ~ loopbit;
}
上述代碼計(jì)算出了延遲循環(huán)跨越j(luò)iffy邊界時(shí)loops_per_jiffy的低位值。這個(gè)被校準(zhǔn)的值可被用于獲取BogoMIPS(其實(shí)它是一個(gè)并非科學(xué)的處理器速度指標(biāo))??梢允褂肂ogoMIPS作為衡量處理器運(yùn)行速度的相對(duì)尺度。在1.6G Hz 基于Pentium M的筆記本 電腦上,根據(jù)前述啟動(dòng)過程的打印信息,循環(huán)校準(zhǔn)的結(jié)果是:loops_per_jiffy的值為。獲得BogoMIPS的方式如下:
BogoMIPS = loops_per_jiffy * 1秒內(nèi)的jiffy數(shù) * 延遲循環(huán)消耗的指令數(shù)(以百萬(wàn)為單位)
= (* HZ * 2 ) / ()
= (* 250 * 2 ) / ()
= 1197.46 (與啟動(dòng)過程打印信息中的值一致)
在2.4節(jié)將更深入闡述jiffy、HZ和loops_per_jiffy。
2.1.5 Checking HLT instruction
由于Linux內(nèi)核支持多種硬件平臺(tái),啟動(dòng)代碼會(huì)檢查體系架構(gòu)相關(guān)的bug。其中一項(xiàng)工作就是驗(yàn)證停機(jī)(HLT)指令。
x86處理器的HLT指令會(huì)將CPU置入一種低功耗睡眠模式,直到下一次硬件中斷發(fā)生之前維持不變。當(dāng)內(nèi)核想讓CPU進(jìn)入空閑狀態(tài)時(shí)(查看 arch/x86/kernel/process_32.c文件中定義的cpu_idle()函數(shù)),它會(huì)使用HLT指令。對(duì)于有問題的CPU而言,命令行參數(shù)no-hlt可以禁止HLT指令。如果no-hlt被設(shè)置,在空閑的時(shí)候,內(nèi)核會(huì)進(jìn)行忙等待而不是通過HLT給CPU降溫。
當(dāng)init/main.c中的啟動(dòng)代碼調(diào)用include/a-your-arch/bugs.h中定義的check_bugs()時(shí),會(huì)打印上述信息。
2.1.6 NET: Registered protocol family 2
Linux套接字(socket)層是用戶空間應(yīng)用程序訪問各種網(wǎng)絡(luò) 協(xié)議的統(tǒng)一接口。每個(gè)協(xié)議通過include/linux/socket.h文件中定義的分配給它的獨(dú)一無(wú)二的系列號(hào)注冊(cè)。上述打印信息中的Family 2代表af_inet(互聯(lián)網(wǎng)協(xié)議)。
啟動(dòng)過程中另一個(gè)常見的注冊(cè)協(xié)議系列是AF_NETLINK(Family 16)。網(wǎng)絡(luò)鏈接套接字提供了用戶進(jìn)程和內(nèi)核通信 的方法。通過網(wǎng)絡(luò)鏈接套接字可完成的功能還包括存取路由表和地址解析協(xié)議(ARP)表(include/linux/netlink.h文件給出了完整的用法列表)。對(duì)于此類任務(wù)而言,網(wǎng)絡(luò)鏈接套接字比系統(tǒng)調(diào)用更合適,因?yàn)榍罢呔哂胁捎卯惒綑C(jī)制、更易于實(shí)現(xiàn)和可動(dòng)態(tài)鏈接的優(yōu)點(diǎn)。
內(nèi)核中經(jīng)常使能的另一個(gè)協(xié)議系列是AF_Unix或Unix-domain套接字。X Windows等程序使用它們?cè)谕粋€(gè)系統(tǒng)上進(jìn)行進(jìn)程間通信。
2.1.7 Freeing initrd memory: 387k freed
initrd是一種由引導(dǎo)裝入程序加載的常駐內(nèi)存的虛擬磁盤映像。在內(nèi)核啟動(dòng)后,會(huì)將其掛載為初始根文件系統(tǒng),這個(gè)初始根文件系統(tǒng)中存放著掛載實(shí)際根文件系統(tǒng)磁盤分區(qū)時(shí)所依賴的可動(dòng)態(tài)連接的模塊。由于內(nèi)核可運(yùn)行于各種各樣的存儲(chǔ)控制器硬件平臺(tái)上,把所有可能的磁盤驅(qū)動(dòng)程序都直接放進(jìn)基本的內(nèi)核映像中并不可行。你所使用的系統(tǒng)的存儲(chǔ)設(shè)備的驅(qū)動(dòng)程序被打包放入了initrd中,在內(nèi)核啟動(dòng)后、實(shí)際的根文件系統(tǒng)被掛載之前,這些驅(qū)動(dòng)程序才被加載。使用 mkinitrd命令可以創(chuàng)建一個(gè)initrd映像。
2.6內(nèi)核提供了一種稱為initramfs的新功能,它在幾個(gè)方面較initrd更為優(yōu)秀。后者模擬了一個(gè)磁盤(因而被稱為 initramdisk或initrd),會(huì)帶來Linux塊I/O子系統(tǒng)的開銷(如緩沖);前者基本上如同一個(gè)被掛載的文件系統(tǒng)一樣,由自身獲取緩沖 (因此被稱作initramfs)。
不同于initrd,基于頁(yè)緩沖建立的initramfs如同頁(yè)緩沖一樣會(huì)動(dòng)態(tài)地變大或縮小,從而減少了其內(nèi)存消耗。另外,initrd要求你的內(nèi)核映像包含initrd所使用的文件系統(tǒng)(例如,如果initrd為EXT2文件系統(tǒng),內(nèi)核必須包含EXT2驅(qū)動(dòng)程序),然而initramfs不需要文件系統(tǒng)支持。再者,由于initramfs只是頁(yè)緩沖之上的一小層,因此它的代碼量很小。
用戶可以將初始根文件系統(tǒng)打包為一個(gè)cpio壓縮包,并通過initrd=命令行參數(shù)傳遞給內(nèi)核。當(dāng)然,也可以在內(nèi)核配置過程中通過 INITRAMFS_SOURCE選項(xiàng)直接編譯進(jìn)內(nèi)核。對(duì)于后一種方式而言,用戶可以提供cpio壓縮包的文件名或者包含initramfs的目錄樹。在啟動(dòng)過程中,內(nèi)核會(huì)將文件解壓縮為一個(gè)initramfs根文件系統(tǒng),如果它找到了/init,它就會(huì)執(zhí)行該頂層的程序。這種獲取初始根文件系統(tǒng)的方法對(duì)于嵌入式系統(tǒng)而言特別有用,因?yàn)樵谇度胧较到y(tǒng)中系統(tǒng)資源非常寶貴。使用mkinitramfs可以創(chuàng)建一個(gè)initramfs映像,查看文檔 Documentation/filesystems/ramfs- rootfs-initramfs.txt可獲得更多信息。
在本例中,我們使用的是通過initrd=命令行參數(shù)向內(nèi)核傳遞初始根文件系統(tǒng)cpio壓縮包的方式。在將壓縮包中的內(nèi)容解壓為根文件系統(tǒng)后,內(nèi)核將釋放該壓縮包所占據(jù)的內(nèi)存(本例中為387 KB)并打印上述信息。釋放后的頁(yè)面會(huì)被分發(fā)給內(nèi)核中的其他部分以便被申請(qǐng)。
在嵌入式系統(tǒng)開發(fā)過程中,initrd和initramfs有時(shí)候也可被用作嵌入式設(shè)備上實(shí)際的根文件系統(tǒng)。
2.1.8 io scheduler anticipatory registered (default)
I/O調(diào)度器的主要目標(biāo)是通過減少磁盤的定位次數(shù)來增加系統(tǒng)的吞吐率。在磁盤定位過程中,磁頭需要從當(dāng)前的位置移動(dòng)到感興趣的目標(biāo)位置,這會(huì)帶來一定的延遲。2.6內(nèi)核提供了4種不同的I/O調(diào)度器:Deadline、Anticipatory、Complete Fair Queuing以及NOOP。從上述內(nèi)核打印信息可以看出,本例將Anticipatory 設(shè)置為了默認(rèn)的I/O調(diào)度器。
2.1.9 Setting up standard PCI resources
啟動(dòng)過程的下一階段會(huì)初始化I/O總線和外圍控制器。內(nèi)核會(huì)通過遍歷PCI總線來探測(cè)PCI硬件,接下來再初始化其他的I/O子系統(tǒng)。從圖2-3中我們會(huì)看到SCSI子系統(tǒng)、USB控制器、視頻 芯片(855北橋芯片組信息中的一部分)、串行端口(本例中為8250 UART)、PS/2鍵盤 和鼠標(biāo) 、軟驅(qū) 、ramdisk、loopback設(shè)備、IDE控制器(本例中為ICH4南橋芯片組中的一部分)、觸控板、以太網(wǎng)控制器(本例中為e1000)以及PCMCIA控制器初始化的啟動(dòng)信息。圖2-3中 符號(hào)指向的為I/O設(shè)備的標(biāo)識(shí)(ID)。
圖2-3 在啟動(dòng)過程中初始化總線和外圍控制器
本書會(huì)以單獨(dú)的章節(jié)討論大部分上述驅(qū)動(dòng)程序子系統(tǒng),請(qǐng)注意如果驅(qū)動(dòng)程序以模塊的形式被動(dòng)態(tài)鏈接到內(nèi)核,其中的一些消息也許只有在內(nèi)核啟動(dòng)后才會(huì)被顯示。
2.1.10 EXT3-fs: mounted filesystem
EXT3文件系統(tǒng)已經(jīng)成為L(zhǎng)inux事實(shí)上的文件系統(tǒng)。EXT3在退役的EXT2文件系統(tǒng)基礎(chǔ)上增添了日志層,該層可用于崩潰后文件系統(tǒng)的快速恢復(fù)。它的目標(biāo)是不經(jīng)由耗時(shí)的文件系統(tǒng)檢查(fsck)操作即可獲得一個(gè)一致的文件系統(tǒng)。EXT2仍然是新文件系統(tǒng)的工作引擎,但是EXT3層會(huì)在進(jìn)行實(shí)際的磁盤改變之前記錄文件交互的日志。EXT3向后兼容于EXT2,因此,你可以在你現(xiàn)存的EXT2文件系統(tǒng)上加上EXT3或者由EXT3返回到EXT2 文件系統(tǒng)。
EXT3會(huì)啟動(dòng)一個(gè)稱為kjournald的內(nèi)核輔助線程(在接下來的一章中將深入討論內(nèi)核線程)來完成日志功能。在EXT3投入運(yùn)轉(zhuǎn)以后,內(nèi)核掛載根文件系統(tǒng)并做好“業(yè)務(wù)”上的準(zhǔn)備:
EXT3-fs: mounted filesystem with ordered data mode
kjournald starting. Commit interval 5 seconds
VFS: Mounted root (ext3 filesystem).
2.1.11 INIT: version 2.85 booting
所有Linux進(jìn)程的父進(jìn)程init是內(nèi)核完成啟動(dòng)序列后運(yùn)行的第1個(gè)程序。在init/main.c的最后幾行,內(nèi)核會(huì)搜索一個(gè)不同的位置以定位到init:
if (ramdisk_execute_command) { /* Look for /init in initramfs */
run_init_process(ramdisk_execute_command);
}
if (execute_command) { /* You may override init and ask the kernel
to execute a custom program using the
“init=” kernel command-line argument. If
you do that, execute_command points to the
specified program */
run_init_process(execute_command);
}
/* Else search for init or sh in the usual places .. */
run_init_process( ” /in/init ” );
run_init_process( ” /etc/init ” );
run_init_process( ” /bin/init ” );
run_init_process( ” /bin/sh ” );
panic( ” No init found. Try passing init= option to kernel. ” );
init會(huì)接受/etc/inittab的指引。它首先執(zhí)行/etc/rc.sysinit中的系統(tǒng)初始化腳本,該腳本的一項(xiàng)最重要的職責(zé)就是激活對(duì)換(swap)分區(qū),這會(huì)導(dǎo)致如下啟動(dòng)信息被打?。?/p>
Addingk swap on /dev/hda6
讓我們來仔細(xì)看看上述這段話的意思。Linux用戶進(jìn)程擁有3 GB的虛擬地址空間(見2.7節(jié)),構(gòu)成“工作集”的頁(yè)被保存在RAM中。但是,如果有太多程序需要內(nèi)存資源,內(nèi)核會(huì)釋放一些被使用了的RAM頁(yè)面并將其存儲(chǔ)到稱為對(duì)換空間(swap space)的磁盤分區(qū)中。根據(jù)經(jīng)驗(yàn)法則,對(duì)換分區(qū)的大小應(yīng)該是RAM的2倍。在本例中,對(duì)換空間位于/dev/hda6這個(gè)磁盤分區(qū),其大小為KB。
接下來,init開始運(yùn)行/etc/rc.d/rcX.d/目錄中的腳本,其中X是inittab中定義的運(yùn)行級(jí)別。runlevel是根據(jù)預(yù)期的工作模式所進(jìn)入的執(zhí)行狀態(tài)。例如,多用戶文本模式意味著runlevel為3,X Windows則意味著runlevel為5。因此,當(dāng)你看到INIT: Entering runlevel 3這條信息的時(shí)候,init就已經(jīng)開始執(zhí)行/etc/rc.d/rc3.d/目錄中的腳本了。這些腳本會(huì)啟動(dòng)動(dòng)態(tài)設(shè)備命名子系統(tǒng)(第4章中將討論 udev),并加載網(wǎng)絡(luò)、音頻、存儲(chǔ)設(shè)備等驅(qū)動(dòng)程序所對(duì)應(yīng)的內(nèi)核模塊:
Starting udev:
Initializing hardware… network audio storage
…
最后,init發(fā)起虛擬控制臺(tái)終端,你現(xiàn)在就可以登錄了。
關(guān)于linux bound模式的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
名稱欄目:詳解LinuxBound模式及其使用方法(linuxbound模式)
本文網(wǎng)址:http://fisionsoft.com.cn/article/cdspojs.html


咨詢
建站咨詢
