日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

20169210《Linux内核原理与分析》第十一周作业

發(fā)布時間:2025/6/17 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20169210《Linux内核原理与分析》第十一周作业 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第17章 設備與模塊

關于設備驅動和設備管理,討論四種內核成分。

  • 設備類型:在所有的linux系統(tǒng)中為了統(tǒng)一普遍設備的操作所分的類。
  • 模塊:Linux內核中用于按需加載和卸載目標碼的機制。
  • 內核對象:內核數據機構中支持面向對象的簡單操作,還支持維護對象間的父子關系。
  • sysfs:表示系統(tǒng)中設備樹的一個文件系統(tǒng)

一、設備類型

在Linux以及所有Unix系統(tǒng)中,設備被分為一下三種類型:

  • 塊設備
  • 字符設備
  • 網絡設備
  • 塊設備通常縮寫為blkdev,它是可尋址的,尋址以塊為單位,塊大小隨設備不同而不同;通常支持重定位操作,也就是對數據的隨機訪問。
  • 字符設備通??s寫為cdev,它是不可尋址的,僅提供數據的流式訪問。
  • 網絡設備最常見的類型有時也以以太網設備來稱呼,他提供了對網絡的訪問,這是通過一個物理適配器和一種特定的協(xié)議進行的。網絡設備是通過套接字API這樣的特殊接口來訪問的。
  • 二、模塊

    盡管Linux是“單塊內核”的操作系統(tǒng),這是說整個系統(tǒng)內核都運行于一個單獨的保護域中,但是Linux內核是模塊化組成的,它允許內核在運行時動態(tài)地向其中插入或從中刪除代碼。這些代碼被一并組合在一個單獨的二進制鏡像中,即所謂的可裝載內核模塊中,或簡稱模塊。支持模塊的好處是基本內核鏡像可以盡可能的小,因為可選的功能和驅動程序可以利用模塊形式再提供。模塊允許我們方便地刪除和重新載入內核代碼,也方便了調試工作。

    三、設備模型

  • 設備模型的核心部分就是kobject,類似于c#或Java這些面向對象語言中的對象類,提供了諸如引用計數、名稱和父指針等字段,可以創(chuàng)建對象的層次結構。
  • kobject對象被關聯(lián)到一種特殊的類型,即ktype。ktype的存在是為了描述一族kobject所具有的普遍特性。如此一來,不再需要每個kobject都分別定義自己的特性,而是將這些普遍特性在ktype結構中一次定義,然后所有同類的kobject都能共享一樣的特性。
  • kset是kobject對象的集合體。kset可把kobject集中到一個集合中,而ktype描述相關類型kobject所共有的特性,它們之間的重要區(qū)別在于:具有相同的ktype的kobject可以被分組到不同的kset。就是說,在Linux內核中,只有少數的ktype,卻有多個kset。
  • 四、sysfs

    sys文件系統(tǒng)是一個處于內存中的虛擬文件系統(tǒng),它為我們提供了kobject對象層次結構的視圖。
    sysfs的訣竅是把kobject對象與目錄項緊密聯(lián)系起來,這點是通過kobject對象中的denty字段實現的。

    第19章 可移植性

    關于字長和數據類型的一些準則:

    • ANSIC標準規(guī)定,一個char的長度一定是1字節(jié)
    • 盡管沒有規(guī)定int類型的長度是32位,但在Linux當前支持的體系結構中,它都是32位的。
    • short類型也類似,在當前所有支持的體系結構中,雖然沒有明文規(guī)定,但是它都是16位的。
    • 絕對不應該假定指針和long的長度,在linux當前支持的體系結構中,它們可以在32位和64位中變化。
    • 對于不同的體系結構long的長度不同,決不應該假設sizeof(int)=sizeof(long)。
    • 類似的,也不要假設指針和int長度相等。

    要想寫出移植性好、簡潔、合適的內核代碼,要注意以下兩點:

  • 編碼盡量選取最大公因子:假定任何事情都可能發(fā)生,任何潛在的約束都可能存在。
  • 編碼盡量選取最小公約數:不要假定給定的內核特性是可用的,僅僅需要最小的體系結構功能。

    編寫可移植性的代碼需要考慮很多問題:字長、數據類型、填充、對齊、字節(jié)次序、符號、字節(jié)順序、頁大小以及處理器的加載/存儲排序等。對于絕大多數的內核開發(fā)者來說,可能主要考慮的問題就是保證正確使用數據類型。

  • 第20章 補丁,開發(fā)和社區(qū)

    Linux編碼風格:

    • 縮進——縮進風格是用制表位每次縮進8個字符長度。
    • switch語句——switch語句下屬的case標記應該縮進到和switch聲明對齊,這樣有助于減少8個字符的tab鍵帶來的排版縮進。
    • 空格——Linux編碼風格規(guī)定,空格放在關鍵字周圍,函數名和圓括號之間無空格。
    • 花括號——內核選定的風格是左括號緊跟在語句的最后,與語句在相同的一行。而右括號要新起一行,作為該行的第一個字符。
    • 每行代碼的長度——源代碼中要盡可能地保證每行代碼長度不超過80個字符,因為這樣做可能使代碼最合適在標準的80*24的終端上顯示。
    • 命名規(guī)范——命名中不允許使用駱駝拼寫法、Studly Caps或者其他混合的大小寫字符。
    • 函數——根據經驗,函數的代碼長度不應該超過兩屏,局部變量不應超過10個。一個函數應該功能單一而且實現精確。
    • 注釋——一般情況下應該描述的是你的代碼要做什么和為什么要這樣做,而不是具體通過什么方式實現的。
    • typedef——使用typedef要謹慎,只有在確實需要的時候再使用它。
    • 多用現成的東西——請勿閉門造車。內核本身就提供了字符串操作函數,壓縮函數和一個鏈表接口,所以請使用他們。
    • 在源碼中減少使用ifdef——不贊成在源碼中使用ifdef預處理指令。
    • 結構初始化——結構初始化的時候必須在他的成員前加上結構標識符。
    • 代碼的事后修正——indent是一個在大多數Linux系統(tǒng)中都能找到的好工具,它可以按照指定的方式對源代碼進行格式化。

    實驗部分

    2014年9月24日,Bash中發(fā)現了一個嚴重漏洞shellshock,該漏洞可用于許多系統(tǒng),并且既可以遠程也可以在本地觸發(fā)。

    什么是shellshock:Shellshock,又稱Bashdoor,是在Unix中廣泛使用的Bash shell中的一個安全漏洞,首次于2014年9月24日公開。許多互聯(lián)網守護進程,如網頁服務器,使用bash來處理某些命令,從而允許攻擊者在易受攻擊的Bash版本上執(zhí)行任意代碼。Bash (GNU Bourne-Again Shell) 是許多Linux發(fā)行版的默認Shell。這可使攻擊者在未授權的情況下訪問計算機系統(tǒng)。

    實驗準備

    以root權限安裝4.1版bash

    下載:

    # wget http://labfile.oss.aliyuncs.com/bash-4.1.tar.gz

    安裝:

    # tar xf bash-4.1.tar.gz # cd bash-4.1 # ./configure # make & make install

    ./configure的作用是檢測系統(tǒng)配置,生成makefile文件,以便你可以用make和make install來編譯和安裝程序。

    鏈接:

    # rm /bin/bash # ln -s /usr/local/bin/bash /bin/bash


    到這里就安裝完了,接下來檢測是否存在shellshock漏洞。

    $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test "

    -c參數,則bash從字符串中讀入命令。bash -c "echo this is a test"在執(zhí)行的時候存在一個環(huán)境變量x,而x呢等于 () { :;}; echo vulnerable ,我們都知道環(huán)境變量在使用前都會被初始化,那么 () { :;}; echo vulnerable 就自然而然的被執(zhí)行了。 () { :;}; 定義了一個函數(function)并且它什么也不做,而后的 echo vulnerable 被解析后得到了執(zhí)行權。那么 echo vulnerable 換成其他更具破壞性的代碼后果就不堪設想了。

    輸出vulnerable的話,說明bash有漏洞。

    最后,讓/bin/sh 指向/bin/bash.

    $ sudo ln -sf /bin/bash /bin/sh

    -s是創(chuàng)建軟連接,-f是強制創(chuàng)建,軟連接相當于一個快捷方式。

    了解bash自定義函數,只需要函數名就能夠調用該函數。

    $ foo() { echo bar; } $ foo > bar

    這個時候的Bash的環(huán)境變量:

    KEY = foo VALUE = () { echo bar; }

    用$ echo 查看環(huán)境變量。
    來看看ShellShock漏洞的真身:

    export foo=’() { :; }; echo Hello World’ bash >Hello World

    export設置環(huán)境變量。

    為什么調用bash的時候輸出Hello World了呢?瞧瞧他內部的情況:

    KEY = foo VALUE = () { :; }; echo Hello World

    bash讀取了環(huán)境變量,在定義foo之后直接調用了后面的函數。 一旦調用bash,自定義的語句就直接觸發(fā)。

    攻擊Set-UID程序
    本實驗中,我們通過攻擊Set-UID程序來獲得root權限。Set-UID 是Unix系統(tǒng)中的一個重要的安全機制。當一個Set-UID程序運行的時候,它被假設為具有擁有者的權限。例如,如果程序的擁有者是root,那么任何人運行這個程序時都會獲得程序擁有者的權限。 一個文件都有一個所有者, 表示該文件是誰創(chuàng)建的。同時, 該文件還有一個組編號, 表示該文件所屬的組, 一般為文件所有者所屬的組。setuid: 設置使文件在執(zhí)行階段具有文件所有者的權限。典型的文件是 /usr/bin/passwd. 如果一般用戶執(zhí)行該文件, 則在執(zhí)行過程中, 該文件可以獲得root權限, 從而可以更改用戶的密碼。首先,確保安裝了帶有漏洞的bash版本,并讓/bin/sh 指向/bin/bash.

    $ sudo ln -sf /bin/bash /bin/sh

    請編譯下面這段代碼,并設置其為Set-UID程序,保證它的所有者是root。我們知道system()函數將調用"/bin/sh -c" 來運行指定的命令, 這也意味著/bin/bash 會被調用。

    #include <stdio.h> void main() {setuid(geteuid()); // make real uid = effective uid.system("/bin/ls -l"); }

    system:運行外部函數。real UID是標記誰調用了該可執(zhí)行文件;effective UID表示該可執(zhí)行程序所具有的權限的用戶;默認情況下real UID和effective UID一樣,但是當使用了setUID之后,兩者有可能不一樣。例如passwd程序,當你執(zhí)行這個程序的時候,它的real UID就是調用passwd的用戶,這個用戶可能是root,也可能是任何普通用戶;但是它的effective UID是root,只有這樣passwd程序才能修改/etc/passwd文件。

    我們注意到這里使用了setuid(geteuid()) 來使real uid = effective uid。

    如果 setuid(geteuid()) 語句被去掉了,再試試看攻擊,我們還能夠拿到權限么?

    #include <stdio.h> void main() {system("/bin/ls -l"); }

    失敗了!這就說明如果 real uid 和 effective uid 相同的話,定義在環(huán)境變量中的內容在該程序內有效,那樣shellshock漏洞就能夠被利用了。但是如果兩個uid不同的話,環(huán)境變量失效,就無法發(fā)動攻擊了。

    轉載于:https://www.cnblogs.com/crisgy/p/6130648.html

    總結

    以上是生活随笔為你收集整理的20169210《Linux内核原理与分析》第十一周作业的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中文字幕123| 亚洲午夜久久 | 姐姐的秘密韩剧免费观看全集中文 | 天天综合天天色 | 中文字幕av专区dvd | 灌篮高手全国大赛电影 | av黄网站 | 福利视频免费看 | 波多野结衣毛片 | 精品国产aⅴ一区二区三区东京热 | 蝌蚪网在线视频 | 91精品国产乱码久久久久 | 天天噜夜夜噜 | 日本女优网址 | 玉蒲团在线 | 欧美区日韩区 | 欧美丝袜一区二区三区 | 毛片在线免费播放 | 黑人精品一区二区三区 | 精品视频免费观看 | 欧美一区二区三区四区五区六区 | 亚洲福利在线播放 | 国产日韩中文 | 波多野结衣av无码 | av资源库| 成人免费91 | 人av在线 | 国产精品久久福利 | 欧美日韩一区二区在线 | 国产二级片 | 成年人免费在线 | 男人天堂手机在线观看 | 久久视频精品在线 | 久久精品国产露脸对白 | 日本免费一二区 | 欧美丰满熟妇bbbbbb百度 | 成年人小视频在线观看 | 日本一区二区观看 | 国产最新在线观看 | av大全在线播放 | 成年在线观看视频 | 爱情岛av永久入口 | 日韩精品第二页 | 国产成人精品综合在线观看 | 欧美一区二区三区婷婷 | 亚洲精品尤物 | 日韩第一页在线观看 | 亚洲第一av在线 | 亚洲激情网址 | 国产三级短视频 | 久久久资源 | 无码gogo大胆啪啪艺术 | 西西4444www大胆无视频 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 国产精品亚洲五月天丁香 | 国产三级伦理片 | 国产污视频 | 欧美理论在线观看 | 成人一区二区三区仙踪林 | 成人毛片在线免费观看 | 国产永久免费视频 | 欧美九九 | 拔插拔插海外华人免费视频 | 国产又爽又色 | 美女脱衣服一干二净 | 久久国产色av免费观看 | 黄色小说在线观看视频 | 三级网站在线看 | 国产亚洲精品久久久久久无几年桃 | 国产sm在线观看 | 欧美性猛交久久久久 | 欲色网站 | 日韩大片免费观看视频播放 | 少妇一级淫片免费播放 | 日韩欧美亚洲一区二区三区 | 国产精品久久777777毛茸茸 | 亚洲视频一区在线观看 | 一区二区视频免费观看 | 伦理片一区二区 | 亚洲熟悉妇女xxx妇女av | 免费视频爱爱太爽 | 日韩久久一级片 | 大白屁股一区二区视频 | 精品人妻无码专区在线 | 日韩久久不卡 | 视频在线播 | 日本三级中文字幕在线观看 | 美女网站视频在线观看 | a男人天堂 | 97日韩精品 | 天堂网亚洲 | 五月激情五月婷婷 | 久久久久亚洲AV成人网人人小说 | 香蕉影院在线观看 | 老子影院午夜伦不卡大全 | 国产毛片毛片 | 三上悠亚 电影 | 性欧美在线视频 | 中文字幕无码日韩专区免费 |