前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux用户与权限管理详解

Linux用户与权限管理详解

作者头像
Java微观世界
发布2025-01-20 21:04:33
发布2025-01-20 21:04:33
39800
代码可运行
举报
文章被收录于专栏:springbootspringboot
运行总次数:0
代码可运行

一、用户的管理

在 Linux 中,用户分为以下几种类型

  • 超级用户(root):拥有系统的最高权限,可以执行所有操作
  • 普通用户:权限受到限制,只能访问被授权的资源
  • 系统用户:系统进程运行时所使用的用户(如 nobodydaemon),通常不能登录系统

1、添加用户

useradd是Linux系统中用于创建新用户的基本命令。

基本语法

代码语言:javascript
代码运行次数:0
运行
复制
useradd [options] username

常用选项

  • -d:指定用户的主目录(默认主目录是 /home/用户名
  • -g:指定用户所属的初始组(默认组名是用户名
  • -G:为用户分配附加的组
  • -u:指定用户 ID(默认系统会自动分配)

常用示例

添加用户testuser

代码语言:javascript
代码运行次数:0
运行
复制
useradd testuser

添加用户zhangsan并设置该用户的主目录

代码语言:javascript
代码运行次数:0
运行
复制
useradd -d /usr/zhangsan zhangsan

添加lisi用户,该用户的主目录/usr/lisi,所属主组dev,附加组test

代码语言:javascript
代码运行次数:0
运行
复制
useradd -d /usr/lisi -g dev -G test lisi

2、设置用户密码

创建用户后,需要为其设置密码,否则用户无法登录。

基本语法

代码语言:javascript
代码运行次数:0
运行
复制
passwd username

常用示例

为用户testuser设置密码()

代码语言:javascript
代码运行次数:0
运行
复制
passwd testuser

系统会提示输入两次密码以进行确认

在这里插入图片描述
在这里插入图片描述

3、切换用户

su是switch user(切换用户)的缩写,主要用于在终端中切换到另一个用户(通常是root)执行操作。

基本语法

代码语言:javascript
代码运行次数:0
运行
复制
su [username]

常用示例

切换到普通用户testuser

代码语言:javascript
代码运行次数:0
运行
复制
su testuser

输入testuser的密码后,会切换到该用户

切换到root用户(如果你是普通用户)

代码语言:javascript
代码运行次数:0
运行
复制
su -	# 切换到 root 用户,并加载 root 的完整环境

或者直接:

代码语言:javascript
代码运行次数:0
运行
复制
su
# 或
su root		# 切换到 root 用户,但不加载目标用户的完整环境

输入root用户的密码后,切换到超级用户,前者加载root完整环境,后者保留当前用户环境

切换用户并加载其登录环境(推荐

代码语言:javascript
代码运行次数:0
运行
复制
su - username

---login参数,会加载目标用户的完整登录环境(包括环境变量、工作目录等)

退出当前用户

代码语言:javascript
代码运行次数:0
运行
复制
exit

或按快捷键:

代码语言:javascript
代码运行次数:0
运行
复制
Ctrl + D

切换到其他用户后,可以使用以下命令返回到上一个用户

快速验证当前用户

  1. 使用whoami查看当前用户名
在这里插入图片描述
在这里插入图片描述
  1. 使用id查看当前用户信息
在这里插入图片描述
在这里插入图片描述

4、修改用户

修改用户就是对用户名,用户主目录,用户组等进行修改。

基本语法

代码语言:javascript
代码运行次数:0
运行
复制
usermod [options] username

常用选项

  • -l:指定新的用户名
  • -d:指定新用户的主目录
  • -g:指定新用户属于哪个组(主组)
  • -G:指定新用户分配附加的组

常用示例

修改用户名(将zhangsan修改为lis)

代码语言:javascript
代码运行次数:0
运行
复制
usermod -l lis zhangsan  

修改主目录

代码语言:javascript
代码运行次数:0
运行
复制
# -m 选项很重要,当有了这个选项之后,目录不存在时会新建该目录。
usermod -d /usr/zhangsan2 -m zhangsan

修改所属组

代码语言:javascript
代码运行次数:0
运行
复制
usermod -g dev1 zhangsan

锁定用户

代码语言:javascript
代码运行次数:0
运行
复制
usermod -L zhangsan

解锁用户

代码语言:javascript
代码运行次数:0
运行
复制
usermod -U zhangsan

5、删除用户

删除用户并连同主目录一块删除

代码语言:javascript
代码运行次数:0
运行
复制
userdel -r zhangsan

默认情况下,专属用户组会被自动删除,非专属组不会删除

6、sudo命令

sudo允许普通用户以超级用户(root)或其他用户的身份执行命令。它是提升权限的一种安全方式,避免直接使用root登录。

基本语法

代码语言:javascript
代码运行次数:0
运行
复制
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权限运行单个命令

代码语言:javascript
代码运行次数:0
运行
复制
sudo apt update   # 更新系统软件包信息
  • 特点:临时获得root权限,运行结束后权限释放

切换到root用户

代码语言:javascript
代码运行次数:0
运行
复制
sudo -i
  • 作用:切换到root,加载root用户的完整登录环境(类似su -
  • 适用场景:需要长时间以root身份运行多个命令

以指定用户运行命令

代码语言:javascript
代码运行次数:0
运行
复制
sudo -u www-data whoami
  • 作用:以www-data用户的身份执行命令

sudo配置文件(/etc/sudoers

  • sudoers 文件是 sudo 权限的配置文件,定义了哪些用户或用户组可以执行哪些命令

常见规则示例

代码语言:javascript
代码运行次数:0
运行
复制
# 允许用户 `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

sudosu 的区别

特点

sudo

su

作用

提升权限执行单个命令或切换到root

切换到另一个用户(默认是root)

密码使用

使用当前用户的sudo密码

使用目标用户的密码(如root密码)

权限控制

通过/etc/sudoers进行细粒度控制

需要知道目标用户密码,没有细粒度权限控制

安全性

更安全(避免暴露root密码,且支持日志审计)

较不安全(需要启用并暴露root密码)

适用场景

执行单次提权命令、管理系统

长期以root用户身份工作

二、用户组的管理

在Linux系统中,用户组管理是用户管理的重要部分。通过对用户组的管理,可以方便地设置用户权限,组织用户,以及控制对资源的访问。

  • 用户组的添加、修改和删除实际上就是对/etc/group文件的更新
  • 使用root账户查看当前系统的用户组有哪些
在这里插入图片描述
在这里插入图片描述
  • lighthouse:组名,组的的名称
  • x:密码占位符,通常为 x,实际密码存储在/etc/gshadow文件中
  • 1001:组的ID
  • lighthouse:组内用户列表,属于该组的用户
  • 查看当前登录的账户属于哪一组
在这里插入图片描述
在这里插入图片描述
  • 查看某个用户属于哪一组
在这里插入图片描述
在这里插入图片描述

1、添加用户组

使用groupadd命令可以创建一个新的用户组。

基本语法

代码语言:javascript
代码运行次数:0
运行
复制
groupadd [选项] 用户组名

常用示例

创建一个名为developers的用户组

代码语言:javascript
代码运行次数:0
运行
复制
groupadd developers

指定组ID创建用户组

代码语言:javascript
代码运行次数:0
运行
复制
groupadd -g 1001 developers

2、修改用户组

使用groupmod命令修改组的信息,包括组名和组ID。

常用示例

将组developers的名字改为devteam

代码语言:javascript
代码运行次数:0
运行
复制
groupmod -n devteam developers
  • -n:指定新的组名

将组developers的GID修改为2000

代码语言:javascript
代码运行次数:0
运行
复制
groupmod -g 2000 developers

将用户john的主组修改为developers

代码语言:javascript
代码运行次数:0
运行
复制
usermod -g developers john

将用户john添加到admins附加组

代码语言:javascript
代码运行次数:0
运行
复制
usermod -aG admins john
  • -a:追加用户到附加组(不加 -a 会覆盖用户当前的附加组)
  • -G:指定附加组列表

3、删除用户组

删除一个名为developers的用户组

代码语言:javascript
代码运行次数:0
运行
复制
groupdel developers

如果系统中有文件或目录属于该组,删除组后文件可能会显示为无效的组ID

三、文件权限

1、查看文件属性

  • 使用命令 ls -lll可以查看文件的详细属性信息

示例

代码语言:javascript
代码运行次数:0
运行
复制
$ 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组合表示,分为三组
    1. 所有者(User):文件的拥有者
    2. 所属组(Group):文件所属的用户组
    3. 其他用户(Other):系统中所有其他用户

权限表示

字符

权限

说明

r

读取(read)

查看文件内容或列出目录内容

w

写入(write)

修改文件内容或在目录中创建/删除文件

x

执行(execute)

运行文件(脚本或程序)或进入目录

-

无权限

无法执行对应操作

权限结构

  • 权限由10个字符组成
    • 第 1 个字符:文件类型(如 -d 等)
    • 后 9 个字符:文件权限,分为三组(所有者、组、其他用户)

示例

解释

-rw-r--r--

普通文件,所有者可读写,组用户和其他用户只读

drwxr-xr-x

目录,所有者可读写执行,组用户和其他用户可读执行

-rwx------

普通文件,仅所有者可读写执行

4、修改文件权限

  • 权限可以通过chmod命令修改

语法

代码语言:javascript
代码运行次数:0
运行
复制
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:所有用户
    • +:增加权限
    • -:移除权限
    • =:设置权限

示例

代码语言:javascript
代码运行次数:0
运行
复制
chmod u+x file    # 给所有者增加执行权限
chmod g-w, o-w file    # 删除同组人员和其他组人员写的权限
chmod o=r file    # 将其他用户权限设置为只读

5、修改文件所有者和所属组

  • 使用chownchgrp命令修改文件所有者和所属组

常用示例

修改所有者

代码语言:javascript
代码运行次数:0
运行
复制
chown 新所有者 文件名

示例:

代码语言:javascript
代码运行次数:0
运行
复制
chown user2 file

修改所属组

代码语言:javascript
代码运行次数:0
运行
复制
chgrp 新组 文件名

示例:

代码语言:javascript
代码运行次数:0
运行
复制
chgrp developers file

同时修改所有者和组

代码语言:javascript
代码运行次数:0
运行
复制
chown 新所有者:新组 文件名

示例:

代码语言:javascript
代码运行次数:0
运行
复制
chown user2:developers file
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、用户的管理
    • 1、添加用户
    • 2、设置用户密码
    • 3、切换用户
    • 4、修改用户
    • 5、删除用户
    • 6、sudo命令
  • 二、用户组的管理
    • 1、添加用户组
    • 2、修改用户组
    • 3、删除用户组
  • 三、文件权限
    • 1、查看文件属性
    • 2、文件类型
    • 3、文件权限
    • 4、修改文件权限
    • 5、修改文件所有者和所属组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档