導航:首頁 > 操作系統 > linux密鑰環

linux密鑰環

發布時間:2022-12-31 06:43:05

① 怎樣才能提高linux系統安全性能

Linux不論在功能上、價格上或性能上都有很多優點,然而,作為開放式操作系統,它不可避免地存在一些安全隱患。關於如何解決這些隱患,為應用提供一個安全的操作平台,本文會告訴你一些最基本、最常用,同時也是最有效的招數。
Linux是一種類Unix的操作系統。從理論上講,Unix本身的設計並沒有什麼重大的安全缺陷。多年來,絕大多數在Unix操作系統上發現的安全問題主要存在於個別程序中,所以大部分Unix廠商都聲稱有能力解決這些問題,提供安全的Unix操作系統。但Linux有些不同,因為它不屬於某一家廠商,沒有廠商宣稱對它提供安全保證,因此用戶只有自己解決安全問題。

Linux是一個開放式系統,可以在網路上找到許多現成的程序和工具,這既方便了用戶,也方便了黑客,因為他們也能很容易地找到程序和工具來潛入Linux系統,或者盜取Linux系統上的重要信息。不過,只要我們仔細地設定Linux的各種系統功能,並且加上必要的安全措施,就能讓黑客們無機可乘。

一般來說,對Linux系統的安全設定包括取消不必要的服務、限制遠程存取、隱藏重要資料、修補安全漏洞、採用安全工具以及經常性的安全檢查等。本文教你十種提高Linux系統安全性的招數。雖然招數不大,但招招奏效,你不妨一試。

第1招:取消不必要的服務

早期的Unix版本中,每一個不同的網路服務都有一個服務程序在後台運行,後來的版本用統一的/etc/inetd伺服器程序擔此重任。Inetd是Internetdaemon的縮寫,它同時監視多個網路埠,一旦接收到外界傳來的連接信息,就執行相應的TCP或UDP網路服務。

由於受inetd的統一指揮,因此Linux中的大部分TCP或UDP服務都是在/etc/inetd.conf文件中設定。所以取消不必要服務的第一步就是檢查/etc/inetd.conf文件,在不要的服務前加上「#」號。

一般來說,除了http、smtp、telnet和ftp之外,其他服務都應該取消,諸如簡單文件傳輸協議tftp、網路郵件存儲及接收所用的imap/ipop傳輸協議、尋找和搜索資料用的gopher以及用於時間同步的daytime和time等。

還有一些報告系統狀態的服務,如finger、efinger、systat和netstat等,雖然對系統查錯和尋找用戶非常有用,但也給黑客提供了方便之門。例如,黑客可以利用finger服務查找用戶的電話、使用目錄以及其他重要信息。因此,很多Linux系統將這些服務全部取消或部分取消,以增強系統的安全性。

Inetd除了利用/etc/inetd.conf設置系統服務項之外,還利用/etc/services文件查找各項服務所使用的埠。因此,用戶必須仔細檢查該文件中各埠的設定,以免有安全上的漏洞。

在Linux中有兩種不同的服務型態:一種是僅在有需要時才執行的服務,如finger服務;另一種是一直在執行的永不停頓的服務。這類服務在系統啟動時就開始執行,因此不能靠修改inetd來停止其服務,而只能從修改/etc/rc.d/rc[n].d/文件或用Run?level?editor去修改它。提供文件服務的NFS伺服器和提供NNTP新聞服務的news都屬於這類服務,如果沒有必要,最好取消這些服務。

第2招:限制系統的出入

在進入Linux系統之前,所有用戶都需要登錄,也就是說,用戶需要輸入用戶賬號和密碼,只有它們通過系統驗證之後,用戶才能進入系統。

與其他Unix操作系統一樣,Linux一般將密碼加密之後,存放在/etc/passwd文件中。Linux系統上的所有用戶都可以讀到/etc/passwd文件,雖然文件中保存的密碼已經經過加密,但仍然不太安全。因為一般的用戶可以利用現成的密碼破譯工具,以窮舉法猜測出密碼。比較安全的方法是設定影子文件/etc/shadow,只允許有特殊許可權的用戶閱讀該文件。

在Linux系統中,如果要採用影子文件,必須將所有的公用程序重新編譯,才能支持影子文件。這種方法比較麻煩,比較簡便的方法是採用插入式驗證模塊(PAM)。很多Linux系統都帶有Linux的工具程序PAM,它是一種身份驗證機制,可以用來動態地改變身份驗證的方法和要求,而不要求重新編譯其他公用程序。這是因為PAM採用封閉包的方式,將所有與身份驗證有關的邏輯全部隱藏在模塊內,因此它是採用影子檔案的最佳幫手。

此外,PAM還有很多安全功能:它可以將傳統的DES加密方法改寫為其他功能更強的加密方法,以確保用戶密碼不會輕易地遭人破譯;它可以設定每個用戶使用電腦資源的上限;它甚至可以設定用戶的上機時間和地點。

Linux系統管理人員只需花費幾小時去安裝和設定PAM,就能大大提高Linux系統的安全性,把很多攻擊阻擋在系統之外。

第3招:保持最新的系統核心

由於Linux流通渠道很多,而且經常有更新的程序和系統補丁出現,因此,為了加強系統安全,一定要經常更新系統內核。

Kernel是Linux操作系統的核心,它常駐內存,用於載入操作系統的其他部分,並實現操作系統的基本功能。由於Kernel控制計算機和網路的各種功能,因此,它的安全性對整個系統安全至關重要。

早期的Kernel版本存在許多眾所周知的安全漏洞,而且也不太穩定,只有2.0.x以上的版本才比較穩定和安全,新版本的運行效率也有很大改觀。在設定Kernel的功能時,只選擇必要的功能,千萬不要所有功能照單全收,否則會使Kernel變得很大,既佔用系統資源,也給黑客留下可乘之機。

在Internet上常常有最新的安全修補程序,Linux系統管理員應該消息靈通,經常光顧安全新聞組,查閱新的修補程序。

第4招:檢查登錄密碼

設定登錄密碼是一項非常重要的安全措施,如果用戶的密碼設定不合適,就很容易被破譯,尤其是擁有超級用戶使用許可權的用戶,如果沒有良好的密碼,將給系統造成很大的安全漏洞。

在多用戶系統中,如果強迫每個用戶選擇不易猜出的密碼,將大大提高系統的安全性。但如果passwd程序無法強迫每個上機用戶使用恰當的密碼,要確保密碼的安全度,就只能依靠密碼破解程序了。

實際上,密碼破解程序是黑客工具箱中的一種工具,它將常用的密碼或者是英文字典中所有可能用來作密碼的字都用程序加密成密碼字,然後將其與Linux系統的/etc/passwd密碼文件或/etc/shadow影子文件相比較,如果發現有吻合的密碼,就可以求得明碼了。

在網路上可以找到很多密碼破解程序,比較有名的程序是crack。用戶可以自己先執行密碼破解程序,找出容易被黑客破解的密碼,先行改正總比被黑客破解要有利。

② 如何設置紅旗linux中的默認密鑰環

seahorse重置密鑰環密碼

③ 在linux編程中若一個用戶程序希望將一組數據傳遞給kernel有幾種方式

教科書里的Linux代碼例子都已作古,所以看到的代碼不能當真,領會意思就行了
比如以前的init進程的啟動代碼
execve(init_filename,argv_init,envp_init);

現在改為
static void run_init_process(char *init_filename)
{
argv_init[0] = init_filename;
kernel_execve(init_filename, argv_init, envp_init);
}

好的,聰明人就發現,linux內核中調用用戶空間的程序可以使用init這樣的方式,調用 kernel_execve
不過內核還是提供了更好的輔助介面call_usermodehelper,自然最後也是調用kernel_execve

調用特定的內核函數(系統調用)是 GNU/Linux 中軟體開發的原本就有的組成部分。但如果方向反過來呢,內核空間調用用戶空間?確實有一些有這種特性的應用程序需要每天使用。例如,當內核找到一個設備, 這時需要載入某個模塊,進程如何處理?動態模塊載入在內核通過 usermode-helper 進程進行。
讓我們從探索 usermode-helper 應用程序編程介面(API)以及在內核中使用的例子開始。 然後,使用 API 構造一個示例應用程序,以便更好地理解其工作原理與局限。
usermode-helper API
usermode-helper API 是個很簡單的 API,其選項為用戶熟知。例如,要創建一個用戶空間進程,通常只要設置名稱為 executable,選項都為 executable,以及一組環境變數(指向 execve 主頁)。創建內核進程也是一樣。但由於創建內核空間進程,還需要設置一些額外選項。

內核版本
本文探討的是 2.6.27 版內核的 usermode-helper API。
表 1 展示的是 usermode-helper API 中一組關鍵的內核函數

表 1. usermode-helper API 中的核心函數

API 函數
描述

call_usermodehelper_setup 准備 user-land 調用的處理函數
call_usermodehelper_setkeys 設置 helper 的會話密鑰
call_usermodehelper_setcleanup 為 helper 設置一個清空函數
call_usermodehelper_stdinpipe 為 helper 創建 stdin 管道
call_usermodehelper_exec 調用 user-land
表 2 中還有一些簡化函數,它們封裝了的幾個內核函數(用一個調用代替多個調用)。這些簡化函數在很多情況下都很有用,因此盡可能使用他們。

表 2. usermode-helper API 的簡化

API 函數
描述

call_usermodehelper 調用 user-land
call_usermodehelper_pipe 使用 stdin 管道調用 user-land
call_usermodehelper_keys 使用會話密鑰調用 user-land
讓我們先瀏覽一遍這些核心函數,然後探索簡化函數提供了哪些功能。核心 API 使用了一個稱為subprocess_info 結構的處理函數引用進行操作。該結構(可在 ./kernel/kmod.c 中找到)集合了給定的 usermode-helper 實例的所有必需元素。該結構引用從 call_usermodehelper_setup 調用返回。該結構(以及後續調用)將會在 call_usermodehelper_setkeys(用於存儲憑證)、call_usermodehelper_setcleanup 以及 call_usermodehelper_stdinpipe 的調用中進一步配置。最後,一旦配置完成,就可通過調用 call_usermodehelper_exec 來調用配置好的用戶模式應用程序。

聲明
該方法提供了一個從內核調用用戶空間應用程序必需的函數。盡管這項功能有合理用途,還應仔細考慮是否需要其他實現。這是一個方法,但其他方法會更合適。
核心函數提供了最大程度的控制,其中 helper 函數在單個調用中完成了大部分工作。管道相關調用(call_usermodehelper_stdinpipe 和 helper 函數 call_usermodehelper_pipe)創建了一個相聯管道供 helper 使用。具體地說,創建了管道(內核中的文件結構)。用戶空間應用程序對管道可讀,內核對管道可寫。對於本文,核心轉儲只是使用 usermode-helper 管道的應用程序。在該應用程序(./fs/exec.c do_coremp())中,核心轉儲通過管道從內核空間寫到用戶空間。
這些函數與 sub_processinfo 以及 subprocess_info 結構的細節之間的關系如圖 1 所示。
圖 1. Usermode-helper API 關系

表 2 中的簡化函數內部執行 call_usermodehelper_setup 函數和 call_usermodehelper_exec 函數。表 2 中最後兩個調用分別調用的是 call_usermodehelper_setkeys 和 call_usermodehelper_stdinpipe。可以在 ./kernel/kmod.c 找到 call_usermodehelper_pipe 和 call_usermodehelper 的代碼,在 ./include/linux/kmod.h 中找到 call_usermodhelper_keys 的代碼。
為什麼要從內核調用用戶空間應用程序?
現在讓我們看一看 usermode-helper API 所使用的內核空間。表 3 提供的並不是專門的應用程序列表,而是一些有趣應用的示例。

表 3. 內核中的 usermode-helper API 應用程序

應用程序
源文件位置

內核模塊調用 ./kernel/kmod.c
電源管理 ./kernel/sys.c
控制組 ./kernel/cgroup.c
安全密匙生成 ./security/keys/request_key.c
內核事件交付 ./lib/kobject_uevent.c
最直接的 usermode-helper API 應用程序是從內核空間載入內核模塊。request_mole 函數封裝了 usermode-helper API 的功能並提供了簡單的介面。在一個常用的模塊中,內核指定一個設備或所需服務並調用 request_mole 來載入模塊。通過使用 usermode-helper API,模塊通過 modprobe 載入到內核(應用程序通過 request_mole 在用戶空間被調用)。
與模塊載入類似的應用程序是設備熱插拔(在運行時添加或刪除設備)。該特性是通過使用 usermode-helper API,調用用戶空間的 /sbin/hotplug 工具實現的。
關於 usermode-helper API 的一個有趣的應用程序(通過 request_mole) 是文本搜索 API(./lib/textsearch.c)。該應用程序在內核中提供了一個可配置的文本搜索基礎架構。該應用程序使用 usermode-helper API 將搜索演算法當作可載入模塊進行動態載入。在 2.6.30 內核版本中,支持三個演算法,包括 Boyer-Moore(./lib/ts_bm.c),簡單固定狀態機方法(./lib/ts_fsm.c),以及 Knuth-Morris-Pratt 演算法(./lib/ts_kmp.c)。
usermode-helper API 還支持 Linux 按照順序關閉系統。當需要系統關閉電源時,內核調用用戶空間的 /sbin/poweroff 命令來完成。其他應用程序如 表 3 所示,表中附有其源文件位置。
Usermode-helper API 內部
在 kernel/kmod.c 中可以找到 usermode-helper API 的源代碼 和 API(展示了主要的用作內核空間的內核模塊載入器)。這個實現使用 kernel_execve 完成臟工作(dirty work)。請注意 kernel_execve是在啟動時開啟 init 進程的函數,而且未使用 usermode-helper API。
usermode-helper API 的實現相當簡單直觀(見圖 2)。usermode-helper 從調用call_usermodehelper_exec 開始執行(它用於從預先配置好的 subprocess_info 結構中清除用戶空間應用程序)。該函數接受兩個參數:subprocess_info 結構引用和一個枚舉類型(不等待、等待進程中止及等待進程完全結束)。subprocess_info(或者是,該結構的 work_struct 元素)然後被壓入工作隊列(khelper_wq),然後隊列非同步執行調用。

圖 2. usermode-helper API 內部實現

當一個元素放入 khelper_wq 時,工作隊列的處理函數就被調用(本例中是__call_usermodehelper),它在 khelper 線程中運行。該函數從將 subprocess_info 結構出隊開始,此結構包含所有用戶空間調用所需信息。該路徑下一步取決於 wait 枚舉變數。如果請求者想要等整個進程結束,包含用戶空間調用(UMH_WAIT_PROC)或者是根本不等待(UMH_NO_WAIT),那麼會從 wait_for_helper 函數創建一個內核線程。否則,請求者只是等待用戶空間應用程序被調用(UMH_WAIT_EXEC),但並不完全。這種情況下,會為____call_usermodehelper() 創建一個內核線程。
在 wait_for_helper 線程中,會安裝一個 SIGCHLD 信號處理函數,並為 ____call_usermodehelper 創建另一個內核線程。但在 wait_for_helper 線程中,會調用 sys_wait4 來等待____call_usermodehelper 內核線程(由 SIGCHLD 信號指示)結束。然後線程執行必要的清除工作(為UMH_NO_WAIT 釋放結構空間或簡單地向 call_usermodehelper_exec() 回送一個完成報告)。
函數 ____call_usermodehelper 是實際讓應用程序在用戶空間啟動的地方。該函數首先解鎖所有信號並設置會話密鑰環。它還安裝了 stdin 管道(如果有請求)。進行了一些安裝以後,用戶空間應用程序通過 kernel_execve(來自 kernel/syscall.c)被調用,此文件包含此前定義的 path、argv 清單(包含用戶空間應用程序名稱)以及環境。當該進程完成後,此線程通過調用 do_exit() 而產生。
該進程還使用了 Linux 的 completion,它是像信號一樣的操作。當 call_usermodehelper_exec 函數被調用後,就會聲明 completion。當 subprocess_info 結構放入 khelper_wq 後,會調用wait_for_completion(使用 completion 變數作為參數)。請注意此變數會存儲到 subprocess_info 結構作為 complete 欄位。當子線程想要喚醒 call_usermodehelper_exec 函數,會調用內核方法complete,並判斷來自 subprocess_info 結構的 completion 變數。該調用會解鎖此函數使其能繼續。可以在 include/linux/completion.h 中找到 API 的實現。
應用程序示例
現在,讓我們看看 usermode-helper API 的簡單應用。首先看一下標准 API,然後學習如何使用 helper 函數使事情更簡單。
在該例中,首先開發了一個簡單的調用 API 的可載入內核模塊。清單 1 展示了樣板模塊功能,定義了模塊入口和出口函數。這兩個函數根據模塊的 modprobe(模塊入口函數)或 insmod(模塊入口函數),以及 rmmod(模塊出口函數)被調用。

清單 1. 模塊樣板函數

#include
#include
#include

MODULE_LICENSE( "GPL" );

static int __init mod_entry_func( void )
{
return umh_test();
}

static void __exit mod_exit_func( void )
{
return;
}

mole_init( mod_entry_func );
mole_exit( mod_exit_func );

usermode-helper API 的使用如 清單 2 所示,其中有詳細描述。函數開始是聲明所需變數和結構。以subprocess_info 結構開始,它包含所有的執行用戶空間調用的信息。該調用在調用call_usermodehelper_setup 時初始化。下一步,定義參數列表,使 argv 被調用。該列表與普通 C 程序中的 argv 列表類似,定義了應用程序(數組第一個元素)和參數列表。需要 NULL 終止符來提示列表末尾。請注意這里的 argc 變數(參數數量)是隱式的,因為 argv 列表的長度已經知道。該例中,應用程序名是 /usr/bin/logger,參數是 help!,然後是 NULL 終止符。下一個所需變數是環境數組(envp)。該數組是一組定義用戶空間應用程序執行環境的參數列表。本例中,定義一些常用的參數,這些參數用於定義 shell 並以 NULL 條目結束。

清單 2. 簡單的 usermode_helper API 測試

static int umh_test( void )
{
struct subprocess_info *sub_info;
char *argv[] = { "/usr/bin/logger", "help!", NULL };
static char *envp[] = {
"HOME=/",
"TERM=linux",
"PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL };

sub_info = call_usermodehelper_setup( argv[0], argv, envp, GFP_ATOMIC );
if (sub_info == NULL) return -ENOMEM;

return call_usermodehelper_exec( sub_info, UMH_WAIT_PROC );
}

下一步,調用 call_usermodehelper_setup 來創建已初始化的 subprocess_info 結構。請注意使用了先前初始化的變數以及指示用於內存初始化的 GFP 屏蔽第四個參數。在安裝函數內部,調用了kzalloc(分配內核內存並清零)。該函數需要 GFP_ATOMIC 或 GFP_KERNEL 標志(前者定義調用不可以休眠,後者定義可以休眠)。快速測試新結構(即,非 NULL)後,使用 call_usermodehelper_exec 函數繼續調用。該函數使用 subprocess_info 結構以及定義是否等待的枚舉變數(在 「Usermode-helper API 內部」 一節中有描述)。全部完成! 模塊一旦載入,就可以在 /var/log/messages 文件中看到信息。
還可以通過 call_usermodehelper API 函數進一步簡化進程,它同時執行 call_usermodehelper_setup和 call_usermodehelper_exec 函數。如清單 3 所示,它不僅刪除函數,還消除了調用者管理subprocess_info 結構的必要性。

清單 3. 更簡單的 usermode-helper API 測試

static int umh_test( void )
{
char *argv[] = { "/usr/bin/logger", "help!", NULL };
static char *envp[] = {
"HOME=/",
"TERM=linux",
"PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL };

return call_usermodehelper( argv[0], argv, envp, UMH_WAIT_PROC );
}

請注意在清單 3 中,有著同樣的安裝並調用(例如初始化 argv 和 envp 數組)的需求。此處惟一的區別是 helper 函數執行 setup 和 exec 函數。

④ 如何在linux下 使用 ppa安裝

查找ppa軟體源

1
首先需要在https://launchpad.net 注冊用戶,這個賬號是使用Ubuntu one的賬號。當你注冊的時候,網頁會提醒你在Ubuntu中添加啟動器,這時確定就行。然後依據提示注冊就行了。注冊後打開初始界面如下:

2
在search文本框中輸入你想要的軟體,比如我要安裝wine,輸入並按search。在下面會出現一系列和wine相關的軟體。我們選擇第一項:wine team ppa:」ubuntu wine team」。根據關鍵字wine、Ubuntu和ppa就可以確定選擇這項了。

3
在wine的maintained package下根據時間先後列出wine的版本,前面為最新,為wine1.6,同時可以看到該軟體的其他相關軟體,已經是否有failures,即安裝失敗的時候,根據這些情況,可以盡可能的選擇較新較穩定的版本進行安裝。我們選擇wine1.6。

4
.我們盡量尋找這樣的add this ppa to you system的標題及ppa:Ubuntu-wine/ppa的內容。即和添加、地址有關的文字,一般添加的ppa源使用這樣的格式【ppa:user/ppa-name】,尤其是ppa:非常具有代表性,要找到它就行了。

5
在上面經過查找後找到了Ubuntu的ppa軟體包,那麼接下來就是使用命令行進行添加、更新和安裝操作了。基本格式是這樣的:
sudo add-apt-repository ppa:user/ppa-name
sudo apt-get update
sudo apt-get install ppa-name
下面以安裝wine為例:
END
安裝舉例

按Ctrl+alt+T打開終端,輸入 sudo add-apt-repository ppa:ubuntu-wine/ppa
在中途會提示你是否添加,直接按enter繼續。完成後會顯示建立密鑰環之類的信息,像下面的就表示成功添加了。

在終端輸入sudo apt-get Update
這是在更新你的apt 軟體源,它會把ppa:Ubuntu-wine/ppa下的鏈接比照原來的鏈接並將沒有的添加進來。等待更新,知道可以輸入。

在終端輸入 sudo apt-get install wine
系統會讀取軟體信息及依賴樹,然後找到應該下載的軟體,詢問你是否按照,如果安裝,輸入Y繼續安裝。在安裝過程中會顯示安裝進度,這時不要關閉終端,否則安裝停止。
等待安裝直到完成。

⑤ linux 郵件怎麼取消默認密鑰環

Linux取消默認密鑰環方法如下,以Ubuntu解除"輸入密碼以解鎖密鑰環」為例:
1.打開終端,輸入:sudo apt-get install libpam-keyring
2.新建一個 Bash 腳本,內容如下:
#!/bin/sh
exec echo -n "MyKeyringPassword" | /usr/lib/libpam-keyring/pam-keyring-tool -u -s
#其中 MyKeyringPassword 是密鑰環解鎖的密碼,默認是系統登錄密碼。
3.給剛才的 Bash 腳本文件加上可執行許可權。
4.打開系統->首選項->啟動應用程序,添加剛才的腳本為開機自啟動。

閱讀全文

與linux密鑰環相關的資料

熱點內容
如何截獲手機app連接的ip 瀏覽:330
冰箱壓縮機是否需要電容 瀏覽:344
python列表每一行數據求和 瀏覽:274
自己有一台伺服器可以玩什麼 瀏覽:656
社會學波普諾pdf 瀏覽:584
解壓做食物的小視頻 瀏覽:758
pdf怎麼單獨設置文件夾 瀏覽:474
業務邏輯程序員 瀏覽:659
addto新建文件夾什麼意思 瀏覽:160
有伺服器地址怎麼安裝軟體 瀏覽:659
安卓如何完全清除數據 瀏覽:690
安卓安卓證書怎麼信任 瀏覽:53
伺服器被攻擊如何解決 瀏覽:221
學霸變成程序員 瀏覽:881
c語言編譯錯誤fatalerror 瀏覽:441
ipv4內部伺服器地址怎麼分配 瀏覽:463
java線程安全的方法 瀏覽:952
重復命令畫梯形 瀏覽:165
在疫情就是命令 瀏覽:330
自己搭建一個什麼伺服器好玩 瀏覽:254