linux文件属性与权限

1 文件属性

查看方法

(这里,属性和权限某种意义上是一样的。)

ls -al 可以在终端查看文件的属性。

!需要注意的是,linux提供的stat命令及函数,也可以查看文件的属性,两者的内容是差不多的,只是略微有差异。

在这里插入图片描述

解释

第一栏

第一个字符代表这个文件是“目录、文件或链接文件等等”:

  • 当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
  • 当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
  • 若是[ l ]则表示为链接文件(link file);
  • 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
  • 若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设
    备)。

接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

第二栏
表示有多少文件名链接到此节点(i-node)
每个文件都会将他的权限与属性记录到文件系统的i-node中;
这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。

第三栏表示这个文件(或目录)的“拥有者帐号”
第四栏表示这个文件的所属群组
第五栏为这个文件的容量大小,默认单位为Bytes;
第六栏为这个文件的创建日期或者是最近的修改日期;

补充

对于目录,只有用户有执行权限,才能进入该目录。
如果文件的权限是[ ---------- ],那么除了root外的任何用户都不能访问这个文件。root基本上是不受系统的权限所限制的, 所以无论文件权限为何,默认root都可以存取!

2 改变文件属性与权限

改变文件所属群组chgrp

请记得,要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!

要在root用户下进行

改变文件拥有者, chown

在root下才能进行;

拥有者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。

chown的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 -R 的选项即可!我们来看看语法与范例:
在这里插入图片描述

一个典型的使用chgrp和chown的例子是使用cp后,cp会将文件的所属组和拥有者以及权限一同复制,要修改复制后的文件权限和所属,要用chgrp和chown。

改变权限, chmod

权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

1 、数字来代表各个权限
各权限的分数对照表如下:

r:4 > w:2 > x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:

owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= — = 0+0+0 = 0

语法:

[root@study ~]# chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

例子:

[root@study ~]# ls -al .bashrc
-rw-r–r--. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

在实际的系统运行中最常发生的一个问题就是,常常我们以vim编辑一个shell的文字批处理文件后,他的权限通常是 -rw-rw-r-- 也就是664, 如果要将该文件变成可可执行文件,并且不要让其他人修改此一文件的话, 那么就需要-rwxr-xr-x这样的权限,此时就得要下达:“ chmod 755
test.sh

2、符号类型改变文件权限:

| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |

假如我们要“设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:

  • user (u):具有可读、可写、可执行的权限;
  • group 与 others (g/o):具有可读与执行的权限。 所以就是:

[root@study ~]# chmod u=rwx,go=rx .bashrc
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc

那么假如是“ -rwxr-xr-- ”这样的权限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”来设置。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:

[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:

[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 644 .bashrc # 测试完毕得要改回来!

3 目录与文件之权限意义

权限对文件的重要性:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x (eXecute):该文件具有可以被系统执行的权限。

在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的!

权限对目录的重要性:
目录主要的内容在记录文件名清单,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?

  • r (read contents in directory):
    表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
  • w (modify contents of directory):
    这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构清单的权限,也就是下面这些权限:
    创建新的文件与目录;
    删除已经存在的文件与目录(不论该文件的权限为何!)
    将已存在的文件或目录进行更名;
    搬移该目录内的文件、目录位置。 总之,目录的w权限就与该目录下面的文件名异
    动有关就对了啦!
  • x (access directory):
    咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途!
    所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登陆Linux时, 你所在的主文件夹就是你当下的工作目录。而变换目录的指令是“cd”(change
    directory)啰!

如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或w的权限。

4 文件默认权限

基本上, umask 就是指定 “目前使用者在创建文件或目录时候的权限默认值”, 那么如何得知或设置 umask 呢?他的指定条件以下面的方式来指定:

root@study ~]# umask
0022 <==与一般权限有关的是后面三个数字!
[root@study ~]# umask -S
u=rwx,g=rx,o=rx

要注意的是,umask 的分数指的是“该默认值需要减掉的权限!”因为 r、w、x 分别是 4、2、1 分,所以啰!也就是说,当要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是 6 分,而要拿掉执行与写入的权限,也就是 3 分,以此类推。

那么如何设置 umask 呢?简单的很,直接在 umask 后面输入 002(或其他的数字)就好了!

5 文件特殊权限SUID, SGID, SBIT

SUID

一定注意到了一件事,那就是,怎么我们的 /tmp 权限
怪怪的? 还有,那个 /usr/bin/passwd 也怪怪的?怎么回事啊?看看先:

[root@study ~]# ls -ld /tmp ; ls -l /usr/bin/passwd
drwxrwxrwt. 14 root root 4096 Jun 16 01:27 /tmp
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:“-rwsr-xr-x”,此时就被称为 Set UID,简称为 SUID 的特殊权限。

基本上SUID有这样的限制与功能:

  • SUID 权限仅对二进制程序(binary program)有效;
  • 执行者对于该程序需要具有 x 的可执行权限;
  • 本权限仅在执行该程序的过程中有效 (run-time);
  • 执行者将具有该程序拥有者 (owner) 的权限。

我们举个例子来说明好了。 我们的 Linux 系统中,所有帐号的密码都记录在 /etc/shadow 这个文件里面,这个文件的权限为:“---------- 1 root root”,意思是这个文件仅有root可读且仅有root可以强制写入而已。 既然这个文件仅有 root 可以修改,那么 dmtsai 这个一般帐号使用者能否自行修改自己的密码呢? 你可以使用你自己的帐号输“passwd”这个指令来看看,嘿嘿!一般使用者当然可以修改自己的密码了!
唔!有没有冲突啊!明明 /etc/shadow 就不能让 dmtsai 这个一般帐户去存取的,为什么dmtsai 还能够修改这个文件内的密码呢? 这就是 SUID 的功能啦!借由上述的功能说明,我们可以知道:

  1. dmtsai 对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 dmtsai 能执行
    passwd;
  2. passwd 的拥有者是 root 这个帐号;
  3. dmtsai 执行 passwd 的过程中,会“暂时”获得 root 的权限;
  4. /etc/shadow 就可以被 dmtsai 所执行的 passwd 所修改。

SGID

当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID。

[root@study ~]# ls -l /usr/bin/locate
-rwx–s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate

与 SUID 不同的是,SGID 可以针对文件或目录来设置!如果是对文件来说, SGID 有如下的功能:

  • SGID 对二进制程序有用;
  • 程序执行者对于该程序来说,需具备 x 的权限;
  • 执行者在执行的过程中将会获得该程序群组的支持!

SUID/SGID/SBIT 权限设置
那么如果在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了!

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

假设要将一个文件权限改为“-rwsr-xr-x”时,由于 s 在使用者权限中,所以是 SUID ,因此,在原先的 755 之前还要加上 4 ,也就是:“ chmod 4755 filename ”来设置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值