文件的权限主要针对三类对象进行定义:

owner: 属主, u

group: 属组, g

other: 其他, o

每个文件针对每类访问者都定义了三种权限:

r: Readable

w: Writable

x: eXcutable

文件:

r: 可使用文件查看类工具获取其内容

w: 可修改其内容

x: 可以把此文件提请内核启动为一个进程

目录:

r: 可以使用ls查看此目录中文件列表

w: 可在此目录中创建文件,也可删除此目录中的文件

x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录

权限的表示法:

--- 000 0

--x 001 1

-w- 010 2

-wx 011 3

r-- 100 4

r-x 101 5

rw- 110 6

rwx 111 7

例如:

640: rw-r-----

rwxr-xr-x: 755

修改文件权限:chmod

chmod [OPTION]... OCTAL-MODE FILE...

-R: 递归修改权限

chmod [OPTION]... MODE[,MODE]... FILE...

MODE:

修改一类用户的所有权限:

u=、g=、o=、 ug=、a=、u=,g=

修改一类用户某位或某些位权限

u+、u-

chmod [OPTION]... --reference=RFILE FILE...

参考RFILE文件的权限,将FILE的修改为同RFILE


修改文件的属主和属组

Note:仅root可用

修改文件的属主:chown

chown [OPTION]... [OWNER][:[GROUP]] FILE...

用法:

OWNER

OWNER:GROUP

:GROUP

Note: 命令中的冒号可用.替换

-R: 递归

chown [OPTION]... --reference=RFILE FILE...

修改文件的属组:chgrp

chgrp [OPTION]... GROUP FILE...

chgrp [OPTION]... --reference=RFILE FILE...

-R: 递归


文件或目录创建时的遮罩码:umask

FILE: 666-umask

Note: 如果某类的用户的权限减得的结果中存在x权限,则将其权限+1

DIR: 777-umask 

umask: 查看

umask #: 设定


命令总结:chmod, chown, chgrp, umask


特殊权限(SUID, SGID, Sticky):

1 权限

r, w, x

user, group, other

2 安全上下文

前提:进程有属主和属组;文件有属主和属组

(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组

(3) 进程访问文件时的权限,取决于进程的发起者

(a) 进程的发起者,同文件的属主:则应用文件属主权限

(b) 进程的发起者,属于文件的属组;则应用文件属组权限

(c) 应用文件“其它”权限

3 SUID

背景:

(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

(2) 启动为进程之后,其进程的属主为原程序文件的属主

SUID属性只能运用在可执行文件上,当用户执行该执行文件时,会临时拥有该执行文件所有者的权限。

权限设定:

chmod u+s FILE...

chmod u-s FILE...

4 SGID

默认情况下,用户创建文件时,其属组为此用户所属的基本组。

一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组。

权限设定:

chmod g+s DIR...

chmod g-s DIR...

5 Sticky

对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件。

权限设定:

chmod o+t DIR...

chmod o-t DIR...


6 权限的表示

SUID SGID STICKY

000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7

chmod 4777 /tmp/a.txt


7 几个权限位映射:

SUID: user, 占据属主的执行权限位

s: 属主拥有x权限

S:属主没有x权限

SGID: group,  占据group的执行权限位

s: group拥有x权限

S:group没有x权限

Sticky: other, 占据ohter的执行权限位

t: other拥有x权限

T:other没有x权限