全文选摘自:林20的CSDNblog
Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。
对于user、group、other分别设置三个粒度,则形成了000~777的不同授权数字,分别表示---------
和rwxrwxrwx
;
实际表示文件时,会采用10位表示法的八进制表示,最高的那一位实际上是拼接上的字母(还有12位二进制的八进制表示,此时要用四个八进制数字)。
chmod [mode]
权限设定字串,详细格式如下 :
[ugoa...][[+-=][rwxX]...][,...],
-R , --recursive 以递归的方式对目前目录下的所有档案与子目录进行相同的权限变更)
其中
[ugoa…]
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示所有(包含上面三者)。 [+-=]
+表示增加权限,- 表示取消权限,= 表示唯一设定权限。
- [rwxX]
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
- [rwxX]
举例
1.设置文件 a.conf 与 b.xml 权限为拥有者与其所属同一个群组 可读写,其它组可读不可写
1 | chmod a+r,ug+w,o-w a.conf b.xml |
2.设置当前目录下的所有档案与子目录皆设为任何人可读写
1 | chmod -R a+rw * |
chown更改文件拥有者
1 | chown [可选项] user[:group] file... #将文件file的拥有者设为group里的user |
通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
10位权限表示法
第一位实际上是拼接上去的字母,表示文件类型。
d代表的是目录(directroy)
-代表的是文件(regular file)
s代表的是套字文件(socket)
p代表的管道文件(pipe)或命名管道文件(named pipe)
l代表的是符号链接文件(symbolic link)
b代表的是该文件是面向块的设备文件(block-oriented device file)
c代表的是该文件是面向字符的设备文件(charcter-oriented device file)
十二位权限(Linux附加权限)
linux除了读写操作权限外,还有附加权限,包括 SET位权限(suid,sgid)和粘滞位权限(sticky)。
suid/sgid是为了使“没有取得特权用户要完成一项必须要有特权才可以执行的任务”而产生的。一般用于给可执行的程序或脚本文件进行设置,其中、
SUID表示对属主用户增加SET位权限,
SGID表示对属组内用户增加SET位权限。
执行文件被设置了SUID、SGID权限后,任何用户执行该文件时,将获得该文件属主、属组账号对应的身份。很明显,通过这种程序存在提权的可能。
(passwd 命令是为数不多的必须要使用“suid”的命令之一)