Linux(五):文件权限

  缺乏安全性的系统不是完整的系统,系统中必须有一套能够保护文件免遭非授权用户浏览和修改的机制。Linux沿用了Unix文件权限的方法,即允许用户和组根据每个文件和目录的安全性设置来访问文件。

 一、用户和组

  Linux安全系统的核心是用户账户,每个能进入Linux系统的用户都会被分配唯一的用户账户。用户对系统中各种对象的访问权限取决于他们登录系统时用的账户。

  用户权限是通过创建用户时分配的用户ID(UserID,即UID)来跟踪的。UID是数值,每个用户都有唯一的UID,但在登录系统时使用的不是UID,而是登录名。登录名是用户用来登录系统的最长八个字符字符串(可以使数字或字母),同时会关联一个密码。

  1.1 /etc/passwd

    /etc/passwd文件保存了用户登录名和UID的匹配信息,以及一些与用户相关的信息。形式如下:

root:x:0:0:root:/root:/bin/bash
sawyer:x:1000:1000:sawyer:/home/sawyer:/bin/bash

    /etc/passwd中从左往右依次表示:

    • 登录用户名
    • 用户密码
    • 用户账户的UID(数字形式)
    • 用户账户的GID(数字形式)
    • 用户账户的文本描述(称为备注字段)
    • 用户HOME目录的位置
    • 用户默认shell

    值得注意的是:

    • 在Linux中几乎所有的服务都是使用自己的账户登录的,目的是为了防止有非授权用户攻陷了这些服务中的一个,从而获得其他服务的权限。
    • Linux为系统账户预留了500以下的UID指,有些服务甚至要用特定的UID才能正常工作。

  1.2 /etc/shadow

    /etc/shadow用于对用户密码进行管理,并且只有root用户才能够访问该文件,在该文件中为每个用户账户都保存了一条记录,形式如下:

root:$6$D.7koy72xXKHuUWz$6ihS3acnpUO8Hu4aKWzS64sgL13bQIyOmnjkEf3QGjFXKUQSXxJd4eWU5CE5CFd.Gk5BTMavpA0c5vTMSpz7W0::0:99999:7:::

    /etc/shadow中每条记录都有9个字段,分别为:    

    • 与/etc/passwd文件中的登录名字段对应的登录名
    • 加密后的密码
    • 自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
    • 多少天后才能更改密码
    • 多少天后必须更改密码
    • 密码过期前提前多少天提醒用户更改密码
    • 密码过期后多少天禁用用户账户
    • 用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)
    • 预留字段给将来使用

  1.3 用户管理

    1.3.1 添加用户

      在Linux中可以使用useradd添加用户,具体参数如下:

示例:

[root@localhost ~]# useradd -c "flyand company administrator" -m -d /home/admin -g develop -u 1001 flyand  --创建用户,指定组名为develop、UID为1001、账户名sawyer
[root@localhost ~]# passwd sawyer  --为sawyer设置密码
[root@localhost ~]# gpasswd -a sawyer develop  --显示地将sawyer加入develop组中

在使用useradd创建用户时,如果没有指定相关参数值,那么Linux就会使用指定的默认值。默认值可以通过,useradd -D进行查看

[root@ig0cSa9h07M ~]# /usr/sbin/useradd -D
GROUP=100             --新用户会被添加到GID为100的公共组
HOME=/home            --新用户的HOME目录将会位于/home/loginname
INACTIVE=-1           --新用户账户密码在过期后不会被禁用
EXPIRE=               --新用户账户未被设置过期日期
SHELL=/bin/bash       --新用户账户将bash shell作为默认shell
SKEL=/etc/skel        --系统会将/etc/skel目录下的内容复制到用户的HOME目录下
CREATE_MAIL_SPOOL=yes --系统为该用户账户在mail目录下创建一个用与接收邮件的文件

当需要修改默认值时,可以在-D后面 附加响应的参数,如下:

    1.3.2 修改用户

      Linux中修改用户信息有好几种工具包括:usermod、passwd、chpasswd、chage、chfn、chsh

=> usermod: 能够修改/etc/passwd文件中的大部分字段,参数与useradd基本一致。usermod中有一组参数-L和-U分别用于锁定账户和解锁账户。
=> passwd: 修改用户密码
=> chpasswd: 批量修改。该命令可以从标准输入中自动读取登录名和密码对(冒号分隔,username:passwd)列表
=> chsh: 修改用户的登录shell
=> chfn: 向用户的备注字段写入信息
=> chage: 管理用户账户的有效期

    1.3.3 删除用户

userdel命令可以删除用户,但是默认情况下该命令只会删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。加上-r后可以删除用户的HOME目录以及邮件目录,但是仍可能存在其他的残余文件。
示例:
[root@localhost ~]# userdel -r sawyer

  1.4 /etc/group

  /etc/group文件中保存了Linux中用到的每个组的信息,与UID类似,系统账户用的组通常会分配低于500的GID,而用户组的GID则会从500开始分配。文件中包含了组名、组密码、GID和属于该组的用户列表,形式如下:

develop:x:1000:sawyer,root

组密码允许非组内成员通过它临时成为该组成员。

此外,值得注意的是,用户列表中没有列出成员时,不代表这些组就没有成员。当一个用户在/etc/passwd文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中

示例:

[root@localhost ~]# groupadd -g 2000 develop2  -- 创建GID为2000,name为develop2的组
[root@localhost ~]# groupmod -g 1000 -n develop develop2  -- 将develop2的GID改为1000,name改为develop
[root@localhost ~]# gpasswd -a sawyer develop  -- 将用户sawyer加入develop中
[root@localhost ~]# gpasswd -d sawyer develop  -- 将用户sawyer从develop中移除
[root@localhost ~]# groupdel develop  -- 删除组develop      

 二、文件权限

  1.1 理解权限

    使用 ls -l 命令查看文件可得:

-rwxr--r--. 1 root root    0 4月   8 15:21 test.sh

      (1) 第一个字符代表对象类型:

         - 代表文件

         d 代表目录

       l  代表链接

         c 代表字符型设备

       b 代表块设备

         n 代表网络设备

    (2) rwxr--r-- 代表文件权限,每三个字符代表一组权限,分别对应 对象的所有者、对象所在的组、其他用户   

       代表无权限,对应的八进制数值为 0

       代表对象是可读的,对应的八进制数值为 4 

       代表对象是可写的,对应的八进制数值为 2

       x 代表对象是可执行的,对应的八进制数值为 1

  1.2 修改权限

    可以使用 chmod options mode file 方式修改文件权限,示例:   

[root@localhost example]# chmod u=rwx,g=r,o=r test.sh
[root@localhost example]# chmod 744 test.sh

    上述两种方式的效果是一样的。

    mode:模式参数,可以使用八进制模式或符号模式,八进制模式如744,符号模式为[ugoa] [+-=] [rwxXstugo]

        第一个方括号中的字符定义了权限作用的对象:

          u 代表用户 ,g 代表组,o 代表其他用户,a 代表 上述所有

        第二个方括号中的符号表示增加权限(+)、移除权限(-),赋值权限(=)

        第三个方括号中的符号代表作用到设置上的权限,除了rwx外,还包括以下几项:

          X:如果对象是目录或者它已有执行权限,那么赋予执行权限

          s:运行时重新设置UID或GID

          t:保留文件或目录

          u:将权限设置为跟拥有者一样

          g:将权限设置为跟属组一样

          o:将权限设置为跟其他用户一样

    options:附加参数,比如可以使用-R 选项 让权限的改变递归到文件和子目录中,也可以使用通配符指定多个文件。 

  1.3 改变属主

    可以使用chown命令改变文件的属主,使用方式为:chown options owner[.group] file,示例

[root@localhost example]# chown sawyer test.sh  --将test.sh的拥有者改为sawyer
[root@localhost example]# chown .develop test.sh  --将test.sh的所在组改为develop
[root@localhost example]# chown root.root test.sh  --将test.sh的拥有者改为root,所在组改为root组
原文地址:https://www.cnblogs.com/sawyerlsy/p/7279836.html