主要内容

  1. 用户身份和能力
  2. 文件权限与归属
  3. 文件的特殊权限
  4. 文件的隐藏权限
  5. 文件的访问控制列表
  6. su 命令与sudo 服务

用户的身份和能力

  1. 用户
    Linux 中,每一个用户都有一个自己的 UID(User IDentification),该身份号码具有唯一性,因此可以通过 UID 值来判断用户身份。
    在 RHEL7 中,用户身份如下:

    • UID [0]:系统管理员
    • UID [1,999]:Linux 系统为了避免因为漏洞(系统或应用的)被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,继而有效控制被破坏范围。
    • UID [1000, +]:管理创建的用以日产工作的普通用户
  2. 特殊用户 root
    有种说法,Linux 中的管理员就是 root,这其实是错误的。
    Linux 的管理员是 root 并不是因为名字,而是因为 UID 的数值为 0。

  1. 用户组
    • 为了方便管理同一组的用户,Linux 系统引入了用户组的概念。
    • 通过用户组号码 GID(Group IDentification),可以把多个用户加入到同一个组中,从而为组中的用户统一规划权限或指定认为。
    • Linux 中创建每一个用户的同时,都将自动创建一个同名的基本用户组。
      • 该用户组中,只有该用户一人。
      • 若是该用户被纳入其他用户组中,则这个其他用户组称之为扩展用户组
      • 一个用户只能有一个基本用户组,但是可以有多个扩展用户组

useradd 命令

  • 作用:创建新的用户
  • 格式: useradd [选项] 用户名
  • 备注
    • 使用 useradd 命令建立的帐号,保存在 /etc/passwd 文本文件中。
    • Red Hat Linux 中,adduser 命令实际上就是 useradd符号链接
  • 选项:
    序号参数作用
    1-d指定用户的默认跟目录(默认为:/home/username)
    2-e账户到期时间,格式为 YYYY-MM-DD
    3-u指定用户的默认 UID
    4-g指定一个初始的用户基本组,该组必须已存在
    5-G指定一个或多个扩展用户组
    6-N不创建与用户同名的用户基本组
    7-s指定该用户默认的 Shell 解释器(默认为/bin/bash)
  • 案例
    案例useradd
    1
    2
    3
    4
    # /sbin/nologin 是一个特殊的 shell 解释器,使用该 shell 解释器的用户无法登录系统
    useradd -d /home/testuser -u 9527 -s /sbin/nologin testuser
    # uid=9527(testuser) gid=9527(testuser) 组=9527(testuser)
    id testuser

groupadd 命令

  • 作用:用于创建用户组
  • 格式:groupadd [选项] 群组名
  • 备注
    • 使用 groupadd 命令建立的账号,保存在 /etc/group 文本文件中
  • 选项:
    序号参数作用
    1-g指定新建工作组的 id
    2-r创建系统工作组,系统工作组的 ID 小于 500
  • 案例:
    1
    groupadd -g 1024 testgroup

usermod 命令

  • 作用:修改用户属性
  • 格式:usermod [选项] 用户名
  • 备注
    • 也可以直接编辑 /etc/passwd 文件
  • 选项:
    序号参数作用
    1-c填写用户账户的备注信息
    2-d -m二者连用,可重新指定用户根目录并将老数据迁移
    3-e用户到期时间,格式:YYYY-MM-DD
    4-g变更所属用户组
    5-G变更扩展用户组
    6-L锁定用户,禁止登陆
    7-U解锁用户,运行登陆
    8-s变更默认用户
    9-u修改用户 UID
  • 案例:
    案例usermod
    1
    2
    3
    4
    5
    # uid=9527(testuser) gid=9527(testuser) 组=9527(testuser)
    id testuser
    usermod -u 8888 -G root testuser
    # uid=8888(testuser) gid=9527(testuser) 组=9527(testuser),0(root)
    id testuser

passwd 命令

  • 作用:修改用户密码、过期时间、认证信息等
  • 格式:passwd [选项] [用户名]
  • 备注
    • 用户名不输入默认为 root
    • root 修改自己或其他用户的密码时,不需要验证旧密码。
  • 选项
    序号参数作用
    1-l锁定用户,禁止登陆
    2-u解除锁定,允许登陆
    3–stdin允许通过标准输入修改用户密码,例如:
    echo “New Password” | passwd –stdin UserName
    4-d使该用户可以空密登陆
    5-e强制用户下次登录时修改密码
    6-S显示用户的密码是否被锁定,以及密码所采用的加密算法名称
  • 案例:
    1
    2
    3
    4
    5
    # 锁定用户 testuser 的密码 。
    # passwd: 操作成功
    passwd -l testuser
    #testuser NP 2018-10-13 0 99999 7 -1 (密码为空。)
    passwd -S testuser

userdel

  • 作用:删除用户
  • 格式:userdel [选项] 用户名
  • 备注:
    • 执行删除操作室,用户根目录会默认保留,确认无用的话,使用 -r 参数将其删除
  • 选项:
    序号参数作用
    1-f强制删除用户
    2-r同时删除用户和根目录
  • 案例:
    1
    2
    3
    4
    5
    6
    7
    #uid=8888(testuser) gid=9527(testuser) 组=9527(testuser),0(root)
    id testuser

    userdel testuser

    #id: testuser: no such user
    id testuser

文件权限和归属

  • Linux 中使用不同字符区分文件类型

    • -:普通文件
    • d:目录文件
    • l:链接文件
    • b:块设备文件
    • c:字符设备文件
    • p:管道文件
  • 文件权限

    • 可读(r):可读取文件的实际内容
    • 可写(w):可以修改文件内容,如编辑、新增、修改、删除文件内容
    • 可执行(x):能够运行的一个脚本程序
  • 目录权限

    • 可读(r):可以读取目录内文件列表
    • 可写(w):可以修改目录内文件,如新增、删除、重命名
    • 可执行(x):能够进入该目录
  • 文件权限的字符与数字表

    权限分配文件所有者文件所属组其他用户
    权限项目执行执行执行
    字符表示rwxrwxrwx
    数字表示421421421

    • 说明:文件的权限数字表示法基于字符表示(rwx)的权限计算而来,目的是简化权限表示
    • 案例
      • 某文件具备(rwx)权限,则数值表示为 7(4+2+1)
      • 某文件,权限为 rwxrw-r–,数字表示为 764
      • 完整示例:
        1
        2
        #文件类型 访问权限      所属用户 所属群组         时间           文件名
        - rwxr--r-- 1 root root 23 9月 13 20:13 simple.sh

文件的特殊权限

单纯的文件 rwx 权限无法满足安全和灵活性的需求,于是产生了 SUID/SGID/SBIT 的特殊权限位,可以约普通权限一同使用,弥补不足。

SUID

SUID 是一种对二进制程序设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅针对当前用户拥有执行权限的二进制程序有效)。

加入 SUID 特殊权限后,所有者的权限由 rwx 变成了 rws,其中 x 改变成 s 就意味着该文件被赋予了 SUID 权限。若是原本权限诶 rw- ,赋权后将变为 S

  • 案例:

    1
    2
    3
    4
    # ---------- 1 root root 809 10月 13 19:16 /etc/shadow
    ls -l /etc/shadow
    # -rwsr-xr-x. 1 root root 27832 6月 10 2014 /bin/passwd
    ls -l /bin/passwd

    所有用户都可以执行 passwd 来修改自己的用户密码。但是密码存储在 /etc/shadow 中,其权限为 000,也就是说只有 root 用户才可以查看、修改。于是,给 passwd 机上 SUID 特殊权限位,在使用 passwd 修改密码时间,就可以让普通用户临时获取程序所有者的权限,从而将密码写入到 shadow 文件中。

SGID

SGID 实现了一下两种功能:

  • func-1. 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
    • 类似于 SUID,执行带有该标志位的程序,将自动获取受到影响需要读取的文件的所属组权限
  • func-2. 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)

命令:

1
chmod -Rf g+s testdir

SBIT

SBIT 特殊权限位可以确保用户只能删除自己的文件。也就是说,当对目录设置了 SBIT 权限后,该目录的文件就只能被其所有者执行删除操作,即使被操作的文件权限是 777。

当目录被设置 SBIT 特殊权限位后,文件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T

  • 原本有 x 执行权限则会写成 t
  • 原本没有 x 执行权限则会被写成 T

命令:

1
chmod -R o+t testdir

备注:文件能否被删除并不取决于自身的权限,而是看其所在的目录是否具有写入权限。

文件的隐藏属性

Linux 系统中的文件,除了具备一般权限和特殊权限外,还有一种隐藏权限。

有时遇到有权限也无法删除文件,或是日志文件中可以追加却不能修改或删除的情况都是该权限导致的。

chattr 命令

  • 作用:设置文件的隐藏权限
  • 格式:chattr [参数] 文件
  • 备注
    • 追加隐藏权限,+参数
    • 移除隐藏权限,-参数
  • 参数:
    序号参数作用
    1i无法对文件修改
    若对目录设置,则仅能修改子文件内容,不能新建或删除
    2a仅允许追加内容,无法覆盖或删除内容(Append Only)
    3A不在修改文件的最后访问时间(atime)
    4b不在修改文件或目录的存取时间
    5c默认将文件或目录进行压缩
    6d使用 dump 命令备份时忽略本文件、目录
    7D检查压缩文件的错误
    8s彻底从硬盘删除,不可恢复(硬盘上源文件区域用 0 填充)
    9S文件内容变更后立刻同步硬盘(sync)
    10t让文件系统支持尾部合并(tail-merging)
    11u删除该文件后依然保留其在硬盘中的数据,方便恢复
    12X可以直接访问压缩文件的内容
    • 案例
      案例chattr
      1
      2
      3
      4
      echo "test file" > chattrtest
      chattr +a chattrtest
      # rm: 无法删除"chattrtest": 不允许的操作
      rm -f chattrtest

lsattr 命令

  • 作用:显示文件的隐藏权限
  • 格式:lsattr [参数] 文件
  • 参数:略
  • 案例
    案例lsattr
    1
    2
    # -----a---------- chattrtest
    lsattr chattrtest

文件访问控制列表

一般权限、特殊权限和隐藏权限是针对某一类用户设置的。而文件的访问控制列表(ACL)是针对某个指定用户进行单独的权限控制。

文件的 ACL 提供的是在所有者、所属组、其他人的读、写、执行权限之外的特殊权限控制。

如果针对某个目录设置了 ACL,目录中的文件都会继承其 ACL;若针对文件设置的 ACL,则文件不在继承目录的 ACL。

setfacl 命令

  • 作用:用于管理文件的 ACL 规则
  • 格式:setfacl [参数] 文件名称
  • 备注

    • 设置过 ACL 后,ls 结果列表,权限后的最后一个. 会变成 +
      1
      2
      ls -ld /root
      dr-xrwx---+ 14 root root 4096 May 4 2017 /root
  • 案例:参见 案例

getfacl 命令

  • 作用:显示文件上设置的 ACL 信息
  • 格式:getfacl 文件
  • 案例:
    案例getfacl
    1
    2
    3
    4
    5
    6
    7
    # file: chattrtest
    # owner: root
    # group: root
    #user::rw-
    #group::r--
    #other::r--
    getfacl chattrtest

su 命令与 sudo 服务

su 命令

  • 作用:免退出切换用户身份
  • 备注
    • 从 root 切换到普通用户不想要密码,反之需要
  • 格式:su - username
    • 带上 -,表示完全切换新用户的信息,包括工作环境、环境变量等等

sudo 服务

  • 作用:给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务,避免密码泄露。
  • 格式:sudo [参数] 命令名称
  • 参数:
    序号参数作用
    1-h列出帮助信息
    2-l列出当前用户可执行的命令
    3-u
    用户名或 UID
    以指定的用户身份执行命令
    4-k清空密码的有效时间,下次执行需要密码验证
    5-b在后台执行指定的命令
    6-p修改询问密码的提示语

配置 sudo 服务

配置文件存储在/etc/sudoers,可以直接 vi 编辑,也可以使用 visudo 编辑。

需要注意:

  • visudo 命令需要 root 权限
  • visudo 会禁止多个用户同时修改配置文件,还能进行语法检查

总结

总结来说,sudo 具备以下功能:

  1. 限制用户执行特定命令
  2. 记录用户执行的没一条命令
  3. 配置文件 (/etc/sudoers)提供集中的用户管理、权限与主机等参数
  4. 验证密码的五分钟(默认值)内无需再次校验

附录

参考

  1. sudo 与 visudo 的超细用法说明
  2. Main page (简体中文)

写在最后

版本内容时间
v1.0.01. 创建文档2018-10-13 17:20:47
v1.0.11. 第五章阅读笔记完成,并完成校验2018-10-17 15:51:14