討論兩個容易被忽視的linux安全權限配置問題

我們都知道linux是一個多任務多用戶的操作系統,linux對各種權限有着很細緻的管理。如果對linux權限管理不瞭解,建議移步《鳥哥的linux私房菜》 瞭解。

本文談兩個很容易被忽視,又偶爾會突然蹦出來,給我們配置服務器造成困擾的權限管理問題。

1、太寬的權限
有些服務對權限的要求會是一個區間,小了不行,大了也不行。如果這個文件被賦予的權限不夠,那麼肯定不能使用;但是,如果這個文件被賦予的權限太多了,同樣不能正常使用。
舉例:
問題現象: test帳號使用key無法登錄某ssh服務器, 而同機器下的test2帳號卻可以登錄。
查看文件權限:


test@client:~$ls-l ~/.ssh/-rw-------1testtest16752010-03-2515:15 id_rsa


查看了客戶端及服務器端的.ssh目錄下的公鑰與私鑰權限, 可以看出, 並沒有問題。
私鑰必須是600權限, 而公鑰至少是644或者更嚴格的權限, 這都符合, 但依然無法登錄。

test@server:~$ls-la ~|grep-w .sshdrwxr-xr-x 2test test 4.0K12-2316:59.ssh


查看了服務器端的.ssh目錄權限, 是755, 也是沒問題的, ssh服務器要求在使用key登錄時.ssh目錄的權限必須是其他用戶不可寫。
一開始實在想不明爲啥test2帳號使用key可以登錄,test帳號使用key無法登錄, ssh_config和sshd_config。

在檢查了多遍後確實沒有問題, 最後在服務器端對比兩個帳號的不同時, 發現了可疑的地方。

$ls-l/home/drwxrwxrwx  3testtest40962009-12-3117:31testdrwxr-xr-x  6 test2 test2 40962010-03-2315:59 test2


兩個帳號的home目錄權限不同, test帳號是777, test2帳號是755, 會不會是這裏不同導致的? 在服務器端把test目錄修改成755後, 解決問題。


原因解釋:


ssh服務器的key方式登錄對權限要求嚴格。對於客戶端: 私鑰必須爲600權限或者更嚴格權限(400), 一旦其他用戶可讀, 私鑰就不起作用(如640), 表現爲系統認爲不存在私鑰。

對於服務器端: 要求必須公鑰其他用戶不可寫, 一旦其他用戶可寫(如660), 就無法用key登錄, 表現爲:Permission denied (publickey)。
同時要求.ssh目錄其他用戶不可寫,一旦其他用戶可寫(如770), 就無法使用key登錄, 表現爲:Permission denied (publickey)。


不僅.ssh目錄,更上層的目錄的權限同樣會有影響。

home中用戶目錄的可寫,表示其他用戶對.ssh子目錄也有改寫的權限(刪除或重命令),也就導致ssh判斷.ssh爲其他用戶可寫, 拒絕使用key登錄。


2、悄悄啓動的selinux。
如果你配置某項服務,但是不論怎麼定義配置文件,有些端口始終不能打開,或者文件無法訪問到,那麼這時你要小心是selinux在搗鬼。
舉例:
問題現象: 配置apache上的目錄可以訪問,卻始終提示你沒有權限。

apache上的配置:


Alias/hello.html  /web/hello.html<Directory/web>Order deny,allowAllow from all</Directory>


怎麼查都沒有問題,文件權限也對,這時可以考慮查一下selinux的權限。


# ls -Z /web/-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 hello.html


原來/web目錄不能被apache內建的用戶訪問。


原因解釋:

默認情況下,selinux限制了apache可以訪問的目錄,默認僅能在/var/www/下面讀寫文件。這也難怪,我們只配置apache和文件權限沒有任何作用了。
要想實現對/web/目錄下的文件讀取,必須修改selinux的配置。
其實不止是文件權限,包括服務可以使用的端口、消息接口等,selinux都有默認限制。如果你配置服務遇到莫名其妙的問題,看一下selinux吧。

如何修改selinux配置也可以參考《鳥哥的linux私房菜》 ,這裏不再贅述。

本文轉自:

http://www.freebuf.com/articles/system/13366.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章