3.2 文件权限的管理

以下是针对传统Linux文件系统(ext,xfs等)进行的学习,与其他文件系统(NTFS,FAT32等)无关

文件类型

    在Linux的文件系统中与Windows不同,Linux没有后缀。也就是说,在Linux中,即使没有后缀,系统依然能够判断出文件的类型,后缀只是方便用户管理文件的一种直观方法。

    那么系统在判断文件类型时,会对文件的头部信息进行识别。用户使用

    file命令用于判断系统中文件的类型。

    语法:file [选项] 文件

[root@CentOS6 ~]# file /bin/touch
/bin/touch: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

    file命令在对文件进行探测时,会对先探测文件的文件的文件系统,再是魔数,最后是语言,所以不是Linux传统文件系统下的文件是不能够被探测出来的。

    Linux常见的文件类型有:普通文件(-)、块设备文件(b)、目录(d)、链接(l)、管道文件(p)、字符文件设备(c)、套接字文件(s)

文件权限

    Linux的文件权限分为:读(read)、写(wirte)、执行(execute)三种。

[root@CentOS6 boot]# ll /data
total 268
drwxr-xr-x. 2 root root   4096 Apr  1 12:03 account

    其中第一个字段为:

 

    其中r代表读权限,w代表写权限,x代表执行权限,而-代表没用对应位置的权限。也可以用数字表示文件的权限,分别对应为

    新建默认的文件权限是666,文件夹权限是777

    新建文件的权限取决于  umask  的值,默认root为022,普通用户为002

[root@CentOS6 ~]# umask
0022

    可以在/etc/bashrc(全局)或者~/.bashrc(局部)中修改。

    umask值是新建文件权限的掩码,意在取消对应位上的权限。所以新建的文件权限是:     

1 1 0 1 1 0 1 1 0      1 1 1 1 1 1 1 1 1         1 1 0 1 1 0 1 1 0       1 1 1 1 1 1 1 1 1
0 0 0 0 1 0 0 1 0      0 0 0 0 1 0 0 1 0         0 0 0 0 0 0 0 1 0       0 0 0 0 0 0 0 1 0
                                                                                                                               
1 1 0 1 0 0 1 0 0      1 1 1 1 0 1 1 0 1         1 1 0 1 1 0 1 0 0      1 1 1 1 1 1 1 0 1

          6 4 4                        7 5 5                           6 6 4                        7 7 5

    对于文件夹来说读权限决定用户能否查看文件夹中文件的目录

[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen/ -d
d-wx-wx-wx. 2 root root 17 Apr  5 16:21 /data/jiangbowen/
[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen
ls: cannot open directory /data/jiangbowen: Permission denied

    而写权限决定用户能否对文件夹的目录结构进行更改

[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen -d
dr-xr-xr-x. 2 root root 17 Apr  5 16:21 /data/jiangbowen
[jiangbowen@CentOS7 ~]$ touch /data/jiangbowen/file
touch: cannot touch ‘/data/jiangbowen/file’: Permission denied

    最后,执行权限决定用户能否访问文件夹里的内容

[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen -d
drw-rw-rw-. 2 root root 17 Apr  5 16:21 /data/jiangbowen
[jiangbowen@CentOS7 ~]$ cat /data/jiangbowen/who
cat: /data/jiangbowen/who: Permission denied

    对于文件来说,root在没有执行权限时也是无法执行文件的。

    当文件判断用户是否对其拥有权限时,会根据所有者->所属组->其他人的顺序进行判断,一旦符合一种身份便不会继续向下继续判断。

[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen
total 4
--w-rw-rwx. 1 jiangbowen jiangbowen 38 Apr  5 16:29 who
[jiangbowen@CentOS7 ~]$ cat /data/jiangbowen/who 
cat: /data/jiangbowen/who: Permission denied

    除了读、写、执行三种权限之外,还有三种特殊权限:SetUID、SetGID(s)和SBIT(t)

    SUID:当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份访问资源。但是只有可执行的二进制程序才可以设置SUID,并且文件的所有者要对文件拥有执行权限,当程序结束时,系统会收回用户的SUID权限。

    SGID:继承所属组的所有权限。在文件夹具有SGID权限时,新建的文件所有者将自动属于文件夹的属主。

    Sticky:当一个目录设置SBIT权限后,目录内的文件只能够被文件的所有者删除。

权限管理

    chown命令用于更改文件的所有者。使用-R选项可以实现递归修改,将目录下的文件和目录所有者全部更改。

    语法:chown [-R] 文件

[root@CentOS7 data]# chown jiangbowen /data/haha 
[root@CentOS7 data]# ll /data/haha 
-rw-r--r--. 1 jiangbowen root 8 Apr  5 17:18 /data/haha

    chgrp命令用于个更改文件的所属组,与chown命令有语法相同。

    chmod命令用于更改文件的权限。

    语法:chmod [选项] 行为 

[root@CentOS7 data]# ll -a dir1/
total 0
drwxr--r--. 3 root       root 38 Apr  5 18:58 .
drw-r--r--. 3 jiangbowen root 28 Apr  5 18:48 ..
drw-r--r--. 3 root       root 28 Apr  5 18:48 dir2
-rw-r--r-x. 1 root       root  0 Apr  5 18:48 f2
-rw-r--r--. 1 root       root  0 Apr  5 18:58 f3
[root@CentOS7 data]# chmod -R +X /data/dir1/
[root@CentOS7 data]# ll -a dir1/
total 0
drwxr-xr-x. 3 root       root 38 Apr  5 18:58 .
drw-r--r--. 3 jiangbowen root 28 Apr  5 18:48 ..
drwxr-xr-x. 3 root       root 28 Apr  5 18:48 dir2
-rwxr-xr-x. 1 root       root  0 Apr  5 18:48 f2
-rw-r--r--. 1 root       root  0 Apr  5 18:58 f3

    选项

-R 递归改变文件权限
--refernce=file  将file文件的权限复制给其他文件

+X 将文件夹和带有执行权限的文件全部赋予执行权限

    在文件被赋予特殊权限(s,t)时,对应对象拥有执行权限会以小写表示,没有则是大写

    chattr命令用于更改文件的特定权限。可以使用lsattr命令查看文件的特定权限。

    语法 :chattr [-R] 行为 文件

[root@CentOS7 data]# chattr +ai dir1/f3
[root@CentOS7 data]# lsattr dir1/f3
----ia---------- dir1/f3
[root@CentOS7 data]# 

    行为

a:让文件或目录仅供追加;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;

u:预防意外删除。

控制访问列表(ACL)

    ACL可以实现更加灵活的权限管理。他的生效顺序是:所有者->ACLowner->ACLgroup->其他人

    setfacl命令用于在命令行里设置ACL。

    语法:setfacl [选项] 对象类型:对象:行为 文件

[jiangbowen@CentOS7 ~]$ ll /data/dir1/f2
-rwxrwxr-x+ 1 root root 0 Apr  5 18:48 /data/dir1/f2
[jiangbowen@CentOS7 ~]$ ls /data/dir1/f2
/data/dir1/f2
[jiangbowen@CentOS7 ~]$ getfacl /data/dir1/f2
getfacl: Removing leading '/' from absolute path names
# file: data/dir1/f2
# owner: root
# group: root
user::rwx
user:jiangbowen:rwx
group::r-x
mask::rwx
other::r-x

    选项

-m, --modify=acl:修改文件或目录的扩展ACL设置信息
-x, --remove=acl:从文件或目录删除一个扩展的ACL设置信息
-b, --remove-all:删除所有的扩展的ACL设置信息
-n, --no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定

-R, --recursive:操作递归到所有子目录和 文件

    mask值限制了除了所有者与其他人以外的用户最大权限,当其对应权限超过mask时,则不会生效,以mask的值为最大权限。可以使用-mask选项设置mask的值。

    getfacl命令用于查看文件的acl权限。-R实现递归查看目录下的acl权限设置。

    利用重定向至文件,可以将文件的acl权限设置进行备份。在需要时使用  setfacl --setfile=备份 文件  可以还原已经备份的acl权限设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值