我使用的是多用戶系統(tǒng),大部分的用戶通過ssh客戶端訪問他們的資源。我如何(怎么樣)避免泄露進(jìn)程信息給他們?如何(怎么樣)在Debian/Ubuntu/RHEL/CentOS linux服務(wù)器器上阻止/避免他們看到不屬于他們的進(jìn)程?對linux上的其他用戶隱藏進(jìn)程的方法
解決方法/方案:
如果你使用的linux kernel(內(nèi)核)是3.2以上的版本(或者使用的RHEL/CentOS是6.5以上的版本),你就可以對其他用戶隱藏進(jìn)程。只有root用戶可以看到所有的進(jìn)程,而非root用戶,只能看到屬于自己的進(jìn)程信息。你所需要做的僅僅是開啟linux kernel加固選項 "hidepid "來重新掛載 /proc文件系統(tǒng)。
認(rèn)識 hidepid 選項
這個選項定義了我們想讓非進(jìn)程的所有者能看到多少這些進(jìn)程信息。
hidepid的值代表的意義如下:
1. hidepid=0 ———默認(rèn)的模式(經(jīng)典模式),任何人都可以查看 /proc/PID/* 中的world-readable文件
解釋:world-readable files:指linux中的我們把文件權(quán)限分成user,group和other三組,other又被叫做world。所以world-readables表示other這組有-r權(quán)限。
2. hidepid=1 ———表示用戶不能進(jìn)入/proc/下的,而只能進(jìn)入屬于自己的目錄。所以一些敏感文件,如cmdline,sched*,status被保護(hù)起來了。當(dāng)用戶輸入ps,top等命令,用戶是看不到那些不屬于自己的進(jìn)程的?。〔贿^還是能夠看到/proc下的process IDs
3. hidepid=2 ———表示對hidepid=1的文件訪問權(quán)限加強(qiáng)限制,這種設(shè)定下,/proc/PID/ 對于任何用戶都是不可見的——哪怕是入侵到/proc 目錄下,也看不到process IDs。無論是否有部分守護(hù)進(jìn)程是以提升的權(quán)限運(yùn)行,是否有其他用戶運(yùn)行一些敏感程序,是否有其他用戶運(yùn)行任何程序等,這個參數(shù)的設(shè)定都使得入侵者收集系統(tǒng)運(yùn)行進(jìn)程信息變得更復(fù)雜,難度加大。
Linux kernel protection(linux內(nèi)核保護(hù)):對linux上的其他用戶隱藏進(jìn)程的方法
輸入下面的命令來設(shè)置hidepid選項的值,以重新掛在/proc
# mount -o remount,rw,hidepid=2 /proc
編輯 /etc/fstab 文件,在系統(tǒng)重啟后依然按上面那樣來掛在/proc:
# vi /etc/fstab
將 proc掛載的那一行改成下面的樣子:
proc /proc proc defaults,hidepid=2 0 0
然后保存關(guān)閉文件。
接下來是演示“對linux上的其他用戶隱藏進(jìn)程的方法”是否有效
在這個例子中,我分別以dabu和root同時登陸vps,只需在xshell開連個窗口或者是直接在命令行下ssh命令登陸。這里假設(shè)我dabu和root已經(jīng)同時登陸了,那么,此時hidepid=0是默認(rèn)的。
先在root中打開一個a.txt文件
#vi a.txt
不關(guān)閉文件,然后去dabu那進(jìn)行操作,執(zhí)行
$ ps -ef
得到的結(jié)果又一條,如下:
root 16601 12120 0 16:19 pts/1 00:00:00 vi a.txt
同樣,執(zhí)行:
$top -bn1
也可以看到有一條root使用vi的進(jìn)程:
17512 root 20 0 3488 1420 1192 S 0.0 0.5 0:00.00 vi
上面兩個結(jié)果都證明在hidepid=0(默認(rèn)值)時,這個屬于root用的進(jìn)程可以被dabu看到。
接著,繼續(xù)用root執(zhí)行下面的命令:
# mount -o remount,rw,hidepid=2 /proc
再次用dabu執(zhí)行下面的命令查看進(jìn)程;
$ ps -ef
返回結(jié)果中看不到剛才那條進(jìn)程了,所有非dabu用戶的都看不到了
至于top,htop之類的,更是看不到了
還有,如果你想ls /proc ,會提示你不能進(jìn)入。
gid=xxx的配合hidepid使用:
如果我們設(shè)置了hidepid=2,就使得只能root看到所有的進(jìn)程信息,有的情況下,我們還希望某個管理組也可以看到所有進(jìn)程信息。
假設(shè)我們這里這個組是admin組,它的gid是1001 :我們可以講/etc/fstab文件中的proc那行改成;
proc /proc proc defaults,hidepid=2,gid=1001 0 0
或者是
proc /proc proc defaults,hidepid=2,gid=admin 0 0
查看某個組的id,執(zhí)行命令:
#id 組名
查看某個用戶的id,執(zhí)行命令:
#id 用戶名
id命令的用法,自行help