Linux中文件的权限
基本权限
- 每个文件都有一个拥有用户
User
与拥有组Group
- 文件的
User
可以不在Group
中 - 除了
User
和Group
外,其余用户都是Others
- 对于不同的身份,对文件有各自不同的权限操作
- 权限有
r
,w
,x
三种权限分别表示可读,可写,可执行
可通过 ls -l 查看当前目录下文件的权限
total 164K
-rw------- 1 luzelin luzelin 558 Jul 25 12:23 .bash_history
-rw-r--r-- 1 luzelin luzelin 220 Jul 25 09:52 .bash_logout
-rw-r--r-- 1 luzelin luzelin 3.7K Jul 25 09:52 .bashrc
drwx------ 2 luzelin luzelin 4.0K Jul 25 09:59 .cache
文件权限的修改
chmod
:修改文件的权限
chmod 777 文件名
作用:将文件的权限修改为,三种身份全可读、可写、可执行(777转为2进制111 111 111)
chmod o+rwx 文件名
作用:将文件的others
添加读、写、可执行权限(-
和=
同理+
)
修改文件的所属者和所属组(扩展)
chown
:修改文件的User
chown 用户名 文件名
(修改root用户的话,需要用sudo
提权)
chown 用户名:组名 文件名
可以在修改User
的同时修改Group
chgrp
: 修改文件的Group
chgrp 组名 文件名
特殊权限SUID、SGID、SBIT
luzelin@DESKTOP-5VT4IIQ ~ % ls -ld /tmp/
drwxrwxrwt 1 root root 4096 Mar 20 00:19 /tmp/
luzelin@DESKTOP-5VT4IIQ ~ % ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 May 28 2020 /usr/bin/passwd
非常奇怪,/tmp
目录和 passwd
文件的权限怎么怪怪的,怎么有s
和t
权限呢。看了下面的内容你就明白了。
SUID
当s
出现在二进制文件拥有者的x
权限上时,如我们上面看到的/usr/bin/passwd
这个文件的权限时-rwsr-xr-x
,此时就被称为SET UID
简称SUID
SUID对于一个文件有什么限制和功能呢?
-
SUID权限仅对二进制可执行文件有效
-
执行者对于该文件具有
x
的权限 -
本权限仅在执行该文件的过程中有效
-
执行者将具有该文件拥有者的权限
例如普通用户用passwd
修改自己的命令,实际上最终更改的是/etc/passwd
文件. 此文件是用户管理配置文件,只有root
权限才能更改。
luzelin@DESKTOP-5VT4IIQ ~ % ls -ld /etc/passwd
-rw-r--r-- 1 root root 1810 Mar 17 23:19 /etc/passwd
既然是root
用户才拥有此权限,为什么我们可以通过passwd
命令来修改密码呢,那这就要归功于passwd
命令设置了SUID
权限位了。
luzelin@DESKTOP-5VT4IIQ ~ % which passwd
/usr/bin/passwd
luzelin@DESKTOP-5VT4IIQ ~ % ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 May 28 2020 /usr/bin/passwd
此时普通用户通过执行passwd
命令,临时拥有root
权限,间接的修改/etc/passwd
,以达到修改自己密码的权限。
SGID
当s
出现在目录或二进制文件所属组的x
权限上时,此时就称为SET GID
简称SGID
SGID对文件和目录分部有哪些功能呢?
-
SGID对目录
-
使用者若对于此目录具有
r
与x
的权限时,该使用者能够进入此目录 -
使用者在此目录下的群组将会变成该目录的群组
-
例如使用者在此目录下具有 w
的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
-
SGID对文件
-
SGID 对二进制可执行文件有效
-
程序执行者对于该文件来说,需具备
x
的权限。执行者在执行的过程中将会获得该文件群组的支援(用于该文件群组的权限)
-
SBIT
当t
出现在目录其他用户的x
权限上时,此时就称为Sticky Bit
(粘滞位、防删除位),简称SBIT
SBIT有哪些限制和作用呢?
-
仅对目录有效,对文件无效
-
当使用者在该目录下建立文件或目录时(有权限的情况下),仅自己与 root 才有权力删除新建的目录或文件
特殊权限的修改
操作这些标志与操作文件权限的命令是一样的, 都是chmod. 有两种方法来操作,
(1)符号类型改变权限
chmod u+s testbin
为testbin
文件加上setuid
标志.
chmod g+s testdir
为testdir
目录加上setgid
标志
chmod o+t testdir
为testdir
目录加上sticky
标志
(2) 数字类型改变档案权限
采用八进制方式。对一般文件通过三组八进制数字来置标志, 如 666, 777, 644
等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如 4666, 2777
等. 这一组八进制数字三位的意义如下,
abc
a - setuid
位, 如果该位为1
, 则表示设置setuid 4
b - setgid
位, 如果该位为1
, 则表示设置setgid 2
c - sticky
位, 如果该位为1
, 则表示设置sticky 1
luzelin@DESKTOP-5VT4IIQ test % touch file
luzelin@DESKTOP-5VT4IIQ test % ls -l file
-rw-r--r-- 1 luzelin luzelin 0 Oct 2 00:17 file
luzelin@DESKTOP-5VT4IIQ test % chmod 7777 file
luzelin@DESKTOP-5VT4IIQ test % ls -l file
-rwsrwsrwt 1 luzelin luzelin 0 Oct 2 00:17 file
luzelin@DESKTOP-5VT4IIQ test % chmod 4477 file
luzelin@DESKTOP-5VT4IIQ test % ls -l file
-r-Srwxrwx 1 luzelin luzelin 0 Oct 2 00:17 file
设置完这些标志后, 可以用ls -l
来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如
rwsrw-r--
表示有setuid
标志
rwxrwsrw-
表示有setgid
标志
rwxrw-rwt
表示有sticky
标志
那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)