Linux 文件管理--文件属性、修改文件权限

在Linux系统中,一切皆文件,那么文件管理的重要性就不言而喻了,对文件进行管理,首先要清楚文件的相关属性。

ls -l
该命令即可查看当前目录下文件的详细权限与属性。ls是“list”的意思,-l 列出详细的文件和属性。

这里写图片描述
文件详细信息共有七列,每列的意思如下:
这里写图片描述

文件类型与权限

各字段以空格分隔,各字段意义:

  • 共10个字符。第一个字符表示文件类型;后9个字符,每3个一组分别表示文件属主(u)、属组(g)、其他用户(o)对于此文件是否有读(r)、写(w)、执行(x)权限。
  • 有多少文件名连接到此节点(该文件被硬链接的次数)。
  • 文件属主。
  • 文件属组。
  • 文件大小,默认单位为B。3
  • 文件内容最近一次被修改的时间,即mtime。
  • 文件名。

其中:

字符 文件类型
- 普通文件
l 链接文件
d 目录文件
b 块设备文件
c 字符型设备文件
s socket文件
p 管道类型文件
权限 对应数字 权限
r 4
w 2
x 1 执行

读、写、执行权限

  • 对于普通文件

    • r:表示读取文件的内容的权限。
      例如读取一个文本文件的文字;
      对某文件执行复制操作时,需用户对该文件有“r”权限4。
    • w:表示编辑修改文件内容的权限(但不含删除该文件)。
    • x:表示文件是否可以被执行。
  • 对于目录文件

    • r:表示读取目录结构列表的权限,即可使用命令“ls”查看目录中的文件名列表。
      目录的主要内容就是记录文件名列表。
    • w:表示更改目录结构列表的权限,即:
      可在该目录创建新的目录或文件;
      可在该目录删除已存在的目录或文件,不论被删除的文件权限为何;
      可在该目录重命名已存在的目录和文件;
      可在该目录剪切已存在的目录和文件等。
      综上,“w”权限对目录来讲可理解为,变动该目录下的文件名列表的权限。
    • x:表示能否切换到该目录作为当前工作目录,即:
      可使用命令“cd”至该目录;
      可读取、执行该目录下的文件(如果文件本身开放读、执行权限的话),若目录无“x”权限,则无法读取、执行该目录下的文件;
      可使用“ls -l”查看该目录下各文件属性等。

    注:
    1、目录开放“x”权限时,一般也要开放“r”权限。否则虽然可以“cd”至该目录,但不能“ls”(所以更不能“ls -l”)。
    2、用户在某目录下创建、删除、剪切文件(这些操作属于该目录的“w”权限),或对该目录下的文件进行复制等操作时,若仅有“w”权限而无“x”权限,则仍会提示无权限操作,需同时对该目录有“x”权限才可。

改变文件属性与权限

改变文件所有者-chown

用于修改用户属主、属组。修改的属主、属组必须是“/etc/passwd、/etc/group”中已存在的。

默认修改属主,使用格式:“chown user:group file”13可同时修改属主属组,该格式若不写用户,则仅修改属组。如下所示:
这里写图片描述

改变文件所所属组-chgrp

用于修改文件属组,修改的属组必须是“/etc/group”中已存在的。
“-R”选项,用于递归修改指定目录下的所有文件的属组。
这里写图片描述

改变文件权限-chmod

命令chmod,用于修改文件权限。仅root和文件属主可修改文件权限,两种方式:
1、使用数字更改权限
文件的读、写、执行权限共9位(每位取值0或1),每3位一组分别代表属主(u)、属组用户(g)、其他用户(o)的读、写、执行权限,共3组。
r - 4
w - 2
x - 1
每组取值范围是0到7(- - - 到rwx),可视作3个8进制数。
当权限为:-rwxrwx—时,
owner=rwx=4+2+1=7
group=rwx=4+2+1=7
others=—=0+0+0=0
所以修改的权限可用3个8进制数表示:
chmod 774 iris.csv
2、符号类型更改文件权限

  修改谁的权限 添加、减去、指定 权限
chmod u、g、o、a +、-、= r、w、x 文件

如上所示,可修改属主(u)、属组用户(g)、其他用户(o)或全部(a,包含ugo)用户的“rwx”权限,修改方式包括添加、删除、指定。

文件目录默认权限

普通文件常常是为了记录数据,且为安全起见,不随便开放“x”权限,所以默认最大为开放读写(rw-rw-rw-),即“666”;
目录则需开放“x”以便切换至该目录,默认最大是“777”;

创建一个新目录或普通文件,其默认权限为上述的最大默认权限减去遮罩码。
比如遮罩码设置为022,则新建文件即为“rw-rw-rw-”减去“- - - -w - - w -”等于“rw- r- -r- -”;
新建目录用同样方法计算可得默认权限为“rwxr-xr-x”。

  • 查看默认权限需要使用umask命令:
[123@123 ~]$ umask           //数字方式显示  
0022  
[123@123 ~]$ umask -S        //符号方式显示  
u=rwx,g=rx,o=rx  
  • 修改umask
    1、[123@123 ~]$ umask 0006
    2、vim /etc/bashrc
    使用命令设置的umask仅在当前shell生效。永久生效的是配置文件,/etc/bashrc中使用了该命令设置了各用户的默认umask

文件隐藏属性chattr,lsattr

文件隐藏权限有多个,对于数据安全较为重要。
要强调的是,chattr命令只能在Ext2/Ext3的文件系统生效。

格式:chattr [=+-][参数] 文件或目录

参数:

  • a :当设置a后,文件只能增加数据,既不能删除也不能修改数据,只有root才能设置这个属性
  • i :i属性可使文件不能被删除、改名、设置连接,也无法写入或添加数据。对于系统安全性有很大帮助。只有root能设置此属性。(可用于日志文件,使其可以增加内容,旧数据不能被修改和删除。)

这里写图片描述

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

1、SUID

Set UID,简称SUID。该权限仅对二进制文件有效,且仅在该文件执行过程中生效。当文件具有SUID权限时,文件属主的“x”权限位置变为“s”。SUID对于目录是无效的。

若文件具有SUID权限,且执行者对于该文件有“x”权限,当文件被其执行时,执行者将具有该文件属主的权限,权限只在文件执行时有效,执行完毕不再拥有所有者权限。

这里写图片描述

2、SGID

Set GID,简称SGID。文件具有此权限时,属组用户的“x”权限位置变为“s”。SGID仅对于二进制文件和目录有效,二者具有不同的意义:

  • 对于二进制文件 :
    程序执行者对于该程序,需要具备x的权限。
    类似SUID权限。若执行者对于文件具备“x”权限,当文件被其执行时,执行者在执行过程中将具有该文件属组用户的权限

  • 对于目录:
    当一目录具有SGID权限时,若用户对该目录有“r、x”权限,则用户可“cd”至该目录;
    若用户在此目录有w权限,则在这个目录中创建的文件的属组,不是用户的当前有效用户组,而是该目录的属组。
    这里写图片描述

SGID对于项目开发很重要,常用于共同编辑文件。
比如用户user1、user2均属于用户组test_group,目录bag的属组应为test_group,且属组用户权限开放为“rwx”。用户user1、user2在同一目录bag下共同开发项目。
这里写图片描述
如上,若目录“bag”没有SGID权限,则user1、user2虽然都可以在其下创建文件,但属组用户仍然是各自的当前有效用户组,所以用户user2对于user1创建的文件“test1_bag”为其他用户。普通用户的遮罩码为0002,所以文件“test_bag”对user2仅开放“r”权限。
因为普通用户的遮罩码为0002,所以user1创建的文件的属组权限是有“w”权限的。所以如果目录“bag”开放SGID权限,则文件“test1_bag”的属组就会是“test_group”,从而使user2对其有“w”权限。二者就可互相修改对方创建的文件了。

3、SBIT

Sticky Bit,简称SBIT。仅对目录有效。若目录有此权限,目录的其他用户的“x”权限位置变为“t”。
当用户在该目录下创建文件或目录时,仅有自己与root用户才有权利删除该文件。

4、SUID/SGID/SBIT设置

仍使用命令“chmod”,同样有8进制数和符号两种方式:
SUID —— 4
SGID—— 2
SBIT—— 1
这里写图片描述

注:如上,文件开放SUID、SGID权限,其属主、属组成员的“x”权限位置会变为“s”,但若其本就没开放属主或属组成员的“x”权限,则SUID、SGID会用“S”表示。

目录开放SBIT权限,其他用户的“x”权限位置变为“t”,但若其他用户的“x”权限本就未开放,则使用“T”表示SBIT。SBIT的效果不受影响。

猜你喜欢

转载自blog.csdn.net/qq_24336773/article/details/80499652