在Linux下,web目录和文件权限必须从整体上考虑系统的安全。一般情况下,对目录,需要设置 r(读取)和x(执行)权限,有的目录同时还需要w(写入权限);对文件,需要r(读取),有的文件需要w(写入)权限或x(执行)权限。
在Linux系统中,使用命令umask设置创建文件或目录的默认rwx权限,系统默认的umask设置是022,这个权限的计算相当于文件、目录权限的掩码,例如此时创建的目录权限755 (rwxr-xr-x),那么其umask权限相当于相对777的掩码022;而此时创建的文件权限为644 (rw-r–r–),其umask权限相当于相对666的掩码022。
当然,这样的权限设置很不安全,同一台server上的不同用户(可能相同也可能不同用户组)/虚拟主机用户能够互相窥探到对方的源码,umask值必须修改的比较严格,以使得除root权限之外,不能随意互相窥探其他人的源码、数据库资料等。
设置方法是:去掉同用户组和其他用户组的r(读取)权限,具体做法是设置目录权限为500(读取+执行)同时文件权限为400(读取),此时umask应设置为277,设置目录权限为700(读取+写入+执行)同时文件权限为500(读取+执行),此时umask应设置为177。
例如对于后者,我们可以使用命令 umask 177设置当前对话下的默认目录、文件创建权限,如果要永久设置,就要修改/root/.bash_profile以及所有用户home的录下的.bash_profile文件,将其中的 umask 022改为 umask 177。
从以上可以看出,如果要设置较为安全的目录、文件权限,几个基本原则就是:
1、尽可能减少web路径下可写入目录的数量。
2、文件的写入和执行权限只能选择其一,避免同时出现写入和执行权限。
Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和无权限(-)。
在终端里输入 ls -l 命令可以查看当前目录下某个文件或目录的权限,显示每行数据的第一个字段就是它的权限内容。第一个字段由10个字符组成,如:
-rwxr-xr-x
第一位表示文件类型,-表示文件,d表示目录,后面的每三位字符分别表示三个不同用户组所具有的权限。
2-4位表示文件所有者的权限,即u(usesr)权限
5-7位表示文件所有者所属组成员的权限,g(group)权限
8-10位表示所有者所属组之外的用户的权限,o(others)权限
2-10位的权限总和有时称为a(all)权限
上面的那个字段,表示这是一个文件(非目录),文件所有者具有读、写和执行的权限,
所有者所属组成员和所属组之外的用户具有读和执行的权限而没有写的权限。
r、w和x也可以分别用4、2、1来代表,没有授予权限的则为0,这在修改权限时会比较方便。
linux下修改文件权限用chmod命令。
chmod命令有两种用法。一种是包含字母和操作符的表达式,即文字设定法;另一种是包含数字的数字设定法。
1. 文字设定法
chmod 〔who〕 〔+ | - | =〕 〔mode〕 文件名
其中who可以是上面提到的u、g、o、a中的任一个或者它们的组合。操作符+、-、=分别代表添加某个权限、取消某个权限、赋予给定权限并取消其他所有权限(如果有的话)。
mood则是r、w、x的任一组合。
例如:
chmod g+r,o+r fileName
表示给同组和其他用户添加对文件fileName的读权限。
2. 数字设定法则比较简单
chmod 〔mode〕 文件名
不用管是要添加什么权限,而是可以直接设定具有什么权限了,这里的mood是一个三位数,每位数字可以是1至7中的任一个,代表对应的某种用户类型的权限,如:
chmod 777 fileName
这个表示所有用户都具有fileName的所有权限,这是很危险的事。在linux中修改权限,要用到管理员权限,如ubuntu中要用sudo或者切换到root帐号。
chmod后面还可以带参数,主要有 -R(修改目录时要用到) -v(显示操作)。
如:
chmod -R 755 dirName
把dirName下的所有文件及目录的权限修改为755,是一个对目录的递归操作。
chmod
【语法】chmod [选项][参数]
【详解】chmod命令用于改变文件或目录的权限,设置权限有字符和数字两种设定方法。
在数字设定法中,0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,以上数字相加所得到的数最最终权限。如可写可读为6,可执行和可读为5权限。
在英文设定法中,r表示可读权限,w表示可写权限,x表示可执行权限,-表示无任何权限。
选项说明】
选项 | 相应功能 |
u | 操作对象简称,用户user,文件或目录的所有者。 |
g | 操作对象简称,同组用户group,文件或目录所属群组 |
o | 操作对象简称,其它用户others |
a | 操作对象简称,所有用户all,系统默认使用此项 |
+ | 权限操作符,添加某些权限 |
- | 权限操作符,取消某些权限 |
= | 权限操作符,设置文件的权限为给定的权限 |
r | 权限设定(英文),表示可读权限 |
w | 权限设定(英文),表示可写权限 |
x | 权限设定(英文),表示可执行权限 |
- | 权限设定(英文字符),表示没有权限 |
X | 权限设定,如果目标文件是可执行文件或目录,可给其设置可执行权限 |
s | 权限设定,设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位 |
t | 权限设定,只有目录或文件的所有者才可以删除目录下的文件 |
-c | 如果文件权限已经改变,显示其操作信息 |
-f | 操作过程中不显示任何错误信息 |
-R | 修改指定目录下所有文件或子目录的权限 |
-v | 显示命令运行时的详细执行过程 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
【参数说明】
参数 | 相应功能 |
文件 | 指定改变权限的文件或目录的名称。 |
例子
将/home/wwwroot/里的所有文件和文件夹设置为755权限
(1)直接指定路径修改
chmod -R 755 /home/wwwroot/*
(2)手动进入该目录修改权限(并显示详细过程)
cd /home/wwwroot
chmod -Rv 755 * #注意:“*”表示通配符,指的是所有文件和文件