Last Updated: 2023-07-02 14:11:12 Sunday
-- TOC --
inode中包含了i_mode,这里面存放的是文件和目录的基本权限信息。而acl字段,对应的是扩展权限。Linux下有一组命令,用来操作这些权限。当然,我们首先要理解这些权限的含义。
Linux系统的基本权限控制分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
umask命令能够显示和设置用户创建文件和目录时,要去掉的权限!8进制显示。一般情况掩码(mask)用来执行与and
操作,umask是反掩码,先取反再执行and操作。
$ umask
0002
$ touch f1
$ mkdir f2
$ ll
-rw-rw-r-- 1 xinlin xinlin 0 1月 29 11:12 f1
drwxrwxr-x 2 xinlin xinlin 4096 1月 29 11:12 f2/
$ stat f1 | grep 'Access: ('
Access: (0664/-rw-rw-r--) Uid: ( 1000/ xinlin) Gid: ( 1000/ xinlin)
$ stat f2 | grep 'Access: ('
Access: (0775/drwxrwxr-x) Uid: ( 1000/ xinlin) Gid: ( 1000/ xinlin)
当umask显示出0002这个值的时候,创建文件和目录的默认权限分别为664和775。默认新文件都没有可执行权限,umask值去掉的,是other的w权限。文件夹的可执行权限,就是可以进入文件夹,默认是有的,去掉的,也是other的w权限。
最前面那个0所在的位置,表示特殊权限,可以取值0-7,默认不写时就是0,表示没有任何特殊权限。
取反(~)后与(and):
>>> oct(0o777 & ~0o002) # folder
'0o775'
>>> oct(0o666 & ~0o002) # file
'0o664'
目录天生就比文件多x权限,否则目录就进不去了。
$ umask -S
u=rwx,g=rwx,o=rx
用-S
参数,看到的是保留的权限,而文件一开始就没有x权限,没法保留本就没有的东西。
在Windows系统中,新建的文件和目录时,通过继承上级目录的权限获得的初始权限,而Linux不同,它是通过使用 umask 设置默认不给权限,来给所有新建的文件和目录赋予初始权限。
** 设置或修改umask值 **
$ umask 022
$ umask
0022
$ umask u=rwx,g=rx,o=rx
$ umask -S
u=rwx,g=rx,o=rx
$ umask
0022
设置为0022
是很常见的操作,可适当提高一点安全性,这也是fedora系统的默认值。
chmod命令用来修改Linux下文件和目录的基本访问权限。
chmod一般使用如下:
$ chmod [0]755 <filename>
给文件增加或减少可执行权限:
$ chmod +x <filename>
$ chmod a+x <filename>
$ chmod -x <filename>
$ chmod a-x <filename>
$ chmod ugo+x <filename>
$ chmod ugo-x <filename>
a+x
表示对所有人(all)加上或减少x权限,a
可以省略不写。
如果只是对部分用户调整某个权限位,通过ugo
来实现,比如只对o
ther用户减少w
权限:
$ chmod o-w <filename>
另一种表达方式是用=
号:
$ chmod go=rw <filename>
$ chmod u=rw,go= <filename>
go=
表示没有任何权限,即清空所有权限。
chmod命令的-R
,可以实现对某个目录下所有文件递归修改权限。
suid权限显示在owner的w位上,用s
表示,可执行文件可能有此权限。
$ ll /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 7月 15 2021 /usr/bin/passwd*
可执行文件passwd命令在owner权限的x位置,设置成了s,这就是setuid权限(或称suid权限)。
setuid权限的含义是:当程序启动时,不是用启动它的用户的权限执行,而是以该文件的owner的权限执行。启动它的用户当然需要有对应的x权限。
SUID特殊权限具有如下特点:
设置SetUID:
$ chmod u+s <filename>
$ chmod 4755 <filename>
取消SetUID:
$ chmod u-s <filename>
$ chmod 755 <filename>
SetUID权限存在安全隐患,不要随便给程序增加这个权限。
当看到大写S
时,表示有setuid权限,但是没有x权限,这是一个错误,用大写提示!
setgid权限与setuid有类似之处:当程序启动时,以该文件的group的权限执行。
setgid可以用于目录,这是它与setuid权限的不同之处。当用户在具有setgid权限的目录内创建文件时,新文件的group不属于用户所在的组,而是属于父目录所在的组。共享目录有时会使用这个权限。
设置setgid权限:
$ chmod g+s <dirname>
$ chmod 2755 <dirname>
取消setgid权限:
$ chmod g-s <dirname>
当看到大写S
时,表示有setgid权限,但是没有x权限,用大写提示!
这是对目录使用的一个特殊权限,它表示在此目录中,某用户不能删除其它用户创建的文件,典型如/tmp目录
:
$ ls -ld /tmp
drwxrwxrwt. 20 root root 480 Jun 30 14:18 /tmp
other的w位,被替换成了t
,这就是sticky bit。
设置sticky权限:
$ chmod o+t <dirname>
取消sticky权限:
$ chmod o-t <dirname>
当看到大写T
时,表示有sticky权限,但是没有x权限,用大写提示!
本文链接:https://cs.pynote.net/hd/hdisk/202306301/
-- EOF --
-- MORE --