讨论两个容易被忽视的linux安全权限配置问题

咱们都知道linux是一个多任务多用户的操做系统,linux对各类权限有着很细致的管理。若是对linux权限管理不了解,建议移步《鸟哥的linux私房菜》 了解。html

本文谈两个很容易被忽视,又偶尔会忽然蹦出来,给咱们配置服务器形成困扰的权限管理问题。linux

一、太宽的权限
有些服务对权限的要求会是一个区间,小了不行,大了也不行。若是这个文件被赋予的权限不够,那么确定不能使用;可是,若是这个文件被赋予的权限太多了,一样不能正常使用。
举例:
问题现象: test账号使用key没法登陆某ssh服务器, 而同机器下的test2账号却能够登陆。
查看文件权限:


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


查看了客户端及服务器端的.ssh目录下的公钥与私钥权限, 能够看出, 并无问题。
私钥必须是600权限, 而公钥至少是644或者更严格的权限, 这都符合, 但依然没法登陆。web

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。apache

在检查了多遍后确实没有问题, 最后在服务器端对比两个账号的不一样时, 发现了可疑的地方。服务器

$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), 表现为系统认为不存在私钥。ssh

对于服务器端: 要求必须公钥其余用户不可写, 一旦其余用户可写(如660), 就没法用key登陆, 表现为:Permission denied (publickey)。
同时要求.ssh目录其余用户不可写,一旦其余用户可写(如770), 就没法使用key登陆, 表现为:Permission denied (publickey)。ide


不只.ssh目录,更上层的目录的权限一样会有影响。

home中用户目录的可写,表示其余用户对.ssh子目录也有改写的权限(删除或重命令),也就致使ssh判断.ssh为其余用户可写, 拒绝使用key登陆。spa


二、悄悄启动的selinux。
若是你配置某项服务,可是不论怎么定义配置文件,有些端口始终不能打开,或者文件没法访问到,那么这时你要当心是selinux在捣鬼。
举例:
问题现象: 配置apache上的目录能够访问,却始终提示你没有权限。

apache上的配置:操作系统


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


怎么查都没有问题,文件权限也对,这时能够考虑查一下selinux的权限。server


# 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

相关文章
相关标签/搜索