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

【Linux 从基础到进阶】Linux中的用户认证与授权

Linux中的用户认证与授权

1. 引言

在Linux系统中,**用户认证(authentication)授权(authorization)**是两个核心的安全机制,用来控制系统资源的访问和管理用户操作权限。用户认证确保登录的用户是合法的,授权则决定用户能够执行哪些操作。本文将详细介绍Linux中的用户认证与授权机制,包括常见的认证方式、授权模型以及如何配置和管理这些功能。

2. 用户认证

用户认证是验证用户身份的过程。在Linux中,常见的用户认证方式包括密码认证、密钥认证以及多因素认证。

2.1 用户认证文件

Linux系统使用以下文件来管理用户信息:

  • /etc/passwd:存储用户账户信息,如用户名、UID、GID、主目录和默认Shell。
  • /etc/shadow:存储用户的加密密码以及密码策略信息,如密码到期时间。
/etc/passwd 文件示例
user:x:1001:1001:,,,:/home/user:/bin/bash
  • user:用户名。
  • x:表示密码存储在/etc/shadow文件中。
  • 1001:用户ID(UID)。
  • 1001:组ID(GID)。
  • /home/user:用户的主目录。
  • /bin/bash:默认登录shell。
/etc/shadow 文件示例
user:$6$abcdxyz$encryptedpassword:18375:0:99999:7:::
  • user:用户名。
  • $6$abcdxyz$encryptedpassword:加密密码。
  • 18375:密码最后一次修改的日期。

2.2 认证方式

2.2.1 密码认证

密码认证是Linux最常见的用户认证方式。用户在登录系统时,需要输入用户名和密码,系统会将输入的密码与/etc/shadow文件中的加密密码进行比对。可以使用passwd命令修改用户密码:

sudo passwd username
2.2.2 密钥认证

密钥认证通过使用公钥-私钥对来验证用户身份,常用于远程登录(如SSH)。用户将公钥放在服务器的~/.ssh/authorized_keys文件中,登录时使用对应的私钥进行认证。配置密钥认证的步骤如下:

  1. 生成密钥对:
    ssh-keygen -t rsa
    
  2. 将公钥复制到服务器:
    ssh-copy-id user@server
    
2.2.3 多因素认证(MFA)

多因素认证增加了额外的验证步骤,例如使用Google Authenticator生成一次性密码。安装多因素认证工具:

sudo apt install libpam-google-authenticator

然后通过以下命令生成多因素认证配置:

google-authenticator

将其集成到PAM(可插拔认证模块)中,以增加系统的安全性。

2.3 Pluggable Authentication Modules (PAM)

PAM 是Linux中处理用户认证的模块化框架,允许管理员配置多种认证方式(如密码、密钥、指纹等)。PAM的配置文件通常位于 /etc/pam.d/ 目录中,每个应用程序(如SSH、sudo等)有自己对应的配置文件。

示例:修改 /etc/pam.d/sshd 文件,添加多因素认证支持:

auth required pam_google_authenticator.so

3. 用户授权

用户授权是在系统中控制用户对资源的访问权限。在Linux中,授权依赖于文件权限用户组机制。

3.1 Linux 文件权限模型

Linux使用一种三组三类的文件权限模型,分别为用户(owner)组(group)其他(others),权限类型为读(r)写(w)执行(x)

3.1.1 权限表示法

权限通过三组字符表示,例如:

-rwxr-xr--
  • rwx:文件所有者的权限(读、写、执行)。
  • r-x:文件所在组的权限(读、执行)。
  • r--:其他用户的权限(读)。
3.1.2 修改权限

使用chmod命令修改文件或目录的权限。例如,将文件file.txt的权限设置为用户可读写,组和其他用户只读:

chmod 644 file.txt

也可以使用符号方式修改权限:

chmod u+x file.sh  # 为用户添加执行权限
chmod g-w file.txt # 移除组的写权限

3.2 用户组管理

Linux中的每个用户都属于至少一个用户组。用户组用于管理多个用户对相同资源的访问权限。

3.2.1 查看和管理组
  • 查看用户所属的组:
    groups username
    
  • 添加用户到组:
    sudo usermod -aG groupname username
    
3.2.2 创建和删除组
  • 创建新组:
    sudo groupadd newgroup
    
  • 删除组:
    sudo groupdel groupname
    
3.2.3 文件的组所有权

可以使用chgrp命令修改文件的组所有权:

chgrp groupname file.txt

3.3 高级权限机制

除了传统的文件权限模型,Linux还提供了高级的授权机制,如ACLsudoers

3.3.1 Access Control Lists (ACL)

ACL为文件和目录提供更细粒度的权限控制,允许为特定用户或组设置权限。使用setfacl命令设置ACL:

setfacl -m u:username:rwx file.txt

查看文件的ACL:

getfacl file.txt
3.3.2 Sudo 权限管理

sudo 是Linux中用于临时提升普通用户权限执行特权操作的工具。sudo 的配置文件为 /etc/sudoers,可以使用visudo进行编辑。

/etc/sudoers 文件中,可以为用户或用户组配置sudo权限。例如,允许用户 john 不输入密码执行所有命令:

john ALL=(ALL) NOPASSWD: ALL

4. 身份验证与授权管理工具

除了PAM、sudo和ACL,Linux还提供了一些高级身份验证和授权管理工具:

4.1 LDAP认证

LDAP(轻量级目录访问协议)是一种集中式认证系统,可以统一管理多个Linux服务器上的用户账户信息。通过将Linux系统与LDAP服务器集成,用户只需一个账户即可登录不同的服务器。

LDAP认证通常结合PAM使用。配置LDAP认证可以通过安装libpam-ldapsssd包,并修改PAM配置文件。

4.2 Kerberos认证

Kerberos是一种网络认证协议,使用票证(ticket)来验证用户身份。Kerberos认证在多服务器环境中非常有效,特别是对于要求高安全性和单点登录(SSO)的系统。配置Kerberos需要在服务器和客户端上安装相关软件包,并配置 /etc/krb5.conf 文件。

4.3 NIS(网络信息服务)

NIS是一种早期的集中式用户管理工具,能够将用户和组信息集中存储在一个服务器上,供多个客户端使用。虽然NIS较为简单,但相比LDAP和Kerberos,安全性较弱,逐渐被更先进的认证系统取代。

5. 总结

Linux系统中的用户认证与授权机制提供了灵活且强大的控制手段,确保只有经过认证的用户才能访问系统,并通过精细的权限控制管理不同用户的操作权限。通过结合使用PAM、ACL、sudo、LDAP等工具,系统管理员可以实现对用户操作的有效管控,从而提高系统的安全性和可管理性。

相关文章:

【Linux 从基础到进阶】Linux中的用户认证与授权

Linux中的用户认证与授权 1. 引言 在Linux系统中,**用户认证(authentication)和授权(authorization)**是两个核心的安全机制,用来控制系统资源的访问和管理用户操作权限。用户认证确保登录的用户是合法的…...

用户界面设计:视觉美学与交互逻辑的融合

1、什么是用户界面 用户界面(UI)是人与机器之间沟通的桥梁,同时也是用户体验(UX)的重要组成部分。用户界面设计包括两个核心要素:视觉设计(即产品的外观和感觉)和交互设计&#xff…...

ZK集群搭建:详细步骤与注意事项

在大数据和分布式系统日益重要的今天,ZooKeeper(简称ZK)作为一种分布式协调服务,扮演着举足轻重的角色。它主要用于管理大型分布式系统中的配置信息、命名、同步等。下面将详细介绍如何搭建一个ZooKeeper集群,帮助大家…...

如何将csdn文章导出为pdf

前言 在csdn上浏览文章的时候我发现有的文章支持pdf导出,但是有的文章不支持pdf导出,为了解决能将csdn上所有文章都能以pdf格式导出遂作此文。 正文 先上代码: (function(){use strict;var contentBox $("div.article_content")…...

【艾思科蓝】Imagen:重塑图像生成领域的革命性突破

【连续七届已快稳ei检索】第八届电子信息技术与计算机工程国际学术会议(EITCE 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看 学术会议-学术交流征稿-学术会议在线-艾思科蓝 目录 引言 一、Imagen模型的技术原理 1. 模型概述 2. 工作流程 …...

java类和对象(下): 封装 static成员 内部类

前言: 在前期的知识点中,我们学习了java中this函数的使用和相关的概念。这期我们将介绍封装的概念,以及常见内部类的使用,让我们开车吧!!!! 本期目录: 6. 封装 7. st…...

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况,大专生,21年通过校招进入武汉某软件公司,干了差不多3个星期的功能测试,那年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…...

VIVO算法题——数位之积

记录算法究极无敌菜菜菜鸟的垃圾思维 题目: 现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 … …)之乘积等于n,若不存在则输出 -1。 菜鸟…...

OPC Router快速打通设备层与influxDB数据通讯

随着时代演化,数据量呈几何倍数增加的情况下出现了时序数据库。时序数据库是基于时间进行存储的数据库,每一条数据中都有一个时间戳,这种数据库特别适合存储那些随着时间变化的数据,通过一些工具处理后,能够分析出数据…...

鸿蒙开发 四十四 ArkTs BuilderParam传递UI(二)

子组件多个BuilderParam,必须通过参数的方式传入,如果界面中有多个界面需要传递,可以定义多个尾随闭包,如图: 在自定义组件中调用: 在使用时候调用是作为参数传递给自定义的组件,参数是界面&…...

同期数分析-留存率

目录 同期数分析 加载数据 单月实现 统计每个月的订单量 求2月份的订单量和用户数量 求2月之前的历史订单量 筛选出2023年2月的新增的用户数 计算2023年2月在后面的留存情况 完整的2023年2月份同期群结果 遍历合并和分析 引入月份列表 遍历 调整成留存率的形式 回…...

Java前后端交互:构建现代Web应用

在现代Web应用开发中,前后端分离是一种常见的架构模式。后端通常负责数据处理和业务逻辑,而前端则负责用户界面和用户体验。Java作为后端开发的强大语言,提供了多种方式与前端进行交互。本文将探讨Java后端与前端交互的几种主要方式&#xff…...

vue3中用axios请求怎么添加cookie

在 Vue 3 中使用 axios 发起请求时,可以通过配置 axios 的请求选项来携带 Cookies。具体来说,确保跨域请求时,设置 withCredentials: true,以便发送和接收 Cookies。 1. Axios 配置携带 Cookie 首先确保你在 axios 请求中设置了…...

informer学习笔记

一、informer讲解 infomer 要解决的三大问题: Attention计算的更快Decoder要一次性输出所有预测堆叠encoder也要更快 1. Attention 在长序列中,并非每一个位置的Attention都重要,对于每一个Q来说,只有一小部分的K与其有较强的…...

Elasticsearch介绍和使用

一、Elasticsearch 强大的搜索和分析能力: Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎。它能够快速地对大量数据进行全文搜索、结构化搜索和复杂的数据分析操作。对于大型数据集,它可以高效地处理各种查询需求,包括关键词搜索…...

【Flutter】基础入门:代码基本结构

通过这个简单的 Flutter 示例程序,我们可以快速了解 Flutter 的代码结构,理解每个部分的作用。 import package:flutter/material.dart; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}…...

如何进行数据库缩容 | OceanBase应用实践

作者:关炳文,爱可生 DBA 团队成员,负责数据库相关技术支持。 本文详细介绍了OceanBase V3.2版的集群中,面对数据文件缩容的场景的一套缩容方案,作为大家的参考。 缩容场景 某银行运行的一套采用1-1-1架构的OceanBase…...

机器学习和深度学习的差别

定义和基本原理 机器学习: 定义:机器学习是一种让计算机自动从数据中学习规律和模式的方法,无需明确编程。它通过构建数学模型,利用已知数据进行训练,然后对新的数据进行预测或决策。基本原理:机器学习算…...

RAG拉满-上下文embedding与大模型cache

无论怎么选择RAG的切分方案,仍然切分不准确。 最近,anthropics给出了补充上下文的embedding的方案,RAG有了新的进展和突破。 从最基础的向量查询,到上下文embedding,再到rerank的测试准确度都有了明显的改善&#xf…...

前端学习---(2)CSS基础

CSS 用来干什么? CSS 是用来指定文档如何展示给用户的一门语言——如网页的样式、布局、等等。 css语法: 选择器{ 属性名: 属性值; 属性名: 属性值; } h1 {color: red;font-size: 5em; }h1: 选择器 color: 属性 冒号之前是属性,冒号之后是值。 font-size…...

Pandas常用计算函数

目录 排序函数 nlargest函数 nsmallest函数 sort_values函数 df.sort_values Series.sort_values 聚合函数 corr函数-相关性 min函数-最小值 max函数-最大值 mean函数-平均值 sum函数-求和 count函数-统计非空数据 std函数-标准偏差 quantile函数-分位数 排序函…...

C++ | Leetcode C++题解之第473题火柴拼正方形

题目&#xff1a; 题解&#xff1a; class Solution { public:bool makesquare(vector<int>& matchsticks) {int totalLen accumulate(matchsticks.begin(), matchsticks.end(), 0);if (totalLen % 4 ! 0) {return false;}int len totalLen / 4, n matchsticks.s…...

深度解析RLS(Recursive Least Squares)算法

目录 一、引言二、RLS算法的基本思想三、RLS算法的数学推导四、RLS算法的特点五、RLS算法的应用场景六、RLS算法的局限性七、总结 一、引言 在自适应滤波领域&#xff0c;LMS&#xff08;Least Mean Squares&#xff09;算法因其计算简单、实现方便而广受欢迎。然而&#xff0…...

Centos 7.9NFS搭建

原创作者&#xff1a;运维工程师 谢晋 Centos 7.9NFS搭建 NFS服务端安装客户机访问共享配置 NFS服务端安装 SSH连接系统登录到服务端安装nfs服务 # yum -y install nfs-utils2. 安装完成后&#xff0c;查看需要共享的目录&#xff0c;这边共享的是/home目录&#xff0c;如…...

Python库numpy之三

Python库numpy之三 # NumPy数组创建函数二维数组创建函数numpy.eye应用例子numpy.diag应用例子numpy.vander应用例子 # NumPy数组创建函数 二维数组创建函数 numpy.eye 词法&#xff1a;numpy.eye(N, MNone, k0, dtype<class ‘float’>, order‘C’, *, deviceNone, …...

postgresql 安装

一、下载 PostgreSQL: File Browser 下载地址 PostgreSQL: File Browser 上传到服务器,并解压 二、安装依赖 yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel 创建postgresql 和目录 useradd …...

基于机器学习的天气数据分析与预测系统

天气预报是日常生活中非常重要的信息来源&#xff0c;能够帮助人们合理安排日程、预防自然灾害。随着数据科学和机器学习的快速发展&#xff0c;传统的天气预报方法逐渐向基于数据驱动的机器学习方法转变。本文将探讨如何构建一个基于机器学习的天气数据分析与预测系统&#xf…...

Java项目-基于Springboot的在线外卖系统项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…...

ANSYS Workbench纤维混凝土3D

在ANSYS Workbench建立三维纤维混凝土模型可采用CAD随机几何3D插件建模后导入&#xff0c;模型包含球体粗骨料、圆柱体长纤维、水泥砂浆基体等不同组分。 在CAD随机几何3D插件内设置模型参数后运行&#xff0c;即可在AutoCAD内建立三维纤维混凝土模型&#xff0c;插件支持任意…...

【Vue】Vue3.0(十)toRefs()和toRef()的区别及使用示例

上篇文章&#xff1a;Vue】Vue&#xff08;九&#xff09;OptionsAPI与CompositionAPI的区别 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年10月15日11点13分 文章目录 toRefs()和toRe…...