再次谈谈linux下文件夹权限的问题
有网友说我前面的日志写得太简单了,好吧,这篇我稍微详细一点。其实很为难:详细点吧,都不愿意看,简单点吧,都说看不懂!
在homezz.com后面的几个的服务器的数据转移过程中,发现很多homezz.com用户转移到新的服务器上的时候,都出现了这样那样的错误,归根结底,就是文件夹权限设置错误。旧的主机放得太开,对安全性能控制不严格,所以文件权限太大没有做限制,新服务器的安全机制更加严格,因此太大的权限服务器将会拒绝执行。下面开始讲一讲linux下的文件权限。
Linux的文件权限是linux能有如此安全性能的最大的保障之一,有朋友可能会知道,很多攻击windows的方法都是通过漏洞获取到创建用户的权限从而达到控制计算机的目的,在linux下,Root帐户有最大的权限,可以干任何事情,其他用户只能拥有自己的文件的所有权限和该改组成员赋予的文件的权限,下面开始对文件权限的一个说明。
读权限R。简单的说就是打开文件查看内容的权限,在web服务器中,若文件没有打开权限,则web服务器则视为该文件不存在,发送404 file not found错误,用数字4表示。
写权限W。一个文件若没有写的权限,那么该文件则无法更改,文件夹若没有写权限,则该文件夹下无法创建新文件,用数字2表示。
执行权限X。程序文件若要执行,必须有执行权限,否则无法执行。打开一个文件夹也是执行,所以文件夹若没有执行权限,则无法被打开。用数字1表示。
谁拥有这个权限 | 文件所有者 | 组内用户 | 公共用户 |
可读=4 | 0 | 0 | 0 |
可写=2 | 0 | 0 | 0 |
可执行=1 | 0 | 0 | 0 |
实际权限,纵向相加 | 0 | 0 | 0 |
公共用户为所有者和组内用户之外的用户,比如访问web时候,linux可能用公共的用户去读取文件,这里不妨理解成是访客所能操作的那个用户。
下面举例(再次提醒,文件夹和文件不一样):
文件所有用户可写: 666 (3类用户均可读写)
谁拥有这个权限 | 文件所有者 | 组内用户 | 公共用户 |
可读=4 | 4 | 4 | 4 |
可写=2 | 2 | 2 | 2 |
可执行=1 | 0 | 0 | 0 |
实际权限,纵向相加 | 6 | 6 | 6 |
接上面的,假设我们吧文件夹设置成0666会怎么样,结果很明显,因为该文件夹没有执行权限,无法被打开,所以设置成0666则无法被访问到。
文件夹只可文件所有者有全部权限,组内用户、公共用户可读和执行(755)。一般web根目录文件夹都要这样设置,才安全。再次提示:文件夹没有执行权限,则该用户无法打开。正常的服务器,若根目录权限也为0777,则会出现500错误
谁拥有这个权限 | 文件所有者 | 组内用户 | 公共用户 |
可读=4 | 4 | 5 | 4 |
可写=2 | 2 | 0 | 0 |
可执行=1 | 1 | 1 | 1 |
实际权限,纵向相加 | 7 | 5 | 5 |
如果php需要在某文件夹下创建文件,请把该文件的权限全部设置:即可都可写和可执行777
谁拥有这个权限 | 文件所有者 | 组内用户 | 公共用户 |
可读=4 | 4 | 4 | 4 |
可写=2 | 2 | 2 | 2 |
可执行=1 | 1 | 1 | 1 |
实际权限,纵向相加 | 7 | 7 | 7 |
为了安全起见,正常的php文件应该设置成:所有者可读可写,组用户可读,公共用户可读 644
谁拥有这个权限 | 文件所有者 | 组内用户 | 公共用户 |
可读=4 | 4 | 4 | 4 |
可写=2 | 2 | 0 | 0 |
可执行=1 | 0 | 0 | 0 |
实际权限,纵向相加 | 6 | 4 | 4 |
其他权限,请大家自行思考。
对于那些建议把所有文件和文件夹都设置成 777的人,我只能说你要么在误导别人,要么在残害新手!