国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Linux教學中進程之間通過特殊文件通信的解析*

2022-10-14 06:55龐偉業(yè)袁繼泉陳星宇
計算機時代 2022年10期
關鍵詞:鑒權同組命名

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

(蘭州理工大學計算機與通信學院,甘肅 蘭州 730050)

0 引言

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

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

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

本文從Linux 系統(tǒng)文件授權機制和安全保障機制出發(fā),結合用戶進程之間通信時的權限需求,介紹命名管道文件和套接字文件的使用,加深學生對Linux系統(tǒng)中進程之間通信中借用文件授權機制的認識,引導學生在實際中使用命名管道文件和套接字文件。

1 進程和進程通信

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

多個同時運行的進程之間經(jīng)常需要進行通信,常用的通信方式有鎖、信號量、消息隊列、共享內存、無名管道、命名管道、套接字等多種形式。進程之間通信時,如果不需要對參與通信的進程權限進行驗證,則根據(jù)實際需要選用鎖、信號量、消息隊列、共享內存、無名管道等通信方式中的一種通信方式即可;但是,如果需要對參與通信的進程進行權限驗證,則需要使用命名管道或套接字通信方式進行,這是因為命名管道或套接字通信方式可以使用文件系統(tǒng)完善的鑒權機制,實現(xiàn)不同用戶的進程之間通信時不同進程具有不同操作權限的功能。

2 文件系統(tǒng)鑒權機制

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

2.1 文件基本權限

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

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

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

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

文件的基本權限是不同用戶進程之間利用命名管道或者套接字通信時主要使用的權限。

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

2.2 文件擴展權限

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

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

2.3 文件屬性設置

文件屬性在文件基本權限基礎上,對文件自身和內容進行更近一步的保護,使用命令chattr 設置文件屬性,命令lsattr查看文件的屬性。

文件屬性對命名管道文件和套接字文件無效,因此,進程之間利用命名管道或者套接字通信時不能使用文件屬性的設置。

2.4 操作控制列表設置

操作控制列表在文件基本權限基礎上,對文件的操作權限作更細致的設置,用命令setfacl 設置文件的操作控制列表,用命令getfacl 查看文件操作控制列表的設置。例如命令:setfacl -m user1:rw a1.txt,設置用戶user1擁有對文件a1.txt的讀寫權限。

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

3 不同用戶進程之間通過命名管道通信實例

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

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

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

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

3.2 命名管道文件的使用

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

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

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

上述user1和user2通過命名管道通信成功。

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

再次讓user1和user2通過命名管道通信,user2運行接收消息的程序時,會收到“PermissionError:[Errno 13]Permission denied: '/home/user1/pipe1'”錯誤提示,這表示用戶對pipe1文件沒有相應的操作權限。

user1運行命令chmod或者setfacl,使得user2擁有對文件pipe1 的讀權限,此時,user1 和user2 通過命名管道的通信會再次成功。

4 不同用戶進程之間通過套接字通信實例

進程之以套接字方式通信時,套接字文件需要服務端新建,因此,同一用戶的進程之間通過套接字通信時,不存在文件權限的問題。而不同用戶的進程之間通信時,會因為客戶端對新建的套接字文件無寫權限而導致通信失敗,因此,不同進程之間通過套接字通信時,在套接字文件建立后,需要使用chmod 或者setfacl 命令,給客戶端進程的用戶授權套接字文件的寫權限。

假設用戶user1 的進程為服務端,用戶user2 的進程為客戶端,兩者之間通過套接字通信,服務端Python代碼如下:

該段程序第四行引入os 模塊,是因為需要修改套接字文件的操作權限;第五行設定進程之間使用套接字文件通信;第六行會自動創(chuàng)建套接字文件a.socket,若a.socket 已經(jīng)存在,則會出錯;第七行調用os 模塊的system 函數(shù),使用命令setfacl 給user2 賦予套接字文件a.socket 的讀寫權限;第23 行調用os 模塊的system 函數(shù),使用命令rm刪除使用完畢的套接字文件a.socket??蛻舳薖ython代碼如下。

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

User1 和user2 通過套接字方式通信時,若用戶user1 或user2 對套接字文件a.socket 無讀寫權限時,程序執(zhí)行將會出錯。

5 結束語

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

猜你喜歡
鑒權同組命名
命名——助力有機化學的學習
新知
有一種男人以“暖”命名
基于小型核心網(wǎng)的LTE鑒權的一種新實現(xiàn)
河鲀命名小考
電信增值業(yè)務運營中的認證鑒權控制方案研究
基于安全機制的SQN同步的研究和實現(xiàn)
乐昌市| 平原县| 长岛县| 余江县| 城市| 神农架林区| 宁远县| 郎溪县| 巩留县| 兴化市| 冕宁县| 神农架林区| 保德县| 凤凰县| 阿图什市| 固阳县| 依安县| 定远县| 利辛县| 新河县| 江油市| 泾川县| 双柏县| 威远县| 道孚县| 辉县市| 文安县| 古浪县| 慈利县| 黎城县| 高陵县| 宜兴市| 绥江县| 苏尼特左旗| 麦盖提县| 安仁县| 灵武市| 徐汇区| 稷山县| 南充市| 宜阳县|