Unix/Linux文件操作:文件权限

165 阅读4分钟

01.文件权限

Unix为每个文件维护一组文件权限,这些权限控制哪些用户标识可以访问文件,以及以何种方式访问文件。权限有3种:

  • 读权限
  • 写权限
  • 执行权限

当然对于一个不可执行的文件来说,拥有执行权限没有任何意义。通常如果文件是程序或者某种类型的脚本,那么它就是可执行的。

为什么需要为自己的文件设置和修改权限,原因有两:

  • 限制其他用户的访问:限制某些用户标识访问自己的文件,从而为数据提供安全。
  • 避免自己错误使用:为了防止误删,可以不设置文件的写权限。许多替换或删除数据的命令在改变没有写权限的文件时都会提示请求确认。

目录的权限与普通文件不同:

  • 目录的读权限:允许用户标识读取目录中的文件名
  • 目录的写权限:允许用户标识修改目录(创建、复制、移动、删除)
  • 目录的执行权限:允许用户标识搜索目录

02.setuid

xxx

03.Unix维护文件权限的方式:id、groups

现在使用的文件权限的组织方式仍然是Unix系统最初的开发者---贝尔实验室的程序员们设计的。在Unix开发时,贝尔实验室的人们都是以小组为单位进行工作的,他们共享程序和文档。基于这一原因,Unix开发人员定义了3种类别的人:

  • 用户
  • 用户组
  • 系统中的每个人

创建文件的用户标识就是文件的属主。属主是可以改变文件权限的唯一用户标识(超级用户例外)。

  • 第一组文件权限描述属主如何访问文件
  • 第二组文件权限描述和属主位于同一组的其他用户标识(每个用户都属于一个组)如何访问文件
  • 第三组文件权限描述系统中的其他用户标识如何访问文件

这意味着,对于每个文件和目录,可以为自己、组中的其他人以及剩下的其他人单独分配读、写和执行权限。

那么哪些人位于哪些组中呢?当系统管理员为你创建账户时,他也为你分配了一个组。就像每个用户有一个用户标识一样,每个组也拥有一个组标识。系统中组标识的列表存放在文件/etc/group(Mac中是/private/etc/group)中,该文件可以自由查看。组的名称存放在口令文件/etc/passwd中,和用户标识、home目录的名称以及其他信息存放在一起。显示用户标识和组标识的最简单方法就是使用id命令(不需要任何选项)。

另一种显示组的方式是使用groups命令,语法groups [user]

在Unix早期,因为计算机系统资源很紧张,所以组很重要。如今人手一台Unix/Linux,组显得不那么重要。但是我们需要知道到底是怎么回事。

04.显示文件权限:ls -l

xxx

05.文件模式

Unix使用一个紧凑的3位数字来表示一个完整的文件权限集,这个3位数字称为文件模式:第一位数字代表属主权限,第二位数字代表组中各用户标识的权限,第三位数字代表系统中其他用户标识的权限:

  • 4 = 读权限
  • 2 = 写权限
  • 1 = 执行权限
  • 0 = 没有权限

比如一个文件:

  • 属主拥有读、写和执行权限:4+2+1=7
  • 组中用户拥有读、写权限:4+2=6
  • 系统其他用户只拥有读权限:4

因此该文件的模式位764

06.修改文件权限:chmod

语法:chmod mode file...

只有属主和超级用户才能改变文件的文件模式。Unix自动使你成为你自己所创建的每个文件的属主

修改文件模式除了上面介绍的8进制模式还有符号模式:

  • 8进制模式:chmod 755 spacewar:属主拥有读、写和执行权限,组中和其他用户拥有读和执行权限。
  • 符号模式:1.chmod o+r newfile 2.chmod u-x newfile
    语法:[ugoa] [+-=] [rwxXstugo] u表示用户,g表示用户组,o表示其他人,a表示上述所有人。|+表示在已有权限中添加权限,-表示在已有权限中减去权限,=表示为权限赋值。|rwxXstugo含义请参考man chmod。知道最常用的rwx对应读、写、执行可以应付多数场景。
  • chmod o+r newfile:将读权限添加给任何人。
  • chmod u-x newfile:删除用户拥有的执行权限

07.修改文件所有者:chown、chgrp

xxx

08.Unix为新文件指定权限的方式:umask

xxx