文件权限——Linux基本命令(8)

1.文件权限

(1)权限分类

文件的权限主要针对三类对象进行定义:

owner: 属主, u

group: 属组, g

other: 其他, o

每个文件针对每类访问者都定义了三种权限:

r: Readable

w: Writable

x: eXcutable

(2)权限定义

普通文件和目录文件对于权限的定义不太相同:

普通文件:

r: 可以读取文件的内容

cat less more nano vim 执行脚本

w: 可以修改文件的内容

nano vim > >> tee gedit

x: 可以执行该文件

执行脚本

目录文件:

r: 用户可以列出目录下有哪些文件(不能查看文件的详细信息)

w: 只有w无意义。

x: 用户可以进入该目录(如果知道文件名,且有相对应的文件权限 ,可以执行对应的操作)

rx: 用户可以进入目录,且可以长列出。

rw:等于只有r

wx: 能进入,能创建能删除,不能列出。故用户能否删除文件与文件自身权限无关。

rwx: 全部权限。

---:null

(所以一般都是rx,rwx,---比较常见,比较有用)

X 当文件本身没有x权限时,则跳过,一般用于批量修改多个文件、目录的权限时,自动跳过没有执行权限的文件。(只给目录x权限,不给文件x权限)

(3)权限判断的顺序

先判断是否是文件的所有人,如果是,则执行所属人的权限后结束,如果不是所有人,则判断是否所属组(可以是主组也可以是辅助组),如果是,则执行所属组的权限后结束,如果不是则执行其他人的权限后结束。

所有人->所有组->其他人


2.修改文件的属主和属组

(1)chown

chown : change owner

owner.group(同时修改属主属组 .也可以替换成:)

以上只有root才能修改文件的所有人

:group或 .group  文件的owner也可以使用chown修改文件的所属组(owner必须属于目标组)

-R  递归 (可以直接将目录以及子目录中所有文件都修改掉)

--reference sourcefile tarfile(可以将tarfile文件的属主属组改成与sourcefile一样)

如图,将text的权限也改成了keke,lky。

(2)chgrp

chgrp : change group

文件的owner可以修改文件的所属组(owner必须属于目标组)

-R  递归

--reference sourcefile tarfile


3.文件权限

rwx三位用二进制来计算转换,有则为1,没有则为0

因此,权限一共就可以用三个数字来表示

例如:

640: rw-r-----

755: rwxr-xr-x


4.修改文件权限

chmod

只有所属人和root可以更改文件的权限

(1)使用字符修改

人物 动作 行为

ugo  +-= rwx  (u:owner  g:group  o:other )

可以一次修改很多个人物,如果每个人需要修改的内容不一致,可以分开改,用,隔开。

u=....,g=...,o=...

chmod ugo+rwx   如果需要修改的内容一致,就可以放在一块修改

a=rwx      a代表ugo三个一起

(2)使用数字修改

也可以根据文件权限的数字来直接修改多个人物的权限。

例如:想要修改成r w x r w - r - -

          1 1 1,1 1 0,1 0 0

7    6   4

得出三位数字764

使用764即可修改成功

同理,777和000分别表示全部填满和全部为空。

(PS:如果只输入3,则会默认为003,同理输入43即为043)


5.默认权限

(1)umask

当我们建立一个目录或档案时,它都会带一个默认的权限:

如图,目录默认为755,文件默认为644。那么,为什么默认值是这样的呢?其实是由umask控制的。

使用umask命令查询umask值,为022。(暂时先不看第一位)

我们知道对于一个目录来说,最高权限为777,对于文件来说,最高权限为666。(因为文件有x是一个有风险是事情,所以默认生成时没有x)。

由此我们可以得出结论了,生成文件或目录时,默认值就是由最高权限减去umask值得到的。755=777-022;644=666-022

那么我们来试着修改一下umask。

如图将umask修改为642,那我们再创建目录时发现权限果然默认为135,文件的默认权限为024。

值得注意的是:当umask中全部是偶数时,可以直接减,当umask中包含奇数时,对于目录直接减,对于文件,在奇数所在的位减完后加一。

(因为文件没有x位,而所有奇数一定都带x,因此没法减,每次必定多减了一个x,所以应该加回去,即加一)

如图,可以看到权限确实为756和646.

(2)模式方式显示

umask –S 可以直接模式方式显示,不显示数字的方式

也可以使用-S修改umask,此时设置的为最终权限,不需要减

如图,修改成功

(3)复制时的权限

当我们创建文件时,文件权限为最大权限减umask值,但是当我们复制时,复制出来的文件权限为原文件减umask值。

如图,testfile1的权限为testfile-022.

(4)永久设置umask

用户设置:

如果只用命令umask设置umask的值,在退出登录之后又会恢复原来的默认值022。如果想永久的设置umask的值,需要修改.bashrc文件。

如图,在文件中加入代码,保存后即可设置成功。

(注意:设置后不会立即生效,需要重新登录才能生效。如果想让它立即生效,可以输入. .bashrc或者source .bashrc即可生效)

还有一种方法可以一次设置所有用户的umask值,修改/etc/bashrc文件

找到这几行,这一块的意思是普通用户umask值为002,root用户umask值为022,因此将002的值修改为需要的值即可。


6.关于命令的权限

(1)命令权限

有的时候能否使用命令作用于对象的时候,并不只取决于对象是否有权限,还应考虑命令的权限。

命令的属主属组都是root,在正常情况下,命令的权限都是755,因此任何用户都可以使用。如:touch,cat这类的命令。

但是有些命令,如groupmems,它的权限为750,因此它只能由root执行。

如图,切换到普通用户下,不能执行groupmems命令。

(2)三个特殊权限

但是,我们发现/etc/shadow文件的权限为000,理论上仅仅只有root用户能读写(root是天神,没有特殊说明任何文件都在root的管辖之下),那我们是怎么使用其他用户修改密码的呢?

我们在修改密码时需要使用passwd命令,让我们查看一下此命令:

我们发现,在u的第三位上不是x而是s,这就是原因所在了。

这个s代表SUID权限,它的作用是:当对一个可执行的二进制文件作用了SUID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属人的权限。

也就是说我们在执行passwd时,其实是暂时把我们当做root来运行这个命令,因此可以修改/etc/shadow文件了。

同理,在g的第三位也会有s替代x的时候,那个s代表SGID权限,当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限。当对一个目录作用了SGID权限之后,任何对该目录有wx权限的用户在该目录下创建的文件及目录的所有属组均为该目录的所有组。

同样的,在o的第三位可以加上t,这个t代表Sticky权限,当对一个目录作用了sticky之后(只限制组用户,目录的owner不受影响),该目录下的文件仅其所属人才能删除。

(3)特殊权限数字法

SUID SGID STICKY

000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7

前面我们只说了umask值里看后三位,那么第一位代表的就是特殊权限。所以根据上面的表,如果想要只加入SUID权限,即100为4,所以第一位应该填4。

如图所示,设成了SUID权限。

(4)特殊权限的表示

特殊权限虽然占据了x的位置,但是并不代表替换了x(只是因为没有地方表示了),所以我们需要区分既有x又有特殊权限时怎么区分。

映射表如下:

SUID: user,占据属主的执行权限位

s: 属主拥有x权限

S:属主没有x权限

SGID: group,占据属组的执行权限位

s: group拥有x权限

S:group没有x权限

Sticky: other,占据other的执行权限位

t: other拥有x权限

T:other没有x权限

如图,本身ug上都没有x位和s位,分别加上SUID和SGID权限,发现它们的S都是大写的,我们试着在u上加上x权限,发现u上的s果然变成了小写。


7.隐藏属性

(1)查看属性

linux下的文件还有一些隐藏的属性,我们可以用lsattr命令来查看:

(2)修改属性

chattr命令可以改变一个文件的隐藏属性。

chattr

+i  不能删除不能改

+a  不能删除,只能追加


8. 访问控制列表ACL

(1)ACL

ACL:AccessControl List,可以用来实现灵活的权限管理。除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。

(2)开启方式

CentOS7当中,无论是操作系统安装时还是之后手工创建的文件系统(xfs、ext4)均会开启ACL功能。

CentOS6及之前的版本,仅操作系统安装时创建的文件系统才会默认开启ACL,手工创建的文件系统,需要手工开启ACL功能。

开启方式:

方法一:mount -o acl /dev/sda7

取消的方式,重新挂载时不指定即可

方法二:tune2fs -o acl /dev/sda7

取消的方式 tune2fs -o ^acl /dev/sda7

(3)ACL权限判断的顺序

先判断是否是文件的OWNER,如果是,则执行OWNER的权限后结束,如果不是OWNER,则判断是否是ACL的USER,如果是则执行USER权限后结束,如果不是ACL的USER, 则判断是否属于GROUP或ACL GROUP,如果是,则取最大权限。如果不属于任何GROUP,则执行OTHER。

所有人->所有组->其他人

(4)查看ACL权限

getfacl file|directory   查看ACL

-R  作用在目录上,递归显示目录里每一个文件的ACL权限

(5)设置ACL权限

setfacl参数

-m设置后续acl参数

如图,设置完之后最后一位会变成+

u:[用户名]:[rwx] 设置某个用户的权限

                     g:[用户组]:[rwx] 设置某个组的权限

-R 同样表示递归(可以一次性修改目录以及目录下所有文件的ACL权限)

setfacl -m mask:rwx f1 设置MASK

chmod g=rwx f1 一旦设置了ACL权限后,原有的文件GROUP不可再更改,使用chmod即修改ACL MASK

mask只影响除所有者和other的之外的人和组的最大权限Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

用户或组的设置必须存在于mask权限设定范围内才会生效

Mask值会限制最大权限。

ACL MASK随着新的ACL设置会被重置,重置的标准是让该文件上的所有ACL及文件原GROUP上的权限都有效。

因为MASK随着ACL的设置会变化,因此应该最好最后设置MASK。

setfacl -m d:u:user:rwx d1  设置ACL默认权限,目录新创建的文件都会被设置成默认权限,当前已创建的文件不变。

setfacl -k d1 删除全部默认权限

setfacl -M acl.txt f1[dir1]  将acl.txt内容导入文件

acl.txt内容来自getfacl f1 > acl.txt,

如下,先使用>将内容导出到acl.txt。

删除ACL权限之后用-M导入,发现权限又回去了。

setfacl -x u:user f1  单独去除一条ACL权限

setfacl -X aclrm.txt f1[ f2 f3 *] 批量删除

aclrm.txt内容如下

u:liubei

g:shuguo

同样的,先编辑一个aclrm.txt文件,然后再执行命令。这样就可以设置删除liubei和shuguo的ACL设置。(如果没有shuguo或者liubei就不删除,也不会报错)

setfacl -b f1 去除该文件上的ACL属性。

(6)备份和恢复ACL

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息。

getfacl -R /tmp/dir1 > acl.txt  将目录下的所有文件的ACL属性备份到文件(路径是相对路径)

setfacl -R -b/tmp/dir1      清除目录下所有文件的ACL属性

两种还原方法:

setfacl -R --set-file=acl.txt/tmp/dir1  通过文件还原ACL属性的方法1

setfacl --restore acl.txt         通过文件还原ACL属性的方法2

时间: 2024-10-17 00:18:56

文件权限——Linux基本命令(8)的相关文章

初识 Linux 文件权限--Linux基础教程

初识 Linux 文件权限--Linux基础教程 在 Linux 中最基本的任务之一就是设置文件权限.理解它们是如何实现的是你进入 Linux 世界的第一步.如您所料,这一基本操作在类 UNIX 操作系统中大同小异.实际上,权限系统就直接取自于 UNIX 文件权限(甚至使用许多相同的工具). 但不要以为理解文件权限需要长时间的学习.事实上会很简单,让我们一起来看看你需要了解哪些内容以及如何使用它们. 基础概念 你要明白的第一件事是文件权限可以用来干什么.当你设置一个分组的权限时发生了什么?让我们

高级文件系统管理——Linux基本命令(15)

1.配置配额 (1)初始化 分区挂载选项:usrquota.grpquota(用户挂载,组挂载) 初始化数据库:quotacheck -cug /home (2)执行 开启或者取消配额功能:quotaon.quotaoff (开启之后发现就无法删除了,被保护了) 直接编辑配额:edquota -u/g username(对用户.对组做配额限制) 分别对文件的大小和数量进行限制.软限制就是可以允许超过软限制会发出警告,而硬限制不允许超过.因此设置的时候,软应该小于硬. 在shell中直接编辑: s

Linux的文件权限

Linux一般将文件可存取訪问的身份分为3个类别:owner.group.others.且3种身份各有read.write.execute等权限. 一.用户和用户组 1.文件全部者 由于Linux是多用户.多任务的操作系统.因此可能经常有多人同一时候在某台主机上工作.但每一个人均可在主机上设置文件的权限.让其成为个人的"私密文件",即个人全部者.由于设置了适当的文件权限,除本人(文件全部者)之外的用户无法查看文件内容. 比如某个MM给你发了一封Email情书,你将情书转为文件之后存档在

深入理解Linux中的文件权限

Linux中文件权限 Linux中每个文件都有一个特定的拥有者(一般是创建它的用户)和所属用户组,这是它的固有属性.文件可以利用这两个固有属性来规定它的拥有者或者是所属用户组内的用户是否拥有对它的访问权利,即读.写和执行的权利.此外为了提高适应性,文件还规定了其他不相关的人等的访问权限,也就是第三个固有属性.这三个固有属性和三个权利合起来,就构成了文件针对系统中所有用户的访问控制,也就构成了Linux中的文件权限体系. 1.1 使用ls命令的-l选项查看root家目录,结果如下 [[email 

【转】第六章、Linux 的文件权限与目录配置

原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission.php 最近更新日期:2009/08/18 Linux最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了. Linux一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限.若管理不当,你的Linux主机将会变的很『不

文件权限的介绍和使用(第六章之前)

**1.文件属性查看 ls -l filename -|rw-r--r--.|1|root|root|46|oct 1 05:03|filename 1   2     3  4  5  6    7       8 "-"文件类型 -     普通文件 d    目录 c    字符设备 s    套接字 p    管道 b    块设备 l    连接 rw-r--r--:文件读写权限 rw-|r--|r-- *  &   @ *所有人的权限 &所有组的权限 @其他

CentOS学习笔记--文件权限概念

Linux 文件权限概念 当你的屏幕出现了『Permission deny』的时候,不要担心,『肯定是权限设定错误』啦!(以下节选自 鸟哥的 Linux 私房菜 第六章.Linux 的文件权限与目录配置 2. Linux文件权限概念) Linux文件属性 在你以root的身份登入Linux之后,下达『 ls -al 』看看,会看到底下的几个咚咚: [[email protected] ~]# ls -al total 64 dr-xr-x---. 2 root root 4096 Dec 18

取ip,特殊命令和文件权限

取ip不低于3种方法 [[email protected] ~]# ifconfig eth0 |sed -nr '2s#^[^0-9]*([0-9.]*) .*$#\1#gp' 192.168.17.130 [[email protected] ~]# ifconfig eth0 |sed -n '2p'|awk -F "[ :]+" '{print $4}' 192.168.17.130 [[email protected] ~]# ifconfig eth0 |sed -n '2

文件属性、正则表达式、文件权限

一.文件属性 [[email protected] ~]# ls -lhi /etc/hosts 39 -rw-r--r--. 2 root root 352 Nov 19 2018 /etc/hosts 39:inode号码 -:文件类型 rw-r--r--. :文件的权限.(与selinux有关,关闭selinux就无点) 2:文件硬链接数量 root root:属主,属主组 352:文件的大小 Nov 19 2018:文件修改时间 *文件名不属于文件属性 (一)inode和block简介