细数Linux的文件权限

普通权限

普通权限使用ls -l查看,最前面显示的即是,如:

# ls -l `which bash`-rwxr-xr-x 1 root root 964536 4月   1 10:17 /usr/bin/bash

-rwxr-xr-x 就是bash文件的权限,一共10位:

-/d/l/...  rwx rwx rwx
 1位
-表示文件,d表示文件夹,l表示链接文件

3位
所属用户的读、写、执行权限
-表示没有对应的权限

3位
所属用户组的读、写、执行权限
-表示没有对应的权限
3位
其他用户的读、写、执行权限
-表示没有对应的权限

所以,这个bash文件的权限就是:所属用户有读、写、执行权限,所属用户组的其他用户有读、执行权限,其他用户则只有执行权限。

普通权限使用chmod修改,命令中分别用u、g、o表示用户(user)、用户组(group)、其他(other),a表示所有(all),示例:

# chmod g+w 1.txt  # 给所属用户组增加写权限
# chmod go-rw 1.txt  # 可以组合使用,给所属组和其他用户取消读、写权限
# chmod a+x 1.txt  # 给所有用户增加执行权

同时chmod还支持数字权限,读(r)为4、写(w)为2、执行(x)为1,实际权限就是加起来的总和,比如7就表示rwx,示例:

# chmod 777 1.txt  # -rwxrwxrwx
# chmod 644 1.txt  # -rw-r--r--

了解了数字权限,下面通过umask命令查看新建文件的默认权限:

# umask
0022

这个值是掩码,也就是默认除去的权限,第一位的0表示这是一个八进制数字,后三位与上文一致表示u、g、o中除去的权限,022相当于go-w,那么新建时的逻辑是:

  当创建目录时:由最大权限777-022得出新建目录的默认权限755,也就是drwxr-xr-x

  当创建文件时:由最大权限777-022=755,然后由于初始文件不能有执行权限(为了安全),若包含了就要减掉,所以这里每位都要再减1,最终就是644,也就是-rw-r--r--

    注:由于r、w的数字是偶数(2和4),x是奇数(1),所以也可以这样描述,777减022后得出的三位数字,偶数保留,奇数减1

若要修改默认权限,只需要修改这个掩码即可,临时修改直接命令行执行,若要永久生效就写入profile或bashrc,改为0033的命令:

# umask 0033

特殊权限

特殊权限可以用来解决这样的一个问题:系统用户的密码都存储在/etc/shadow中,该文件非常重要不能开放权限,但其他用户又必须要能修改自己的密码,于是给可信任的passwd命令增加特殊权限,这样其他用户使用passwd时将获得与所有者(root)一样的权限,执行完毕权限自然也收回;

看看passwd的权限:

# ls -l `which passwd`
-rwsr-xr-x 1 root root 27832 6月  10 2014 /usr/bin/passwd

一个s代替了user上的x,这个即是特殊权限,有下面三种:

特殊权限 表现形式 命令操作 说明
SUID s代替user上的x chmod u+s xxx

只对二进制程序有效,执行时获得程序所有者的权限,执行完毕权限失效

举例:/usr/bin/passwd

注:慎用,这个权限可能超乎想象,比如给vi和rm赋予该权限,由于这俩通常属于root,那么任何人都可以编辑和删除任何文件了

SGID s代替group上的x chmod g+s xxx

对二进制程序有效,执行时获得程序所属用户组的权限,执行完毕权限失效(逻辑与suid一样,但影响没那么大,不过也要慎用)

对文件夹有效,文件夹内新建的目录和文件都必然属于该用户组,方便统一管理

SBIT t代替other上的x chmod o+t xxx

也叫粘滞位,只对文件夹有效,文件夹内的文件只有其所有者或root才能删除、移动、重命名

举例:/tmp就设置了该权限,故虽然其权限是777,但对其他用户的文件不能进行删除和修改

特殊权限同样有数字权限:SUID:4,SGID:2,SBIT:1,chmod中在普通权限之前加一位表示特殊权限,如:chmod 2755 xxx

隐藏属性

明明有权限却无法删除,甚至root都无权操作,那么八成是隐藏属性在限制;

隐藏属性使用lsattr查看,如:

# lsattr 1.txt 
-------------e-- 1.txt

可以看到只有一个e属性,,下面是一些常见的:

a 使文件只可被追加内容,只有root可设置
A 使文件被访问时atime不被修改
c 使文件在被读写时由内核进行压缩
d 使文件不会被dump备份
D 作用于文件夹,使其被修改时立即同步到磁盘上
e 表示文件以ext4 extents存储的,ext4上新建文件的默认属性,不可用chattr修改
i 使文件不能被修改、删除、重命名、链接,只有root可设置

隐藏属性使用chattr修改:


# touch 1.txt # chattr +i 1.txt # lsattr 1.txt ----i--------e-- 1.txt # chattr -i 1.txt # lsattr 1.txt -------------e-- 1.txt

ACL权限

acl,即访问控制列表,可以针对某个用户或用户组进行单独的权限设置;

用root创建一个只有自己有权限的目录/tmp/acl,使用getfacl查看:

# cd /tmp
# mkdir -m 700 testacl # ls -ld testacl drwx------ 2 root root 4096 7月  28 18:03 testacl
# getfacl testacl  # 此时没有额外的acl权限
  # file: testacl
  # owner: root
  # group: root
  user::rwx
  group::---
  other::---

下面用setfacl配置读写权限给develop账号:

# setfacl -m u:develop:rwx testacl/  # 给用户develop增加rwx权限,可以加-R递归到子目录
# setfacl -m g:develop:rx testacl/  # 给用户组develop增加rx权限,可以加-R递归到子目录
# getfacl testacl/
  # file: testacl/
  # owner: root
  # group: root
  user::rwx
  user:develop:rwx
  group::---
  group:develop:r-x
  mask::rwx
  other::---

注:acl权限会覆盖原有权限而不是组合,比如原来develop拥有属于other的r-x权限,将acl设置为-w-,那么develop的最终权限为-w-而不是rwx,所以若需要rwx则应直接将acl设置为rwx

删除acl权限:

# setfacl -x u:develop testacl/  # 删除用户develop的权限,可以加-R递归到子目录
# setfacl -b testacl/  # 删除所有额外的acl权限,可以加-R递归到子目录 # getfacl testacl/ # file: testacl/ # owner: root # group: root user::rwx group::--- other::---

over

posted @ 2018-07-20 10:34  晚来秋  阅读(669)  评论(0)    收藏  举报