当前位置: 首页 > article >正文

Linux用户与权限管理详解

文章目录

  • 一、用户的管理
    • 1、添加用户
    • 2、设置用户密码
    • 3、切换用户
    • 4、修改用户
    • 5、删除用户
    • 6、sudo命令
  • 二、用户组的管理
    • 1、添加用户组
    • 2、修改用户组
    • 3、删除用户组
  • 三、文件权限
    • 1、查看文件属性
    • 2、文件类型
    • 3、文件权限
    • 4、修改文件权限
    • 5、修改文件所有者和所属组

一、用户的管理

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

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

1、添加用户

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

基本语法

useradd [options] username

常用选项

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

常用示例

  1. 添加用户testuser

    useradd testuser
    
  2. 添加用户zhangsan并设置该用户的主目录

    useradd -d /usr/zhangsan zhangsan
    
  3. 添加lisi用户,该用户的主目录/usr/lisi,所属主组dev,附加组test

    useradd -d /usr/lisi -g dev -G test lisi
    

2、设置用户密码

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

基本语法

passwd username

常用示例

  • 为用户testuser设置密码()
    passwd testuser
    
  • 系统会提示输入两次密码以进行确认
    在这里插入图片描述

3、切换用户

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

基本语法

su [username]

常用示例

  1. 切换到普通用户testuser

    su testuser
    

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

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

    su -	# 切换到 root 用户,并加载 root 的完整环境
    

    或者直接:

    su
    # 或
    su root		# 切换到 root 用户,但不加载目标用户的完整环境
    

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

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

    su - username
    

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

  4. 退出当前用户

    exit
    

    或按快捷键:

    Ctrl + D
    

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

快速验证当前用户

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

4、修改用户

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

基本语法

usermod [options] username

常用选项

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

常用示例

  1. 修改用户名(将zhangsan修改为lis)
    usermod -l lis zhangsan  
    
  2. 修改主目录
    # -m 选项很重要,当有了这个选项之后,目录不存在时会新建该目录。
    usermod -d /usr/zhangsan2 -m zhangsan
    
  3. 修改所属组
    usermod -g dev1 zhangsan
    
  4. 锁定用户
    usermod -L zhangsan
    
  5. 解锁用户
    usermod -U zhangsan
    

5、删除用户

  • 删除用户并连同主目录一块删除
    userdel -r zhangsan
    
  • 默认情况下,专属用户组会被自动删除,非专属组不会删除

6、sudo命令

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

基本语法

sudo [选项] [命令]

常用选项

选项作用示例
-i模拟登录目标用户(默认 root),加载完整的登录环境sudo -i
-u <user>以指定用户(<user>)的身份运行命令。默认为 rootsudo -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命令无需再次输入密码

常用示例

  1. sudo权限运行单个命令
    sudo apt update   # 更新系统软件包信息
    
    • 特点:临时获得root权限,运行结束后权限释放
  2. 切换到root用户
    sudo -i
    
    • 作用:切换到root,加载root用户的完整登录环境(类似su -
    • 适用场景:需要长时间以root身份运行多个命令
  3. 以指定用户运行命令
    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

sudosu 的区别

特点sudosu
作用提升权限执行单个命令或切换到root切换到另一个用户(默认是root)
密码使用使用当前用户的sudo密码使用目标用户的密码(如root密码)
权限控制通过/etc/sudoers进行细粒度控制需要知道目标用户密码,没有细粒度权限控制
安全性更安全(避免暴露root密码,且支持日志审计较不安全(需要启用并暴露root密码)
适用场景执行单次提权命令、管理系统长期以root用户身份工作

二、用户组的管理

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

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

1、添加用户组

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

基本语法

groupadd [选项] 用户组名

常用示例

  1. 创建一个名为developers的用户组
    groupadd developers
    
  2. 指定组ID创建用户组
    groupadd -g 1001 developers
    

2、修改用户组

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

常用示例

  1. 将组developers的名字改为devteam
    groupmod -n devteam developers
    
    • -n:指定新的组名
  2. 将组developers的GID修改为2000
    groupmod -g 2000 developers
    
  3. 将用户john的主组修改为developers
    usermod -g developers john
    
  4. 将用户john添加到admins附加组
    usermod -aG admins john
    
    • -a:追加用户到附加组(不加 -a 会覆盖用户当前的附加组)
    • -G:指定附加组列表

3、删除用户组

  • 删除一个名为developers的用户组
    groupdel developers
    
  • 如果系统中有文件或目录属于该组,删除组后文件可能会显示为无效的组ID

三、文件权限

1、查看文件属性

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

示例

$ 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命令修改

语法

chmod [模式] 文件名

方式 1:使用数字表示权限

  • 每种权限用一个数字表示
权限数字
r4
w2
x1
-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、修改文件所有者和所属组

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

常用示例

  1. 修改所有者
    chown 新所有者 文件名
    
    示例:
    chown user2 file
    
  2. 修改所属组
    chgrp 新组 文件名
    
    示例:
    chgrp developers file
    
  3. 同时修改所有者和组
    chown 新所有者:新组 文件名
    
    示例:
    chown user2:developers file
    

http://www.kler.cn/a/449018.html

相关文章:

  • MySQL-存储过程(头歌数据库实验题)
  • Postman接口测试工具使用详解
  • LeetCode 209. 长度最小的子数组 (C++实现)
  • MyBatis通过注解配置执行SQL语句原理源码分析
  • 24.12.23 注解
  • 详细ECharts图例3添加鼠标单击事件的柱状图
  • Java模拟Mqtt客户端连接Mqtt Broker
  • 增强LabVIEW与PLC通信稳定性
  • 培训机构Day15
  • 小型 Vue 项目,该不该用 Pinia 、Vuex呢?
  • 云原生大数据计算服务 MaxCompute 是什么?
  • 图像处理基础 | 查看两张图像的亮度差异,Y通道相减
  • 《深入浅出 Servlet:Java Web 开发的基石》(二)
  • JMeter 使用详解
  • 银河麒麟 SSH Vscode连接
  • C++简明教程(文章要求学过一点C语言)(2)
  • 【网络云计算】2024第52周-每日【2024/12/23】小测-理论实操
  • 【一文了解】C#重点-委托1
  • Linux下Java通过JNI调用C++
  • NodeMCU驱动28BYJ-48型步进电机(Arduino)
  • Golang中的Goroutine调度策略
  • 爬虫自动化(DrissionPage)
  • [机器学习]XGBoost(3)——确定树的结构
  • python实现Excel转图片
  • Flutter Visibility控件详解
  • 天锐绿盾加密软件与Ping32两款企业防泄密软件对比:分析文件防止泄露解决方案