Linux用户与权限管理详解
方式 1:使用数字表示权限。方式 2:使用符号表示权限。超级用户(root)
文章目录
一、用户的管理
在 Linux 中,用户分为以下几种类型
超级用户(root)
:拥有系统的最高权限,可以执行所有操作普通用户
:权限受到限制,只能访问被授权的资源系统用户
:系统进程运行时所使用的用户(如nobody
、daemon
),通常不能登录系统
1、添加用户
useradd
是Linux系统中用于创建新用户的基本命令。
基本语法
useradd [options] username
常用选项
-d
:指定用户的主目录(默认主目录是/home/用户名
)-g
:指定用户所属的初始组(默认组名是用户名
)-G
:为用户分配附加的组-u
:指定用户 ID(默认系统会自动分配)
常用示例
-
添加用户testuser
useradd testuser
-
添加用户zhangsan并设置该用户的
主目录
useradd -d /usr/zhangsan zhangsan
-
添加lisi用户,该用户的
主目录
/usr/lisi,所属主组
dev,附加组
testuseradd -d /usr/lisi -g dev -G test lisi
2、设置用户密码
创建用户后,需要为其设置密码,否则用户无法登录。
基本语法
passwd username
常用示例
- 为用户
testuser
设置密码()passwd testuser
- 系统会提示输入两次密码以进行确认
3、切换用户
su
是switch user(切换用户)的缩写,主要用于在终端中切换到另一个用户(通常是root
)执行操作。
基本语法
su [username]
常用示例
-
切换到普通用户
testuser
su testuser
输入
testuser
的密码后,会切换到该用户 -
切换到
root
用户(如果你是普通用户)su - # 切换到 root 用户,并加载 root 的完整环境
或者直接:
su # 或 su root # 切换到 root 用户,但不加载目标用户的完整环境
输入
root
用户的密码后,切换到超级用户,前者加载root完整环境,后者保留当前用户环境 -
切换用户并加载其登录环境(
推荐
)su - username
加
-
或--login
参数,会加载目标用户的完整登录环境(包括环境变量、工作目录等) -
退出当前用户
exit
或按快捷键:
Ctrl + D
切换到其他用户后,可以使用以下命令返回到
上一个用户
快速验证当前用户
- 使用
whoami
查看当前用户名
- 使用
id
查看当前用户信息
4、修改用户
修改用户就是对用户名,用户主目录,用户组等进行修改。
基本语法
usermod [options] username
常用选项
-l
:指定新的用户名-d
:指定新用户的主目录-g
:指定新用户属于哪个组(主组)-G
:指定新用户分配附加的组
常用示例
- 修改用户名(将zhangsan修改为lis)
usermod -l lis zhangsan
- 修改主目录
# -m 选项很重要,当有了这个选项之后,目录不存在时会新建该目录。 usermod -d /usr/zhangsan2 -m zhangsan
- 修改所属组
usermod -g dev1 zhangsan
- 锁定用户
usermod -L zhangsan
- 解锁用户
usermod -U zhangsan
5、删除用户
- 删除用户并连同主目录一块删除
userdel -r zhangsan
- 默认情况下,专属用户组会被自动删除,非专属组不会删除
6、sudo命令
sudo
允许普通用户以超级用户(root)或其他用户的身份执行命令。它是提升权限
的一种安全方式,避免直接使用root
登录。
基本语法
sudo [选项] [命令]
常用选项
选项 | 作用 | 示例 |
---|---|---|
-i | 模拟登录目标用户(默认 root ),加载完整的登录环境 | sudo -i |
-u <user> | 以指定用户(<user> )的身份运行命令。默认为 root | sudo -u www-data whoami |
-k | 立即失效当前用户的 sudo 缓存,要求下次使用 sudo 时重新输入密码 | sudo -k |
-l | 列出当前用户可以使用的 sudo 权限 | sudo -l |
-v | 验证用户的 sudo 权限,但不运行任何命令(重新输入密码时可用) | sudo -v |
--edit 或 -e | 以编辑模式打开文件(以 sudo 权限) | sudo -e /etc/fstab |
- 默认情况下,
sudo
在输入密码后会缓存一段时间(通常是15分钟
) - 在缓存时间内,重复执行
sudo
命令无需再次输入密码
常用示例
- 以
sudo
权限运行单个命令sudo apt update # 更新系统软件包信息
- 特点:临时获得
root
权限,运行结束后权限释放
- 特点:临时获得
- 切换到
root
用户sudo -i
- 作用:切换到
root
,加载root用户的完整登录环境
(类似su -
) - 适用场景:需要长时间以root身份运行多个命令
- 作用:切换到
- 以指定用户运行命令
sudo -u www-data whoami
- 作用:以
www-data
用户的身份执行命令
- 作用:以
sudo
配置文件(/etc/sudoers
)
sudoers
文件是sudo
权限的配置文件,定义了哪些用户或用户组可以执行哪些命令
常见规则示例
# 允许用户 `user1` 以 `root` 权限执行任何命令
user1 ALL=(ALL:ALL) ALL
# 允许用户 `user2` 在不输入密码的情况下运行所有命令
user2 ALL=(ALL:ALL) NOPASSWD: ALL
# 允许用户 `user3` 只运行特定命令
user3 ALL=(ALL:ALL) /usr/bin/systemctl restart apache2
# 允许用户组 `admin` 执行所有命令
%admin ALL=(ALL:ALL) ALL
sudo
和su
的区别
特点 | sudo | su |
---|---|---|
作用 | 提升权限执行单个命令或切换到root | 切换到另一个用户(默认是root) |
密码使用 | 使用当前用户的sudo密码 | 使用目标用户的密码(如root密码) |
权限控制 | 通过/etc/sudoers 进行细粒度控制 | 需要知道目标用户密码,没有细粒度权限控制 |
安全性 | 更安全(避免暴露root密码,且支持日志审计 ) | 较不安全(需要启用并暴露root密码) |
适用场景 | 执行单次提权命令、管理系统 | 长期以root用户身份工作 |
二、用户组的管理
在Linux系统中,用户组管理
是用户管理的重要部分。通过对用户组的管理,可以方便地设置用户权限,组织用户,以及控制对资源的访问。
- 用户组的添加、修改和删除实际上就是对
/etc/group
文件的更新 - 使用root账户查看当前系统的用户组有哪些
- lighthouse:
组名
,组的的名称 - x:
密码占位符
,通常为 x,实际密码存储在/etc/gshadow
文件中 - 1001:
组的ID
- lighthouse:
组内用户列表
,属于该组的用户
- lighthouse:
- 查看当前登录的账户属于哪一组
- 查看某个用户属于哪一组
1、添加用户组
使用groupadd
命令可以创建一个新的用户组。
基本语法
groupadd [选项] 用户组名
常用示例
- 创建一个名为developers的用户组
groupadd developers
- 指定组ID创建用户组
groupadd -g 1001 developers
2、修改用户组
使用groupmod
命令修改组的信息,包括组名和组ID。
常用示例
- 将组developers的名字改为devteam
groupmod -n devteam developers
-n
:指定新的组名
- 将组developers的GID修改为2000
groupmod -g 2000 developers
- 将用户john的
主组
修改为developersusermod -g developers john
- 将用户john添加到admins
附加组
usermod -aG admins john
-a
:追加用户到附加组(不加 -a 会覆盖用户当前的附加组)-G
:指定附加组列表
3、删除用户组
- 删除一个名为developers的用户组
groupdel developers
- 如果系统中有文件或目录属于该组,删除组后文件可能会显示为无效的组ID
三、文件权限
1、查看文件属性
- 使用命令
ls -l
或ll
可以查看文件的详细属性信息
示例
$ ls -l
-rw-r--r-- 1 user group 1234 Dec 22 12:00 example.txt
输出的每一部分的含义如下:
字段 | 示例值 | 含义 |
---|---|---|
文件类型和权限 | -rw-r--r-- | 文件类型和权限(文件、目录、符号链接等) |
硬链接数量 | 1 | 指向该文件的硬链接数量 |
所有者(用户) | user | 文件所属用户 |
所属组 | group | 文件所属组 |
文件大小 | 1234 | 文件大小,以字节为单位 |
修改时间 | Dec 22 12:00 | 文件的最后修改时间 |
文件名 | example.txt | 文件的名称 |
2、文件类型
- 文件类型由第一个字符决定
字符 | 文件类型 | 说明 |
---|---|---|
- | 普通文件 | 常见的文本文件、二进制文件等 |
d | 目录 | 文件夹 |
l | 符号链接 | 指向另一个文件的快捷方式 |
b | 块设备文件 | 存储设备(如硬盘、光盘) |
c | 字符设备文件 | 终端设备等 |
s | 套接字文件 | 用于进程间通信 |
p | 命名管道(FIFO) | 用于进程间通信的特殊文件 |
3、文件权限
- 文件权限由
rwx
组合表示,分为三组所有者
(User):文件的拥有者所属组
(Group):文件所属的用户组其他用户
(Other):系统中所有其他用户
权限表示
字符 | 权限 | 说明 |
---|---|---|
r | 读取(read) | 查看文件内容或列出目录内容 |
w | 写入(write) | 修改文件内容或在目录中创建/删除文件 |
x | 执行(execute) | 运行文件(脚本或程序)或进入目录 |
- | 无权限 | 无法执行对应操作 |
权限结构
- 权限由10个字符组成
- 第 1 个字符:文件类型(如
-
、d
等) - 后 9 个字符:文件权限,分为三组(所有者、组、其他用户)
- 第 1 个字符:文件类型(如
示例 | 解释 |
---|---|
-rw-r--r-- | 普通文件,所有者可读写,组用户和其他用户只读 |
drwxr-xr-x | 目录,所有者可读写执行,组用户和其他用户可读执行 |
-rwx------ | 普通文件,仅所有者可读写执行 |
4、修改文件权限
- 权限可以通过
chmod
命令修改
语法
chmod [模式] 文件名
方式 1:使用数字表示权限
- 每种权限用一个数字表示
权限 | 数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
- | 0 |
示例
chmod 755 file
- 所有者:
rwx
(4+2+1=7) - 组用户:
r-x
(4+1=5) - 其他用户:
r-x
(4+1=5)
- 所有者:
方式 2:使用符号表示权限
- 符号表示法
u
:所有者g
:组用户o
:其他用户a
:所有用户+
:增加权限-
:移除权限=
:设置权限
示例
chmod u+x file # 给所有者增加执行权限
chmod g-w, o-w file # 删除同组人员和其他组人员写的权限
chmod o=r file # 将其他用户权限设置为只读
5、修改文件所有者和所属组
- 使用
chown
和chgrp
命令修改文件所有者和所属组
常用示例
- 修改所有者
示例:chown 新所有者 文件名
chown user2 file
- 修改所属组
示例:chgrp 新组 文件名
chgrp developers file
- 同时修改所有者和组
示例:chown 新所有者:新组 文件名
chown user2:developers file
更多推荐
所有评论(0)