Linux权限的用途
权限是OS用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行怎样的操作。
每个进程都是以某个用户身份运行,所以进程的权限与该用户的权限一样,所以用户的权限越大,该进程拥有的权限就大。
Linux权限操作
文件权限:
Linux中,每个文件拥有三种权限详情见下面:
权限 |
对文件的影响 |
对目录的影响 |
r(读取) |
可读取文件内容 |
可列出目录内容 |
w(写入) |
可修改文件内容 |
可在目录中创建删除内容 |
x(执行) |
可作为命令执行 |
可访问目录内容 |
目录必须拥有x权限,否则无法查看其内容 |
UGO
Linux权限基于UGO模型进行控制:
U代表User,G代表Group,O代表Other
每一个文件的权限基于UGO进行设置
权限三个一组(rwx),对应UGO分别设置
每一个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O权限
chown命令
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
语法:
chown [选项] [文件/目录]
选项:
-c或--changes:效果类似"-v"参数,但仅回报更改的部分;
-f或--quite或--silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或--version:显示指令执行过程;
--dereference:效果和"-h"参数相同;
--help:在线帮助;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设
示例:
[root@localhost ~]# chown -R admin /data/mysql //将目录data/mysql及其下面的所有文件、子目录的文件主改成 admin
chmod命令
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
权限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为"4″;
w 写入权限,数字代号为"2″;
x 执行或切换权限,数字代号为"1″;
– 不具任何权限,数字代号为"0″;
s 特殊功能说明:变更文件或目录的权限。
+、-、=代表加入、删除和等于对应权限
语法:chmod [选项] [文件]
-c或--changes:效果类似"-v"参数,但仅回报更改的部分;
-f或--quiet或--silent:不显示错误信息;
-R或--recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或--verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置>:关闭权限范围的
linux文件的用户权限的分析图
命令chmod也支持以数字方式修改权限,三个权限分别由三个数字表示:
-r = 4 (2^2)
-w = 2 (2^1)
-x = 1 (2^0)
使用数字表示权限时,每组权限分别对应数字之和:
rw = 4+2 =6
rwx = 4+2+1=7
r-x = 4+1 =5
示例:
[root@localhost ~]# chmod u+w test.txt //给主用户加入w(写入)权限
[root@localhost ~]# chmod u-x test.txt //给主用户删除x(执行)权限
[root@localhost ~]# chmod go+r test.txt //给组用户跟其他用户加入r(读)权限
[root@localhost ~]# chmod a-x test.txt //给所有用户删除x(执行)权限
[root@localhost ~]# chmod u=rwx test.txt //设置主用户可读可写可执行(rwx=777)权限
Linux特殊权限及权限掩码
默认权限:
每一个终端都拥有一个umask属性,来确定新建文件、目录的默认权限
umask使用数字权限方式表示,如:022
目录的默认权限是:777-umask
文件的默认权限是:666-umask
一般,普通用户的默认umask是002,root用户的默认umask是022
也就是说对于普通用户来说
新建文件的权限是:666-002 = 664
新建目录的权限是:777-002 = 775
命令umask用以查看设置umask值
umask 022
特殊权限:
除了普通权限外,还有三个特殊权限:
权限 | 对文件的影响 | 对目录的影响 |
suid | 以文件的所属用户身份执行, 而非执行文件的用户 | 无 |
sgid | 以文件所属组身份去执行 | 在该目录中创建任意新文件的所属组与该目录的所属组相同 |
sticky | 无 | 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件 |
设置特殊权限
设置suid:
[root@localhost ~]# chmod u+s test.txt
设置sgid
[root@localhost ~]# chmod g+s test.txt
设置sticky
[root@localhost ~]# chmod o+t test.txt
与设置普通权限一样,特殊权限也可以使用数字方式表示
SUID = 4
SGID = 2
Sticky =1
所以,我们可以通过以下命令设置:
[root@localhost ~]# chmod 4755 test.txt