文件属性及访问权限控制

时间:2022-10-28 09:59:05
在Linux/Unix下,通过对文件权限位的简单设置就可以实现很强的访问控制。这一节里讲的都是旧东西了,今天整理一下!
    当创建了一个文件后,系统中就保存了所有必要的关于这个文件的信息,在我的理解,一个文件的信息其实包括两个部分:文件的数据部分和属性部分。属性部分包括,像文件类型、文件大小、文件的拥有者、访问权限、文件的i节点、创建时间、修改时间等等。属性部分是应操作系统的需要来生成的。对文件的访问控制当然也要通过设置这些属性来实现!
    在讲解文件的访问控制之前,有必要先介绍一下Linux下的多用户管理。

用户管理

    Linux是一个多用户操作系统,而且用户在系统中是分角色的,在Linux 系统中,由于角色不同,权限和所完成的任务也不同,角色分以下三种:
    root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;
    虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;
    普通真实用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户是由系统管理员添加的;
    用户组的概念:用户组(group)就是具有相同特征的用户(user)的集合体;假设我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时就需要用户组;我们把有这些要求的用户都定义到同一用户组,然后修改文件或目录的权限,使此用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。这就是通过定义组和修改文件的权限来实现的;
    与用户相关的配置文件分别是:/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow。
    下面介绍几个用户管理的实用工具:
    (用户相关)
文件属性及访问权限控制useradd      # 添加用户
文件属性及访问权限控制passwd        # 为用户设置密码
文件属性及访问权限控制
usermod      # 修改用户信息
文件属性及访问权限控制              # 如登录名、用户的主目录等等
文件属性及访问权限控制
userdel      # 删除用户
文件属性及访问权限控制
pwcov        # 同步用户 从/etc/passwd到/etc/shadow
文件属性及访问权限控制
pwck         # pwck是校验用户配置文件是否合法或完整
文件属性及访问权限控制              # 配置文件主要是/etc/passwd和/etc/shadow
文件属性及访问权限控制pwunconv     # 是pwcov的逆向操作
文件属性及访问权限控制              #从/etc/shadow和/etc/passwd创建/etc/passwd
文件属性及访问权限控制              #然后删除/etc/shadow
文件属性及访问权限控制
finger        # 查看用户信息工具
文件属性及访问权限控制
id           # 查看用户的UID、GID及所归属的用户组
文件属性及访问权限控制
chfn         # 更改用户信息工具
文件属性及访问权限控制
su           # 用户切换工具
文件属性及访问权限控制
sudo         # sudo可以是当前用户以另外一个用户的身份执行一个命令
文件属性及访问权限控制              #用户权限管理的很好工具
文件属性及访问权限控制
visudo        # visodo是"法定"编辑/etc/sudoers的命令 ^_^
    (用户组相关)
文件属性及访问权限控制groupadd     # 添加用户组;
文件属性及访问权限控制
groupdel      # 删除用户组;
文件属性及访问权限控制
groupmod     # 修改用户组信息
文件属性及访问权限控制
groups       # 显示用户所属的用户组
文件属性及访问权限控制
grpck
文件属性及访问权限控制grpconv      
# 从/etc/group和/etc/gshadow同步或创建/etc/gshadow
文件属性及访问权限控制             
# 如果/etc/gshadow不存在则创建
文件属性及访问权限控制
grpunconv    # 从/etc/group和/etc/gshadow同步或创建/etc/group
文件属性及访问权限控制              #
然后删除gshadow文件

Linux下的文件类型和权限

    此处的文件类型并非指诸如".gif"、".png"等等之类的文件格式,而是指与操作系统管理相关的类型。Linux将所有外设都当作文件来处理,向上提供统一的访问、操作接口,因此Linux下有多种文件类型,主要有以下几种:
    -   普通文件
    d  目录文件
    l    符号连接文件
    b   块设备文件
    c   字符设备文件
    p   命名管道文件
    s   套接字文件
    通过 ls -l 就可以清晰的看出来。如下:
文件属性及访问权限控制ls -l
文件属性及访问权限控制
-rw-r--r--  1 yzb yzb 396 2006-09-05 12:47 h.c
    第一位"-"表示文件类型为普通文件。
    后面三位表示了文件属主的访问权限。这里面的"-"符号表示屏蔽此位表示的权限,"rw-"即表示文件属主有读写权限,但是没有执行的权限。后面的"r--r--"分别表示了同组用户权限和其他用户权限。
    再后面的数字"1"表示此文件的引用计数。讲到硬连接时会讲到这个。
    之后两个"yzb",一个表示用户,一个表示用户组。
    396表示以字节为单位的文件大小。
    之后的时间表示文件的最近修改时间。
    最后是文件名。

    下面再介绍一下文件的权限。
    首先,文件有三个权限:读r、写w、执行x;其次,根据用户的不同又分为三类:文件属主u、同组用户g、其他用户o。
    这里比较特殊的地方是执行权限:首先,出于安全的考虑,普通文件的执行权限必须要手动添加,当你创建一个新文件时,默认的执行权限是被屏蔽掉的;其次,普通文件的执行权限和目录文件的执行权限表示的意思是不一样的。 对于目录文件而言,执行权限位意味着可以搜索和访问该目录下的文件,而读权限位只是意味着可以列出本目录下的文件名列表。因此可以这么说: 目录的执行权限的控制级别要大于目录的读取权限。
    一个小问题:对一个目录文件的删除操作需要什么样的权限?

修改权限位

    首先要了解权限位的标记方法。一种是符号模式,一种是绝对模式。符号模式即通过 ls -l 命令看到的"rwx-"四个字符来表示。这里要着重讲述一下绝对模式。绝对模式是通过一个八进制数来代表文件的权限。
    可以这么理解,有九个二进制位,三位为一组,从高位到低位依次表示:ur、uw、ux、gr、gw、gx、or、ow、ox。如果某位为1,则表示此权限位有效;如果某位为0,表示此权限位被屏蔽,即无效。所以二进制的"111101000",用八进制表示为750,转换为符号模式即"rwxr-xr--"
    修改权限位主要通过chmod命令来实现,它的一般格式为:
文件属性及访问权限控制chmod [who] operator [permission] filename    who的含义是:u 文件属主权限;g 同组用户权限;o 其他用户权限;a 所有用户权限。operator的含义是:+ 增加权限;- 取消权限;= 设定权限。permission的含义包括:r 读权限;w 写权限;x 执行权限;s 文件属主和组set-ID;t 粘性位;l 给文件加锁,使其他用户无法访问。
    例子:
文件属性及访问权限控制chmod u+x g+x-w filename
文件属性及访问权限控制
chmod -R u+x g+x-w /home/ww/testfloder
    chmod命令同样也可以采用绝对模式。
文件属性及访问权限控制chmod [mode] filename
    chown和chgrp
    当你创建一个文件时,你就是该文件的属主。一旦你拥有某个文件,就可以改变它的所有权,把它的所有权交给另外一个/etc/passwd文件中存在的合法用户。可以使用用户名或用户ID号来完成这一操作。在改变一个文件的所有权时,相应的suid也将被清除,这是出于安全性的考虑。只有文件的属主和系统管理员可以改变文件的所有权。一旦将文件的所有权交给另外一个用户,就无法再重新收回它的所有权。
    chown命令的一般形式为:
文件属性及访问权限控制chmod --h owner file    -R选项意味着对所有子目录下的文件也都进行同样的操作。
    -h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。
    chgrp命令和chown差不多,就不再多说了。

umask

    umask命令允许我们设定创建文件时权限的缺省模式。一般形式为:
文件属性及访问权限控制umask nnn    与设定权限时不同的是,此处的nnn表示从文件最大权限中拿走的值。而且最大权限也分两种情况,如果是目录的话,最大权限位777;如果是普通文件的话,最大权限位666(因为系统创建文件时默认的x权限会被屏蔽掉)。
    可以这么理解: 先从权限的理论上的最大值777中减去nnn,然后判断文件类型,若是普通文件则将所有的x权限屏蔽掉,若是目录文件则直接ok。

硬连接与软连接

    在Unix世界里有两个'link'(连接)概念,一般称之为硬连接和软连接。
    硬连接仅仅是一个文件名,它只是增加了i节点的索引计数,并在目录文件里增加了一个目录项。(一个文件可以有好几个文件名,只有将最后一个文件名从磁盘上删除,才能把这个文件删掉。所有的文件名都处于同一个状态,也就没有什么"源名字"之说。
    软连接,又称符号连接,与硬连接是完全不同的:它是一个包含了路径信息的小小的指定文件。也就是说软连接与原文件不具有相同的i节点。 软连接文件的数据区存放的仅仅是原文件的路径。
    硬连接和软连接的特点和区别如下:
    硬连接:
    (1)原文件和链接文件都指向相同的物理位址。
    (2)目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)。
    (3)文件在磁盘中只有一个复制,以节省硬盘空间。
    (4)由于删除文件要在同一个索引节点属于惟一的连接时才能成功,因此可以防止不必要的误删除。
    软连接(符号连接):
    (1)用ln -s命令创建文件的符号连接;
    (2)符号连接是Linux特殊文件的一种。作为一个文件,它的数据是它所指向文件的路径名。类似于Windows下的快捷方式。
    (3)可以删除原文件而保存链接文件,没有防止误删除功能。

小结

    下面这些命令要掌握好:
    1. useradd、usermod、userdel
    2. groupadd、groupmod、groupdel
    3. id、groups
    4. passwd
    5. su、sudo
    6. ls
    7. chmod、chown、chgrp
    8. umask
    9. ln