文件权限操作

文件权限操作    文件权限操作

文件权限操作

 

第一个字符代表这个文件是『目录、文件或链接文件等等』:
o 当为[ d ]则是目录,例如上表档名为『.config』的那一行;
o 当为[ - ]则是文件,例如上表档名为『initial-setup-ks.cfg』那一行;
o 若是[ l ]则表示为连结档(link file);
o 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
o 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
· 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表
可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出
现减号[ - ]而已。
o 第一组为『文件拥有者可具备的权限』,以『initial-setup-ks.cfg』那个文件为例, 该文件的拥有者
可以读写,但不可执行;
o 第二组为『加入此群组之账号的权限』;
o 第三组为『非本人且没有加入本群组之其他账号的权限』。

drwxr-xr-x.   ##可用二进制表示(111 101  101  >>  700:十进制,三位二进制对应一位十进制)

d:标识节点类型(d:文件夹    -:文件     l:链接)

r : 可读read    w:可写write(不可修改但可删除)    x:可执行execute(可运行:是否可进入)

组件 内容 迭代物件 r w x
文件 详细资料data 文件文件夹 读到文件内容 修改文件内容 执行文件内容
目录 档名 可分类抽屉 读到档名 修改档名 进入该目录的权限

注意:在用户的文件目录下(家目录下)的文件即使没有权限,仍可完成任何权限的操作。

第一组rwx:表示文件拥有者对其的权限

第二组r-x:表示文件所属组对其的权限

第三组r-x:表示文件其他用户对其的权限

 

§ 第二栏表示有多少档名连结到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的 i-node 中,不过,我们使用的目录树却是使用文件
名来记录, 因此每个档名就会连结到一个 i-node 啰!这个属性记录的,就是有多少不同的档名连结
到相同的一个 i-node 号码去就是了。 关于 i-node 的相关资料我们会在第七章谈到文件系统时再加强
介绍的。
§ 第三栏表示这个文件(或目录)的『拥有者账号』
§ 第四栏表示这个文件的所属群组
在 Linux 系统下,你的账号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1, class2, class3
均属于 projecta 这个群组,假设某个文件所属的群组为 projecta,且该文件的权限如图 5.2.2 所示
(-rwxrwx---),则 class1, class2, class3 三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。
但如果是不属于 projecta 的其他账号,对于此文件就不具有任何权限了。
§ 第五栏为这个文件的容量大小,默认单位为 bytes;
§ 第六栏为这个文件的建档日期或者是最近的修改日期:
这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了,那么时间部分
会仅显示年份而已。 

§ 第七栏是文件档名。

1、更改权限

命令:$ chmod  g-rw 文件名    ##去掉文件群组对文件的  r   w   权限,g表示group

命令:$chmod  o-rw  文件名    ##去掉其他人对文件的  r   w   权限

命令:$ chmod  u+x  文件名    ##对文件所属用户增加    x   权限

命令:$ chmod  u=rwx,go=rx  文件名    ##修改文件权限为rwxr-xr-x。

命令:$ chmod  a+w  文件名    ##对文件所有用户增加可写权限,a=all即所有用户的意思。

命令:$ chmod  -R  十进制   目录    ##将文件目录及其子文件属性全部更改为(十进制)

第二种方式,通过数字类型改变文件权限

<1>二进制方式

1表示可读&可写&可操作,转换成对应的二进制序列,换算成对应的十进制(三位二进制对应一位十进制)

<2>权值

r:4    w:2   x:1

owner=rmx=1+2+4=7    group=rwx=1+2+4=7    others=---=0+0+0=0

更改某文件的权限为drwxrwx---:命令:$ chmod  -R 770  文件&目录名

2、更改文件所属群组

命令:$ chgrp  文件名    ##更改的组名需要在/etc/group下存在,加选项-R,可以进行递归持续更改目录下所有文件。

3、更改文件拥有者

命令:$ chown  文件名    ##文件拥有者也许在/etc/passwd下存在

4、文件预设权限:umask

当新建文件或目录时,它的默认权限与umask有关

命令:$ umask    ##一般权限与运行结果数字的后三位有关

命令:$ umask -S    ##s为大写,运行结果为u=rwx,g=rx,o=rx

要注意的是,umask 的分数指的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分,
所以啰!也就是说,当要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,
那么要拿掉读与写的权限,也就是 6 分,而要拿掉执行与写入的权限,也就是 3 分,这样了解吗?
请问你, 5 分是什么?呵呵! 就是读与执行的权限啦!
如果以上面的例子来说明的话,因为 umask 为 022 ,所以 user 并没有被拿掉任何权限,不过 group 
与 others 的权限被拿掉了 2 (也就是 w 这个权限),那么当使用者:
<1>建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
<2>建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

5、配置文件隐藏属性

 

命令:$  chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
      + :增加某一个特殊参数,其他原本存在参数则不动。
      - :移除某一个特殊参数,其他原本存在参数则不动。
      = :设定一定,且仅有后面接的参数
      A :当设定了 A 这个属性时,若你有存取此文件(或目录)时,他的访问时间 atime 将不会被修改,可避免 I/O 较慢的机器               过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
      S :一般文件是异步写入磁盘的(原理请参考前一章 sync 的说明),如果加上 S 这个属性时,当你进行任何文件的修改,                 该更动会『同步』写入磁盘中。
      a :当设定 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有 root 才能设定这属性
      c :这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行              压缩后再储存(看来对于大文件似乎蛮有用的!)
      d :当 dump 程序被执行的时候,设定 d 属性将可使该文件(或目录)不会被 dump 备份
      i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、设定连结也无法写入或新增数据!』对于系统安全性                有相当大的帮助!只有 root 能设定此属性
      s :当文件设定了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救              回来了喔!
      u :与 s 相反的,当使用 u 来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文              件喔!
注意 1:属性设定常见的是 a 与 i 的设定值,而且很多设定值必须要身为 root 才能设定
注意 2:xfs 文件系统仅支援 AadiS 而已

6、显示文件隐藏属性

命令:$   lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!

7、文件特殊权限:SUIDD、SGID、SBIT

(1)SUID

s 这个标志出现在文件拥有者的 x 权限上时,此时就被称为 Set UID,简称为 SUID 的特殊权限。                                               基本上 SUID 有这样的限制与功能:
<1>SUID 权限仅对二进制程序(binary program)有效;
<2> 执行者对于该程序需要具有 x 的可执行权限;
<3> 本权限仅在执行该程序的过程中有效 (run-time);
<4> 执行者将具有该程序拥有者 (owner) 的权限。
(2)SGID

 

当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID 啰!是这样
没错!^_^。 举例来说,你可以用底下的指令来观察到具有 SGID 权限的文件喔:
命令:$  ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
与 SUID 不同的是,SGID 可以针对文件或目录来设定!

如果是对文件来说, SGID 有如下的功能:
<1>SGID 对二进制程序有用;
<2>程序执行者对于该程序来说,需具备 x 的权限;
<3>执行者在执行的过程中将会获得该程序群组的支持!

当一个目录设定了 SGID 的权限后,他将具有如下的功能:
<1>用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
<2>用户在此目录下的有效群组(effective group)将会变成该目录的群组;
<3>用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

(3)SBIT

 

这个 Sticky Bit, SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:
<1>当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;
<2>当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件。
换句话说:当甲这个用户于 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲用户对该目录内任何人建立的目录或文件均可进行 "删除/更名/搬移" 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限项目时,则甲只能够针对自己建立的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
 

8、 SUID、SGID、SBIT 权限设定
前面介绍过 SUID 与 SGID 的功能,那么如何配置文件案使成为具有 SUID 与 SGID 的权限呢?
在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个
权限了!
<1> 4 为 SUID
<2> 2 为 SGID
<3> 1 为 SBIT
假设要将一个文件权限改为『-rwsr-xr-x』时,由于 s 在用户权力中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来设定!

 

命令:$  chmod 7666 test; ls -l test <==具有空的 SUID/SGID 权限
-rwSrwSrwT 1 root root 0 Jun 16 02:53 test
上例就要特别小心啦!怎么会出现大写的 S 与 T 呢?不都是小写的吗? 因为 s 与 t 都是取代 x 这个权限的,但是你有没有发现阿,我们是下达 7666 喔!也就是说, user, group 以及others 都没有 x 这个可执行的标志( 因为 666 嘛 ),所以,这个 S, T 代表的就是『空的』啦!怎么说? SUID 是表示『该文件在执行的时候,具有文件拥有者的权限』,但是文件 拥有者都无法执行了,哪里来的权限给其他人使用?当然就是空的啦!
而除数字法外,也可以透过符号法来处理!其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t 啰!来看看如下的范例:

 

设定权限成为 -rws--x--x 的模样:
[[email protected] tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Jun 16 02:53 test
# 承上,加上 SGID 与 SBIT 在上述的文件权限中!
[[email protected] tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Jun 16 02:53 test

问:让用户能进入某目录成为『可工作目录』的基本权限为何:
<1>可使用的指令:例如 cd 等变换工作目录的指令;
<2>目录所需权限:用户对这个目录至少需要具有 x 的权限
<3>额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。

问:用户在某个目录内读取一个文件的基本权限为何?
<1>可使用的指令:例如本章谈到的 cat, more, less 等等
<2>目录所需权限:用户对这个目录至少需要具有 x 权限;
<3>文件所需权限:使用者对文件至少需要具有 r 的权限才行!
问:让使用者可以修改一个文件的基本权限为何?
<1>可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
<2>目录所需权限:用户在该文件所在的目录至少要有 x 权限;
<3>文件所需权限:使用者对该文件至少要有 r, w 权限
问:让一个使用者可以建立一个文件的基本权限为何?
<1>目录所需权限:用户在该目录要具有 w,x 的权限,重点在 w 啦!
问:让用户进入某目录并执行该目录下的某个指令之基本权限为何?
<1>目录所需权限:用户在该目录至少要有 x 的权限;
<2>文件所需权限:使用者在该文件至少需要有 x 的权限