Linux命令行(五)
用户身份与文件权限
用户身份与能力
在RHEL 8系统中,用户身份有以下属性
- 管理员UID为
0
系统的管理员用户 - 系统用户UID为
1~999
Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围 - 普通用户UID从
1000开始
是由管理员创建的用于日常工作的用户
为方便管理属于同一组的用户,Linux系统中还引入了用户组的概念,通过使用用户组号码(GID)可以把多个用户加入到同一个组中,从而方便为组中的用户同一规划权限或指定任务
另外,在Linux系统中创建用户的时候,将会自动创建一个与其同名的基本用户组,而且这个基本用户组只会有该用户一个人。如果该用户以后被归纳到其他用户组,则这个其他用户组称之为扩展用户组,一个用户只有一个基本用户组,但可以有多个扩展用户组,从而满足日常的工作需要
id命令
id命令用于显示用户组的详细信息
例:
查看root用户的详细信息
id root
useradd命令
useradd命令用于创建新的用户账户,常用参数如下表所示
| 参数 | 作用 |
|---|---|
| -d | 指定用户的家目录(默认为/home/username) |
| -e | 账户到期时间,格式为YYYY-MM-DD |
| -u | 指定该账户的默认UID |
| -g | 指定一个初始的用户基本组用户基本组(必须已经存在) |
| -G | 指定一个或多个扩展用户组 |
| -N | 不创建与用户同名的基本用户组 |
| -s | 指定该用户的默认Shell解释器 |
例:
创建jack用户
useradd jack
groupadd命令
groupadd命令用于创建新的用户组
例:
创建test用户组
groupadd test
usermod命令
usermod命令用于修改用户的属性,常用参数如下表所示
| 参数 | 作用 |
|---|---|
| -c | 填写用户账户的备注信息 |
| -d -m | 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
| -e | 账户到期时间,格式为YYYY-MM-DD |
| -g | 变更所属用户组 |
| -G | 变更扩展用户组 |
| -L | 锁定用户禁止其登录系统 |
| -U | 解锁用户,允许其登录系统 |
| -s | 变更默认终端 |
| -u | 修改用户的UID |
例:
修改jack用户UID为8888
usermod -u 8888 jack
passwd命令
passwd命令用于修改用户密码、过期时间等信息,常用参数如下表所示
| 参数 | 作用 |
|---|---|
| -l | 锁定用户,禁止其登录 |
| -u | 解除锁定,允许用户登录 |
| —stdin | 通过标准输入修改用户密码 |
| -d | 使该用户可用空密码登录系统 |
| -e | 强制用户在下次登录时修改密码 |
| -S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
例:
通过标准输入修改jack用户密码
echo “NewPassWord” | passwd —stdin jack
userdel命令
userdel命令用于删除已有的用户账户,常用参数如下表所示
| 参数 | 作用 |
|---|---|
| -f | 强制删除用户 |
| -r | 同时删除用户及用户家目录 |
例:
删除jack用户
userdel jack
文件权限与归属
在Linux系统中,每个文件都有归属的所有者和所属组,并且规定了文件的所有者、所属组以及其他人对文件所拥有的可读r、可写w、可执行x等权限
对一般文件来说,可读为能够查看文件内容,可写为能够对文件进行编辑、新建、删除等操作,可执行为能够运行一个脚本程序
对目录文件来说,可读为能够读取目录内的文件列表,可写为能够在目录内新建、删除、重命名文件,可执行为能够进入该目录
可读、可写、可执行权限对应的命令在文件和目录上是有区别的,具体如下表所示
| 文件 | 目录 | |
|---|---|---|
可读r |
cat | ls |
可写w |
vim | touch |
可执行x |
./scrip | cd |
文件的可读、可写、可执行权限可以用数字4、2、1来表示,文件所有者、所属组以及其他用户权限之间无关系,具体如下表所示
| 权限项 | 可读 | 可写 | 可执行 | 可读 | 可写 | 可执行 | 可读 | 可写 | 可执行 |
| 字符表示 | r | w | x | r | w | x | r | w | x |
| 数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
| 权限分配 | 文件所有者 | 文件所属组 | 其他用户 | ||||||
文件权限的数字表示法基于字符rwx的权限计算而来,其目的是简化权限的表示方法
例如,如果某个文件的权限为7,则代表可读、可写、可执行(4+2+1),字符表示为rwx;
如果文件的权限为761,则代表文件的所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限,其他用户只有可读的权限,字符表示为rwxrw--r-
rwxrw--r-中的减号为占位符,代表没有权限,数字表示为0
文件的特殊权限
SUID
SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者权限
SGID
SGID特殊权限有两种应用场景,当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有的用户组的名称
SBIT
SBIT特殊权限可确保用户只能删除自己的文件,而不能删除其他用户的权限
设置文件的特殊权限需要用到chmod命令,用法为chmod [参数] 文件名,特殊权限的参数如下表所示
| 参数 | 作用 |
|---|---|
| u+s | 设置SUID权限 |
| u-s | 取消SUID权限 |
| g+s | 设置SGID权限 |
| g-s | 取消SGID权限 |
| o+t | 设置SBIT权限 |
| o-t | 取消SBIT权限 |
文件的隐藏属性
chattr命令
chattr命令用于设置文件的隐藏权限,常用参数如下表所示
| 参数 | 作用 |
|---|---|
| i | 无法对文件进行修改,若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
| a | 仅允许补充(追加)内容,无法覆盖/删除内容 |
| S | 文件内容在变更后立即同步到硬盘 |
| s | 彻底从硬盘中删除,不可恢复 |
| A | 不再修改这个文件或目录的最后访问时间 |
| b | 不再修改文件或目录的存取时间 |
| D | 检查压缩文件中的错误 |
| d | 使用dump命令备份时忽略本文件/目录 |
| c | 默认将文件或目录进行压缩 |
| u | 当删除该文件后依然保留其在硬盘中的数据,一边日后恢复 |
| t | 让文件系统支持尾部合并 |
| x | 可以直接访问压缩文件中的内容 |
lsattr命令
lsattr命令用于查看文件的隐藏权限
文件访问控制列表
setfacl命令
setfacl命令用于管理文件的ACL权限规则,ACL权限提供的是在所有者、所属组、其他人的读/写/执行之外的特殊权限控制,常用参数如下表所示
| 参数 | 作用 |
|---|---|
| -m | 修改权限 |
| -M | 从文件中读取权限 |
| -x | 删除某个权限 |
| -b | 删除全部权限 |
| -R | 递归子目录 |
getfacl命令
getfacl命令用于查看文件的ACL权限规则
su命令与sudo服务
su命令可以解决切换用户身份的需求,使得当前用户不登出的情况下切换到其他用户
例:
切换到jack用户
su jack
sudo命令用于给普通用户提供额外的权限,常用参数如下表所示
| 参数 | 作用 |
|---|---|
| -h | 列出帮助信息 |
| -l | 列出当前用户可以执行的命令 |
| -u 用户名或UID值 | 以指定的用户身份执行命令 |
| -k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
| -b | 在后台执行指定的命令 |
| -p | 更改询问密码的提示语 |
如果担心直接修改配置文件会出现问题,可以使用sudo命令提供的visudo命令来配置用户权限,visudo命令用于编辑、配置用户sudo的权限文件
visudo命令操作方法与使用Vim编辑器方法一致
先来首ALL的小曲
例:
谁可以使用 允许使用的主机 = (以谁的身份) 可执行命令的列表
谁可以使用:稍后要为那位用户进行命令授权
允许使用的主机:可以填写ALL表示不限制来源的主机
以谁的身份:可以填写ALL便是系统最高权限
可执行命令序列:可以填写ALL表示不限制命令例:
为jack用户提供额外的权限,100行左右添加
jack ALL=(ALL) ALL





