五.密封核心
我們需要在系統啟動的時候做一些必要的操作,但是我們也需要在系統執行的時候保護它們。
例如,我們需要象核心裡插入一些需要的模組,但是我們不希望在系統執行的時候插入任何模組,因為那樣會十分危險。如何解決這個問題呢?這裡就有一些密封的方法。我們可以在系統啟動的時候做我們任何想做的事情,然後我們就密封核心。然後,我們就不能做那些以前在沒有密封的時候可以做的事情。用密封的方法,我們可以用模組來解決問題,我們可以在密封前向核心裡插入我們想要的模組,在密封後我們就不可以在核心裡插入或是刪除任何模組。
5.1 用lids密封核心
為了密封核心,我們可以用下面的lids命令
#lidsadm ci -- -cap_***….
它們可以放到指令碼裡讓系統啟動的時候就執行它。具體你們可以看我以前在linuxbyte和chinabyte發表的文章。lids是通過/proc/sys/lids/locks和核心通訊的。
當你密封了核心,lidsadm是呼叫lidsadm.c的lids_init()的呼叫。
#define lids_locks "/proc/sys/lids/locks"
void lids_init(int optind, int argc, char *ar**)
if ((fd=open(lids_locks,o_rdwr)) == -1) *cap_user_header_t;
typedef struct __user_cap_data_struct *cap_user_data_t;
#ifdef __kernel__
/* #define strict_cap_t_typeche
#ifdef strict_cap_t_typechecks
typedef struct kernel_cap_struct kernel_cap_t;
#else
typedef __u32 kernel_cap_t;
#endif
kernel_cap_t cap_bset = cap_full_set;
在kernel_ap_t的每一位都代表乙個許可。cap_bset是capability集的主要部分。它們的值可以通過改變/proc/sys/kernel/cap-bound來改變。
看看上面的檔案,你就會發現一些問題。
/* in include/linux/capability.h */
/* in a system with the [_posix_chown_restricted] option defined, this
overrides the restriction of changing file ownership and group
ownership. */
#define cap_chown 0
/* override all dac access, including acl execute access if
[_posix_acl] is defined. excluding dac access covered by
cap_linux_immutable. */
#define cap_dac_override 1
/* overrides all dac restrictions regarding read and search on files
and directories, including acl restrictions if [_posix_acl] is
defined. excluding dac access covered by cap_linux_immutable. */
#define cap_dac_read_search 2
每乙個任務(程序)在結構task_struct定義了三個成員:cap_effective,cap_inheritable,cap_permitted.我們已經有了乙個用來表明基本capability的變數cap_bset。它們會檢測這個系統並確定那種capability用來控制系統。
在核心實現的大部分系統呼叫會呼叫函式capable() (在kernel/sched.c)。然後會呼叫cap_raised() (在/include/linux/capability.h)。如下:
#ifdef config_lids_allow_switch
#define cap_raised(c, flag) ((cap_t(c) & cap_to_mask(flag)) && ((cap_to_mask(flag) & cap_bset) || (!lids_load) || (!lids_local_load)))
#else
#define cap_raised(c, flag) (cap_t(c) & cap_to_mask(flag) & cap_bset)
#endif
你會看到這裡的cap_bset(一般預設都是1)是很重要的。如果有人在那裡把一些位置0,capability就可以會禁止整個系統。如,18 位的cap_sys_chroot, 如果我們把他置0,表明我們就不能用chroot()了。
如果你看到sys_chroot的源**,你就發現很多問題了:
if (!capable(cap_sys_chroot)) {
goto dput_and_out;
capable()會返回0,在位18為0,這樣chroot就會給使用者返回乙個錯誤資訊。
6.2.在lids裡的capability
lids用capability來限制整個動
linux系統函式 監測系統引數用的
strip python中的strip用於去除字串的首位字元,同理,lstrip用於去除左邊的字元,rstrip用於去除右邊的字元。這三個函式都可傳入乙個引數,指定要去除的首尾字元。如下 thestring saaaay yes no yaaaass print thestring.strip sa...
linux系統使用python監測系統負載指令碼分享
複製 如下 usr bin env python import os def load stat load g f op程式設計客棧en 程式設計客棧proc load g con f.read split f.close load g l g 1 con 0 load g l g 5 con 1 ...
入侵檢測系統和入侵防護系統的區別
2008 08 29 cbsi中國 pchome.net 1.入侵檢測系統 ids ids是英文 intrusion detection systems 的縮寫,中文意思是 入侵檢測系統 專業上講就是依照一定的安全策略,對網路 系統的執行狀況進行監視,盡可能發現各種攻擊企圖 攻擊行為或者攻擊結果,以...