Linux基础之用户与权限

141 阅读6分钟

Linux 中,用户 (User) 是关键的基础概念。用户是这片赛博空间的数字人类,超级用户就像上帝 :p。这篇文章主要梳理 Linux 中与用户和权限相关的基础知识。

为什么超级用户叫 root,而不是 god 或者 manager?

Linux 里的文件系统通常被组织成一个树状结构,而 root 代表这棵树的根目录,代表着对整个文件系统的完全权限。普通用户则有限制的访问各个目录,就像各个树枝上的松鼠,又或者猴子。

一:入门

Linux 中一个普通用户可以干什么?

用户的直接操作对象是文件,而对文件有三种权限:

  • 写 (write),简化为 w
  • 读 (read),简化为 r
  • 执行 (excute),简化为 x (不使用 e 是为了避免和 edit 混淆)

每个 user 在 /home 文件夹都有一个自己的文件目录,用来存放自己的文件。其他文件夹则有一些被共享,例如 /bin/bash,用于执行命令。

又由于 Linux 是面向多用户多任务设计的,所以衍生了以下概念:

  • 拥有者 (Owner):文件的所有者
  • 用户组 (Group):被划定为具有相同权限的一群人
  • 其他用户 (Other):其他普通用户

由于是多用户系统,用户的鉴权必不可少的一部分,因此一个user必须经历以下基本步骤:

建立用户 -> 添加密码 -> 设置权限

二:具体过程

用户创建 useradd

用法: useradd parameter username

参数:

*   -d:指定用户的主目录(home directory)。
*   -e:指定用户的过期日期,格式为 YYYY-MM-DD。
*   -f:指定密码过期后多少天禁用该账号。
*   -g:指定用户所属的初始组。
*   -G:指定用户所属的附加组,多个组之间用逗号分隔。
*   -m:如果主目录不存在则创建。
*   -M:不创建主目录。
*   -n:取消创建一个与用户名同名的组。
*   -r:创建系统用户。
*   -s:指定用户的 shell。
*   -u:指定用户的 UID。

用户删除 userdel

用法: userdel parameter username

参数:

*   -r:删除用户的主目录以及邮件池。如果不使用此选项,则只删除用户账户,保留用户的主目录。
*   -f:强制删除用户,即使该用户当前已登录。谨慎使用,可能导致数据丢失。

设置/修改密码 passwd

用法: passwd parameter username

参数:

*   -l:锁定指定用户,使其无法登录。
*   -u:解锁指定用户。
*   -d:删除指定用户的密码,使其无需密码即可登录(不建议)。
*   -e:强制用户下次登录时必须更改密码。
*   --stdin:允许通过标准输入设置密码,常用于脚本自动化。  例如:echo "new_password" | passwd --stdin username

修改信息 usermod

用法: usermod parameter username

参数:

*   -d:修改用户的主目录。需要配合 -m 参数移动主目录的内容。
*   -e:修改用户的过期日期,格式为 YYYY-MM-DD。
*   -f:修改密码过期后多少天禁用该账号。
*   -g:修改用户所属的初始组。
*   -G:修改用户所属的附加组,多个组之间用逗号分隔。
*   -l:修改用户名。
*   -s:修改用户的 shell。
*   -u:修改用户的 UID。
*   -L:锁定用户账户,使其无法登录(等同于 `passwd -l`)。(需要root权限 XD)
*   -U:解锁用户账户(等同于 `passwd -u`)。
*   -c:修改用户的注释信息 (comment field),通常用于记录用户的全名或其他描述。

用户组管理

用户组创建 groupadd

用法: groupadd parameter groupname

参数:

*   -g:指定组的 GID。
*   -r:创建系统组。
*   -f:如果组已经存在,则退出,不报错。
*   -o:允许使用重复的 GID (需要配合 -g 使用)。

用户组删除 groupdel

用法: groupdel groupname

用户组修改 groupmod

用法: groupmod parameter groupname

参数:

*   -g:修改组的 GID。
*   -n:修改组名。

切换用户组 newgrp

用法: newgrp groupname

权限设置

在 Linux 系统中,文件权限主要通过 rwx (读、写、执行)三种基本权限来控制,这些权限分别针对三类用户:文件所有者(Owner)、所属组(Group)以及其他用户(Others)。查看文件权限时,通常会看到一串由 rwx 和 - 组成的字符序列。

这串字符按照严格的顺序排列,依次代表文件所有者、所属组以及其他用户的权限。每组三位字符对应一类用户的权限,若某位权限未赋予,则用 - 补全。例如,权限字符串 rwxr--rw- 表示:

  • 文件所有者(Owner)拥有 rwx(读、写、执行)权限;
  • 所属组(Group)拥有 r--(仅读)权限;
  • 其他用户(Others)拥有 rw-(读、写)权限。

设置权限 chmod

用法: chmod parameter filename

参数:

*   可以使用数字模式(如 777, 755)或符号模式(如 u+rwx, g+rx, o+r)来设置权限。
*   数字的具体含义是4代表执行,2代表写入,1代表读取,三位数从高到低是所有者,所在组,其他用户,拥有权限的加和就是每一位的值。
*   -R:递归地修改目录及其所有子文件和子目录的权限。
*   u:所有者 (user)
*   g:所属组 (group)
*   o:其他用户 (others)
*   a:所有用户 (all)
*   +:增加权限
*   -:移除权限
*   =:设置权限

例如:
* chmod 755 filename
* chmod u+rwx,g+rx,o+r filename

更改文件/目录的所有者chown

用法: chown parameter owner filename

*   -R:递归地修改目录及其所有子文件和子目录的所有者。
例如:chown user1 filename  (将 filename 的所有者改为 user1)
*   chown user1:group1 filename (将 filename 的所有者改为 user1,所属组改为 group1)

更改文件/目录的所属组chgrp

用法: chgrp parameter groupname filename

*   -R:递归地修改目录及其所有子文件和子目录的所属组。
例如:chgrp group1 filename (将 filename 的所属组改为 group1)

三:更为灵活精细的权限设置ACL(Access Control List)

ACL是一种更为灵活的权限配置方式,可以支持对文件/目录为特定组或者用户配置权限,进而实现了更加方便清晰的权限审计和管理。

权限配置setfacl

用法: setfacl parameter 权限:身份 filename

参数:

*   -m:修改 ACL 权限。
*   -x:删除指定的 ACL 条目。
*   -b:移除所有 ACL 条目。
*   -k:移除默认 ACL 条目。
*   -R:递归地设置目录及其所有子文件和子目录的 ACL 权限。
*   -d:设置默认 ACL 权限,只对目录有效。

权限:
*   r:读权限
*   w:写权限
*   x:执行权限
*   -:无权限

身份:
*   u:username:指定用户
*   g:groupname:指定组

例如:
*   setfacl -m u:user1:rwx filename (给用户 user1 赋予 filename 的读写执行权限)
*   setfacl -m g:group1:rx filename (给组 group1 赋予 filename 的读和执行权限)
*   setfacl -x u:user1 filename (移除用户 user1 的 ACL 权限)
*   setfacl -b filename (移除 filename 的所有 ACL 权限)