Linux用户与权限:权限管理

概述

Linux是多用户的操作系统,允许多个用户同时在系统上登录和工作。 为了确 保系统和用户的安全采取了如下安全管理方案:

  • 通过UID/GID确定每个用户在登录系统后都做了些什么

  • 通过UID/GID来区别不同用户所建立的文件或目录

    • 每个文件或目录都属于一个UID和一个GID
  • 每个进程都使用一个UID和一个或多个GID来运行

    • 通常由被运行进程的用户决定
  • 超级用户具有一切权限,无需特殊说明

  • 普通用户只能不受限制的操作主目录及其子目录下的所有文件,对系统 中其他目录/文件的访问受到限制

分类

文件所有者:user

文件所属组 :group

其他用户 :other

权限项 可读 可写 可执行 可读 可写 可执行 可读 可写 可执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1
权限分配 user user user group group group other other other
  • 目录上只有执行权限,表示可以进入或穿越他进入更深层次的子目录

  • 目录上只有执行权限,要访问该目录下的有读权限的文件,必须知道文件名才可以访问

  • 目录上只有执行权限,不能列出目录列表也不能删除该目录

  • 目录上执行权限和读权限的组合,表示可以进入目录并列出目录列表

  • 目录上执行权限和写权限的组合,表示可以在目录中创建、删除和重命名文件

分配三种基本权限

  • 文件和目录的使用者

    • 属主、同组人、其他人
  • 权限分配

    • 属主的权限:用于限制文件或目录的创建者

    • 属组的权限:用于限制文件或目录所属组的成员

    • 其他用户的权限:用于限制既不是属主又不是所属组的能访问该 文件或目录的其他人员

  • 权限的优先顺序

    • 如果UID匹配,就应用用户属主(user)权限

    • 否则,如果GID匹配,就应用组(group)权限

    • 如果都不匹配,就应用其它用户(other)权限

权限的管理

  • chmod改变文件或目录的权限

  • chown – 改变文件或目录的属主(所有者)

  • chgrp – 改变文件或目录所属的组

  • umask – 设置文件的缺省生成掩码

  • susudo – 切换用户及权限下放

修改文件/目录的权限

  • 更改已有文件或目录的访问权限

    • 使用chmod命令
  • chmod命令有两种设置方法

    • 文字设定法

      • 使用字母和操作符表达式来修改或设定文件的访问权限

      • chmod [-R] <文字模式> <文件或目录名>

  • 数值设定法

    • 使用八进制数字来设定文件的访问权限

    • chmod [-R] <八进制模式> <文件或目录名>

-R 选项表示对目录中的所有文件或子目录进行递归操作

chmod 的文字设定法

chmod [操作对象] [+|-|=] [访问权限] 文件或目录名

操作对象 操作方法 访问权限
u 属主(user) + 添加某权限 r 读
g 同组(group) - 删除某权限 w 写
o 其他(others) = 直接赋予某权限并取消其 他所有权限 x 执行
a 所有(all) = 直接赋予某权限并取消其 他所有权限 - 无权限

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
chmod u+rw myfile 

chmod a+rx,u+w myfile

chmod u+rwx,g+rx,o+rx myfile

chmod a+rwx ,g-w,o-w myfile

chmod a=rwx myfile

chmod go=rx myfile

chmod u-wx,go-x myfile

chmod a+x myfile

改变文件/目录属主或组

  • 只有root用户才能改变文件的所有者

  • 只有root用户或所有者才能改变文件所属的组

  • 用 chown 命令改变属主 和/或 组

    • chown [-R] <用户名[<.|:>组名]> <文件|目录>
  • chgrp 被用来改变所属组

    • chgrp [-R] <组名> <文件|目录>

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
chown soft myfile

chgrp softgrp myfile

chown .softgrp myfile

chown -R soft mydir

chgrp softgrp mydir

chown -R :softgrp mydir

chown -R soft.softgrp mydir

umask命令

  • 查看当前 umask 值

    • 格式:umask [-S]
  • 修改当前 umask 值

    • 格式:umask u1u2u3

      • u1表示的是不允许属主有的权限

      • u2表示的是不允许同组人有的权限

      • u3表示的是不允许其他人有的权限

  • RHEL/CentOS默认的 umask 值

    • 普通用户的 umask 是 002

    • root用户的 umask 是 022

umask值与文件/目录权限

umask值 新建目录的访问权限 新建文件的访问权限
022 777-022= 755 666-022= 644
027 777-027= 750 666-027= 640
002 777-002= 775 666-002= 664
006 777-006= 771 666-006= 660
007 777-007= 770 666-007= 660

su与sudo

  • su可用于在不注销的情况下切换到系统中的另一个用户。可以让一个普通用户拥有超级用户或其他用户的权限,也可以让超级用户以普通用户 的身份做一些事情。普通用户使用这个命令时,必须有超级用户或者其他用户的密码口令,退出可使用exit。

  • sudo可以让用户以其他身份来执行指定的命令,默认的身份为root。在 /etc/sudoers中,设置了可执行sudo命令的用户。若其未经授权的用户企 图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先 输入密码,之后有5分钟的有效期限,超过期限则需要重新输入密码。 Sudo提供日志,忠实的记录每个用户使用sudo做了什么,并能将日志传 到中心主机或者日志服务器。

  • 通过sudo能把有些超级权限有针对性的下放,并且不需要用户知道root密 码,所以sudo相对于权限无限制性的su来说还是比较安全的,所以sudo 也能被称为受限制的su,另外sudo时需要授权许可的。

  • 执行流程:当前用户切换到root并执行完后,直接退回到当前用户,前提 时要通过sudo的配置文件/etc/sudoers进行授权。

语法:sudo [选项] command

选项 含义
-b 在后台执行命令
-H 将HOME环境变量设为新身份的HOME环境变量
-k 结束密码的有效期限,下次在执行sudo时需要输入密码
-l 列出目前用户可执行与无法执行的命令,一般配置好 /etc/sudoers后,要用这个命令来查看和测试是否配置正确
-p 改变询问密码的提示符号
-s 执行指定的shell
-u用户 以指定的用户作为新的身份,若不加上此参数,则默认以root 作为新的身份
-v 显示用户的时间戳,如果用户运行sudo,输入用户密码后,在 段时间内可以不用输入口令,就可以直接进行sudo操作,用-v 可以跟踪最新的时间戳。

特殊权限

可执行文件的特殊权限

  • suid:使用命令的所属用户的权限来运行,而不是命令执行者的权 限 ,(对一个可执行文件,不是以发起者身份来获取资源,而是 以可执行文件的用户所有者身份来执行的)。

  • sgid:使用命令的组权限来运行目录的特殊权限,在设置了 sgid 权 限的目录中创建的文件会具备该目录的组权限。

  • sticky-bit:在带有粘滞位的目录中的文件只能被文件的所属用户 和root用户删除,不管该目录的写入权限是如何设置的

设置特殊权限

参数 作用
u+s 设置SUID权限
u-s 取消SUID权限
g+s 设置SGID权限
g-s 取消SGID权限
o+t 设置SBIT权限
o-t 取消SBIT权限

特殊权限的文字表示方法

SUID和SGID用s表示;Sticky-bit用t表示

SUID是占用属主的x位置来表示

SGID是占用组的x位置来表示

sticky-bit是占用其他人的x位置来表示

例如

1
2
3
4
5
6
7
8
9
-rwsr-xr-x 1 root root 23420 2019-08-11 /usr/bin/passwd 

-rwxr-sr-x 1 root tty 11084 03-10 21:28 /usr/bin/write

-rwsr-sr-x 1 root root 315416 2019-01-06 /usr/bin/crontab

drwxrws--- 3 root admin 4096 06-18 01:01 /admin/sales

drwxrwxrwt 5 root root 4096 06-18 01:01 /tmp

特殊权限的数值表示方法

权限 对应数字
SUID 4
SGID 2
Sticky-bit 1
- 0

举例:

1
2
3
4
5
6
7
8
9
10
11
-rwsr-xr-x ——4755

-rwxr-sr-x ——2755

-rwsr-sr-x ——6755

drwxrws---——2770

drwxrwxrwt ——1777

-rwxr-xr-x ——0755

使用chmod设置特殊权限

  • 为程序 ~/bin/myapp 添加 SUID权限

    • ```
      #chmod u+s ~/bin/myapp #chmod 4755 ~/bin/myapp
      1
      2
      3
      4
      5
      6
      7
      8
      9



      - 为目录 /home/groupspace 添加 SGID权限

      - ```
      #chmod g+s /home/groupspace

      #chmod 2755 /home/groupspace
  • 为目录 /home/share 添加 sticky-bit 权限

    • #chmod o+t /home/share 
      
      #chmod 1755 /home/share
      

文件隐藏属性

  • chattr命令

chattr命令用于设置文件的隐藏权限,英文全称为change attributes,语法格式为“chattr [参数] 文件名称”。

  • lsattr命令

lsattr命令用于查看文件的隐藏权限,英文全称为“list attributes”,语法格式为“lsattr [参数] 文件名称”。

chattr命令中的参数及其作用

参数 作用
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容在变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用零块填充原文件所在的硬盘区域)
A 不再修改这个文件或目录的最后访问时间(Atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
x 可以直接访问压缩文件中的内容

文件访问控制列表

  • setfacl命令

setfacl命令用于管理文件的ACL权限规则,英文全称为“set files ACL”,

语法格式为“setfacl [参数] 文件名称”。

  • getfacl命令

getfacl命令用于查看文件的ACL权限规则,英文全称为“get files ACL”,

语法格式为“getfacl [参数] 文件名称”。

参数 作用
-m 修改权限
-M 从文件中读取权限
-x 删除某个权限
-b 删除全部权限
-R 递归子目录

这点不做重点要求,若有同学有意向考证,则需掌握