• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Linux教學(xué)中進(jìn)程之間通過(guò)特殊文件通信的解析*

      2022-10-14 06:55:06龐偉業(yè)袁繼泉陳星宇
      計(jì)算機(jī)時(shí)代 2022年10期
      關(guān)鍵詞:鑒權(quán)同組命名

      趙 宏,龐偉業(yè),袁繼泉,陳星宇

      (蘭州理工大學(xué)計(jì)算機(jī)與通信學(xué)院,甘肅 蘭州 730050)

      0 引言

      Linux 符 合POSIX(Portable Operating System Interface)標(biāo)準(zhǔn),功能強(qiáng)大,效率高,配置靈活且安全性高,具有豐富的工具軟件和應(yīng)用軟件,廣泛應(yīng)用在各行各業(yè),運(yùn)行在包括大型機(jī)、中型機(jī)、小型機(jī)、工作站、微機(jī)、嵌入式設(shè)備、可穿戴設(shè)備等各種機(jī)型和硬件平臺(tái)上,是開(kāi)放源代碼和自由軟件中的杰出代表,是我國(guó)開(kāi)發(fā)國(guó)產(chǎn)操作系統(tǒng)的主要依托。

      許多高校將Linux 相關(guān)內(nèi)容納入教學(xué),在信息類專業(yè)中開(kāi)設(shè)Linux 操作系統(tǒng)、Linux 系統(tǒng)內(nèi)核分析、Linux系統(tǒng)程序設(shè)計(jì)、Linux網(wǎng)絡(luò)編程等課程。

      在Linux 相關(guān)教學(xué)中,Linux 系統(tǒng)中的文件管理是核心內(nèi)容。大多數(shù)教科書列舉了Linux 中的文件類型,包括普通文件(-)、目錄文件(d)、字符設(shè)備文件(c)、塊設(shè)備文件(b)、符號(hào)鏈接文件(l)、命名管道文件(p)和套接字文件(s)等七種文件類型。對(duì)于前五種文件,一般都有詳細(xì)講解,有實(shí)例,對(duì)于后兩種文件均一帶而過(guò)。文獻(xiàn)[6]和文獻(xiàn)[7]對(duì)命名管道和套接字文件有較為詳細(xì)的介紹,用實(shí)例演示了這兩種文件的用法,但對(duì)于這兩種文件為什么會(huì)用于進(jìn)程之間的通信,未給出進(jìn)一步的說(shuō)明。

      本文從Linux 系統(tǒng)文件授權(quán)機(jī)制和安全保障機(jī)制出發(fā),結(jié)合用戶進(jìn)程之間通信時(shí)的權(quán)限需求,介紹命名管道文件和套接字文件的使用,加深學(xué)生對(duì)Linux系統(tǒng)中進(jìn)程之間通信中借用文件授權(quán)機(jī)制的認(rèn)識(shí),引導(dǎo)學(xué)生在實(shí)際中使用命名管道文件和套接字文件。

      1 進(jìn)程和進(jìn)程通信

      進(jìn)程是程序在數(shù)據(jù)集上運(yùn)行的過(guò)程,程序運(yùn)行中所需的系統(tǒng)資源,例如內(nèi)存、CPU 等,需要以進(jìn)程的身份進(jìn)行申請(qǐng),因此,進(jìn)程是獲得系統(tǒng)資源的基本單位。一個(gè)進(jìn)程的執(zhí)行過(guò)程可以看作是一個(gè)任務(wù)的執(zhí)行過(guò)程,多個(gè)進(jìn)程的同時(shí)執(zhí)行,可以看作是多個(gè)任務(wù)的同時(shí)執(zhí)行?,F(xiàn)代計(jì)算機(jī)操作系統(tǒng)都支持多進(jìn)程的同時(shí)執(zhí)行。多進(jìn)程的同時(shí)執(zhí)行分為并行、并發(fā)以和并行與并發(fā)的混合。并行就是不同的進(jìn)程同時(shí)執(zhí)行在不同CPU 或者不同核上。并發(fā)就是多個(gè)進(jìn)程以一定規(guī)則輪流在同一個(gè)CPU或者核上執(zhí)行,由于CPU執(zhí)行速度很快,盡管微觀上來(lái)看是多個(gè)進(jìn)程輪流執(zhí)行,但宏觀上卻表現(xiàn)出多個(gè)進(jìn)程的同時(shí)執(zhí)行。并行與并發(fā)的混合指多個(gè)進(jìn)程執(zhí)行時(shí)既有并行也有并發(fā),是現(xiàn)代多CPU或者多核計(jì)算機(jī)運(yùn)行的常見(jiàn)形式。

      多個(gè)同時(shí)運(yùn)行的進(jìn)程之間經(jīng)常需要進(jìn)行通信,常用的通信方式有鎖、信號(hào)量、消息隊(duì)列、共享內(nèi)存、無(wú)名管道、命名管道、套接字等多種形式。進(jìn)程之間通信時(shí),如果不需要對(duì)參與通信的進(jìn)程權(quán)限進(jìn)行驗(yàn)證,則根據(jù)實(shí)際需要選用鎖、信號(hào)量、消息隊(duì)列、共享內(nèi)存、無(wú)名管道等通信方式中的一種通信方式即可;但是,如果需要對(duì)參與通信的進(jìn)程進(jìn)行權(quán)限驗(yàn)證,則需要使用命名管道或套接字通信方式進(jìn)行,這是因?yàn)槊艿阑蛱捉幼滞ㄐ欧绞娇梢允褂梦募到y(tǒng)完善的鑒權(quán)機(jī)制,實(shí)現(xiàn)不同用戶的進(jìn)程之間通信時(shí)不同進(jìn)程具有不同操作權(quán)限的功能。

      2 文件系統(tǒng)鑒權(quán)機(jī)制

      Linux 主要使用Ext 系列文件系統(tǒng),Ext 系列文件系統(tǒng)具有完善的鑒權(quán)機(jī)制,分為基本權(quán)限、擴(kuò)展權(quán)限、文件屬性設(shè)置、操作控制列表等多級(jí)權(quán)限。進(jìn)程之間利用命名管道或者套接字通信時(shí),由于生成了相應(yīng)的管道文件和套接字文件,因此,可以使用文件系統(tǒng)的鑒權(quán)機(jī)制。

      2.1 文件基本權(quán)限

      讀權(quán)限和寫權(quán)限是文件基本權(quán)限。用單詞read的第一個(gè)字母r 表示文件“可讀”;用單詞write 的第一個(gè)字母w 表示文件“可修改/刪除”。還有文件的可執(zhí)行權(quán)限,用單詞execute的第二個(gè)字母x表示。

      文件的三種操作:文件主,表示擁有文件的用戶,用單詞user的第一個(gè)字母u 表示;同組用戶,表示與擁有文件的用戶屬于同一個(gè)組,用單詞group 的第一個(gè)字母g表示;其他用戶,表示與擁有文件的用戶不屬于同一個(gè)組,用單詞other的第一個(gè)字母o表示。

      對(duì)文件操作的三類用戶和文件的三種操作權(quán)限進(jìn)行組合,形成文件的基本操作屬性,分三組,每組三位。第一組表示文件主對(duì)文件的操作權(quán)限,第二組表示同組用戶對(duì)文件的操作權(quán)限,第三組表示其他用戶對(duì)文件的操作權(quán)限。每一個(gè)位置需要標(biāo)上操作權(quán)限,若沒(méi)有操作權(quán)限,用符號(hào)“-”表示。例如:rwxr-xr--,表示文件主對(duì)文件具有讀、寫和執(zhí)行權(quán)限;同組用戶對(duì)文件具有讀和執(zhí)行權(quán)限;其他用戶對(duì)文件僅有讀權(quán)限。

      文件的授權(quán)屬性經(jīng)常用9 位二進(jìn)制數(shù)記錄,有權(quán)限的位設(shè)為1,無(wú)權(quán)限的位設(shè)為0,轉(zhuǎn)換為三位八進(jìn)制數(shù)表示。例如:二進(jìn)制數(shù)111101100,轉(zhuǎn)換為八進(jìn)制為754,表示文件主對(duì)文件具有讀、寫和執(zhí)行權(quán)限;同組用戶對(duì)文件具有讀和執(zhí)行權(quán)限;其他用戶對(duì)文件僅有讀權(quán)限。

      文件的基本權(quán)限是不同用戶進(jìn)程之間利用命名管道或者套接字通信時(shí)主要使用的權(quán)限。

      1、品種選擇:應(yīng)根據(jù)本地區(qū)的生態(tài)環(huán)境條件,選用高產(chǎn)、優(yōu)質(zhì)、適應(yīng)性及抗病性強(qiáng)、生育期所需積溫比動(dòng)地常年活動(dòng)積溫少150℃的優(yōu)良品種。

      2.2 文件擴(kuò)展權(quán)限

      在文件基本權(quán)限的基礎(chǔ)上擴(kuò)展了SUID、SGID 和粘附位等,形成文件擴(kuò)展權(quán)限。其中,SUID 表示當(dāng)文件執(zhí)行時(shí),執(zhí)行該文件的用戶能夠在文件執(zhí)行期間獲得文件主的權(quán)限;SGID 表示當(dāng)文件執(zhí)行時(shí),執(zhí)行該文件的用戶在文件執(zhí)行期間擁有文件主所在主組用戶的權(quán)限;粘附位表示只有文件主和root 用戶才能刪除帶有該標(biāo)識(shí)的文件,其他用戶雖然有“w”權(quán)限,但仍然不能刪除帶有該標(biāo)識(shí)的文件。

      由于進(jìn)程之間利用命名管道或者套接字通信時(shí)主要在內(nèi)存中進(jìn)行數(shù)據(jù)交換,而文件擴(kuò)展權(quán)限主要用于文件執(zhí)行和刪除,因此,進(jìn)程之間利用命名管道或者套接字通信時(shí)一般不使用文件擴(kuò)展權(quán)限。

      2.3 文件屬性設(shè)置

      文件屬性在文件基本權(quán)限基礎(chǔ)上,對(duì)文件自身和內(nèi)容進(jìn)行更近一步的保護(hù),使用命令chattr 設(shè)置文件屬性,命令lsattr查看文件的屬性。

      文件屬性對(duì)命名管道文件和套接字文件無(wú)效,因此,進(jìn)程之間利用命名管道或者套接字通信時(shí)不能使用文件屬性的設(shè)置。

      2.4 操作控制列表設(shè)置

      操作控制列表在文件基本權(quán)限基礎(chǔ)上,對(duì)文件的操作權(quán)限作更細(xì)致的設(shè)置,用命令setfacl 設(shè)置文件的操作控制列表,用命令getfacl 查看文件操作控制列表的設(shè)置。例如命令:setfacl -m user1:rw a1.txt,設(shè)置用戶user1擁有對(duì)文件a1.txt的讀寫權(quán)限。

      不同用戶進(jìn)程之間利用命名管道或者套接字通信時(shí),可以使用文件的操作控制列表設(shè)置。

      3 不同用戶進(jìn)程之間通過(guò)命名管道通信實(shí)例

      3.1 命名管道文件的創(chuàng)建

      用戶user1 運(yùn)行以下Python 程序,創(chuàng)建屬于自己的命名管道文件pipe1。

      上述代碼調(diào)用模塊os 中的mkfifo()函數(shù),創(chuàng)建命名管道文件pipe1,如果pipe1文件已經(jīng)存在,則輸出捕獲到的“File exists”的異常。

      默認(rèn)情況下,命名管道文件pipe1 的操作權(quán)限為:rw-r--r--,即文件主對(duì)文件可讀可寫,同組用戶和其他用戶對(duì)文件可讀。

      3.2 命名管道文件的使用

      user1 通過(guò)命名管道發(fā)送消息,user2 通過(guò)命名管道接收消息。

      user1運(yùn)行下面的代碼,向命名管道文件寫入消息。

      user2運(yùn)行下面的代碼,從命名管道文件讀取消息。

      上述user1和user2通過(guò)命名管道通信成功。

      user1 運(yùn)行命令:chmod 600 pipe1,使得管道文件pipe1 的操作權(quán)限變?yōu)椋簉w----,即同組用戶和其他用戶對(duì)管道文件pipe1不再擁有任何操作權(quán)限。

      再次讓user1和user2通過(guò)命名管道通信,user2運(yùn)行接收消息的程序時(shí),會(huì)收到“PermissionError:[Errno 13]Permission denied: '/home/user1/pipe1'”錯(cuò)誤提示,這表示用戶對(duì)pipe1文件沒(méi)有相應(yīng)的操作權(quán)限。

      user1運(yùn)行命令chmod或者setfacl,使得user2擁有對(duì)文件pipe1 的讀權(quán)限,此時(shí),user1 和user2 通過(guò)命名管道的通信會(huì)再次成功。

      4 不同用戶進(jìn)程之間通過(guò)套接字通信實(shí)例

      進(jìn)程之以套接字方式通信時(shí),套接字文件需要服務(wù)端新建,因此,同一用戶的進(jìn)程之間通過(guò)套接字通信時(shí),不存在文件權(quán)限的問(wèn)題。而不同用戶的進(jìn)程之間通信時(shí),會(huì)因?yàn)榭蛻舳藢?duì)新建的套接字文件無(wú)寫權(quán)限而導(dǎo)致通信失敗,因此,不同進(jìn)程之間通過(guò)套接字通信時(shí),在套接字文件建立后,需要使用chmod 或者setfacl 命令,給客戶端進(jìn)程的用戶授權(quán)套接字文件的寫權(quán)限。

      假設(shè)用戶user1 的進(jìn)程為服務(wù)端,用戶user2 的進(jìn)程為客戶端,兩者之間通過(guò)套接字通信,服務(wù)端Python代碼如下:

      該段程序第四行引入os 模塊,是因?yàn)樾枰薷奶捉幼治募牟僮鳈?quán)限;第五行設(shè)定進(jìn)程之間使用套接字文件通信;第六行會(huì)自動(dòng)創(chuàng)建套接字文件a.socket,若a.socket 已經(jīng)存在,則會(huì)出錯(cuò);第七行調(diào)用os 模塊的system 函數(shù),使用命令setfacl 給user2 賦予套接字文件a.socket 的讀寫權(quán)限;第23 行調(diào)用os 模塊的system 函數(shù),使用命令rm刪除使用完畢的套接字文件a.socket??蛻舳薖ython代碼如下。

      用戶user1 運(yùn)行服務(wù)端代碼,用戶user2 運(yùn)行客戶端代碼,可以實(shí)現(xiàn)user2 將字符串通過(guò)套接字發(fā)送給user1,user1 將收到的字符串中的字母轉(zhuǎn)換為大寫后,返回給user2,user2接收轉(zhuǎn)換后的字符串并輸出。

      User1 和user2 通過(guò)套接字方式通信時(shí),若用戶user1 或user2 對(duì)套接字文件a.socket 無(wú)讀寫權(quán)限時(shí),程序執(zhí)行將會(huì)出錯(cuò)。

      5 結(jié)束語(yǔ)

      命名管道和套接字文件是Linux 系統(tǒng)中的重要文件類型,利用命名管道和套接字可以實(shí)現(xiàn)不同用戶進(jìn)程之間的通信,并且可以使用Linux 系統(tǒng)文件的鑒權(quán)。本文通過(guò)命名管道和套接字文件,分析不同用戶的進(jìn)程通信時(shí),借用文件系統(tǒng)鑒權(quán)機(jī)制的實(shí)例,幫助學(xué)生深入理解Linux系統(tǒng)。

      猜你喜歡
      鑒權(quán)同組命名
      命名——助力有機(jī)化學(xué)的學(xué)習(xí)
      新知
      有一種男人以“暖”命名
      東方女性(2018年3期)2018-04-16 15:30:02
      為一條河命名——在白河源
      移動(dòng)網(wǎng)絡(luò)用戶頻繁鑒權(quán)問(wèn)題的優(yōu)化方案探討
      基于小型核心網(wǎng)的LTE鑒權(quán)的一種新實(shí)現(xiàn)
      迎面踢毽接力
      電信增值業(yè)務(wù)運(yùn)營(yíng)中的認(rèn)證鑒權(quán)控制方案研究
      基于安全機(jī)制的SQN同步的研究和實(shí)現(xiàn)
      雷波县| 柘荣县| 玉溪市| 武山县| 诸城市| 曲靖市| 淄博市| 钦州市| 庐江县| 滨海县| 荆州市| 富平县| 达州市| 安龙县| 大理市| 新兴县| 平塘县| 科技| 林甸县| 扎兰屯市| 沁源县| 略阳县| 渑池县| 安仁县| 孟州市| 会昌县| 临城县| 白水县| 长垣县| 龙海市| 张家川| 河南省| 镇江市| 长岛县| 南丹县| 建瓯市| 阿勒泰市| 乌兰察布市| 南涧| 武宣县| 玉树县|