linux-安全管理-用户认证
Linux 安全管理:用户认证
一、概述
用户认证是 Linux 安全管理的核心部分,确保系统能够识别并验证合法用户,同时阻止未经授权的访问。Linux 提供了多种用户认证机制,包括用户名和密码认证、基于密钥的认证、双因素认证(2FA)等。此外,系统管理员还可以通过配置文件和策略管理用户权限,增强系统的安全性。
二、Linux 用户与组管理
在 Linux 中,用户和组是权限管理的基本单位。每个文件和进程都属于某个用户和组,并拥有特定的访问权限。系统通过 /etc/passwd
和 /etc/group
文件记录用户和组的信息。
1. 用户管理
1.1 新建用户
使用 useradd
命令可以创建新用户:
useradd username
-m
:为用户创建 home 目录。-s
:指定登录 shell。-G
:将用户添加到指定的组。
例如,创建一个名为 john
的用户,并指定其 home 目录和 shell:
useradd -m -s /bin/bash john
1.2 设置用户密码
新建用户后,需要为用户设置密码。可以使用 passwd
命令:
passwd username
例如,设置 john
用户的密码:
passwd john
1.3 删除用户
使用 userdel
命令可以删除用户:
userdel username
-r
:删除用户的 home 目录和邮件目录。
例如,删除 john
用户及其 home 目录:
userdel -r john
1.4 修改用户信息
使用 usermod
命令可以修改用户的属性,如组信息、登录 shell、home 目录等:
usermod -s /bin/zsh username
上述命令将用户的登录 shell 改为 zsh
。
2. 组管理
组是 Linux 中权限管理的重要机制。一个用户可以属于多个组,文件权限可以基于用户组进行细粒度的控制。
2.1 新建组
使用 groupadd
命令创建新组:
groupadd groupname
例如,创建一个名为 developers
的组:
groupadd developers
2.2 将用户添加到组
使用 usermod
命令可以将用户添加到某个组:
usermod -aG groupname username
-aG
:追加用户到多个组。
例如,将用户 john
添加到 developers
组:
usermod -aG developers john
2.3 删除组
使用 groupdel
命令删除组:
groupdel groupname
例如,删除 developers
组:
groupdel developers
三、用户认证机制
Linux 提供了多种用户认证机制,包括基于密码的认证、基于密钥的认证、PAM(可插入认证模块)认证等。系统管理员可以根据不同的安全需求选择合适的认证机制。
1. 基于密码的认证
最常见的认证方式是用户名和密码组合。用户在登录时输入用户名和密码,系统通过检查 /etc/shadow
文件中的加密密码来验证用户身份。
1.1 /etc/passwd
文件
/etc/passwd
文件包含了系统中所有用户的基本信息,包括用户名、用户 ID、组 ID、home 目录、shell 等。
文件示例:
root:x:0:0:root:/root:/bin/bash
john:x:1001:1001:John Doe:/home/john:/bin/bash
1.2 /etc/shadow
文件
/etc/shadow
文件存储用户密码的加密形式,以及密码过期信息等安全策略。该文件只有 root 用户可以读取。
文件示例:
root:$6$randomsalt$hashedpassword:18765:0:99999:7:::
john:$6$anothersalt$anotherhashedpassword:18765:0:99999:7:::
在该文件中,密码通过哈希算法(如 SHA-512)进行加密,增强了安全性。
2. SSH 密钥认证
SSH 密钥认证 提供了一种比传统密码更安全的认证方式,尤其适用于远程服务器登录。SSH 密钥是一对加密的密钥,分别为公钥和私钥。
2.1 生成 SSH 密钥对
使用 ssh-keygen
命令可以生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096
-t
:指定加密算法(如rsa
、dsa
、ecdsa
等)。-b
:指定密钥长度,推荐使用 4096 位。
生成的密钥对包括:
- 公钥:用于上传到服务器,存储在
~/.ssh/id_rsa.pub
。 - 私钥:保存在本地,存储在
~/.ssh/id_rsa
。
2.2 配置 SSH 密钥认证
将公钥上传到远程服务器的 ~/.ssh/authorized_keys
文件中:
cat ~/.ssh/id_rsa.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
这样,用户下次登录该服务器时,无需输入密码,只需通过私钥认证即可登录。
2.3 禁用密码登录
为了提高安全性,可以在 SSH 配置文件 /etc/ssh/sshd_config
中禁用密码登录:
PasswordAuthentication no
重启 SSH 服务使更改生效:
systemctl restart sshd
3. PAM(Pluggable Authentication Modules)
PAM 是 Linux 的可插入认证模块,它为认证过程提供了统一的框架。系统管理员可以通过 PAM 配置文件定义多种认证方式,如密码认证、双因素认证(2FA)、账户锁定等。
3.1 PAM 配置文件
PAM 配置文件位于 /etc/pam.d/
目录下,每个服务(如 SSH、登录、sudo)都有独立的配置文件。例如,SSH 服务的 PAM 配置文件是 /etc/pam.d/sshd
。
PAM 配置文件的基本格式如下:
type control module-path module-arguments
其中,type
定义了 PAM 模块的类型,常见类型包括:
auth
:认证模块,用于验证用户身份。account
:账户模块,检查用户的账户状态(如是否过期)。password
:密码模块,用于管理用户密码。session
:会话模块,用于设置或终止用户会话。
3.2 密码策略配置
可以通过 PAM 设定密码强度要求,如最小长度、复杂度等。例如,在 /etc/pam.d/common-password
文件中使用 pam_pwquality.so
模块:
password requisite pam_pwquality.so retry=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
这将要求密码至少包含一个大写字母、小写字母和数字,最小长度为 8。
4. 双因素认证(2FA)
双因素认证是一种增强型安全机制,它要求用户在输入密码后,还需提供另一种身份验证因素(如手机验证码)。在 Linux 系统中,可以通过 PAM 模块结合 Google Authenticator 实现双因素认证。
4.1 安装 Google Authenticator
首先,安装 Google Authenticator PAM 模块:
yum install google-authenticator
4.2 配置 Google Authenticator
为用户设置 Google Authenticator:
google-authenticator
根据提示生成二维码,用户可以使用 Google Authenticator 应用扫描该二维码并获取动态验证码。
4.3 配置 PAM 使用 2FA
在 /etc/pam.d/sshd
中添加以下行,启用 PAM 2FA:
auth required pam_google_authenticator.so
同时,在 /etc/ssh/sshd_config
中启用以下配置:
ChallengeResponseAuthentication yes
重启 SSH 服务后,用户在登录时将需要输入密码和动态验证码。
四、用户权限管理与审计
除了用户认证外,权限管理和审计也是安全管理的重要组成部分。通过合理配置权限和日志审计,管理员可以确保系统的访问控制和行为追踪。
1. sudo
权限管理
sudo
命令允许普通用户以管理员身份执行命令,但不需要直接使用 root 账户。sudo
的权限配置文件是 /etc/sudoers
。
编辑 `sudoers
文件时,使用
visudo` 工具:
visudo
示例:允许用户 john
以 root 权限运行所有命令:
john ALL=(ALL) ALL
2. 审计日志
Linux 系统提供了多种日志审计工具,如 auditd
、syslog
等,用于记录系统活动,帮助管理员监控潜在的安全问题。
auditd
是 Linux 的审计守护进程,记录所有关键事件。安装 auditd
:
yum install audit
启动 auditd
服务:
systemctl start auditd
systemctl enable auditd
审计规则可以通过 /etc/audit/audit.rules
文件配置。例如,监控对 /etc/passwd
文件的修改:
-w /etc/passwd -p wa -k passwd_changes
查看审计日志:
ausearch -k passwd_changes
五、总结
用户认证是 Linux 安全管理的核心,通过用户名/密码、SSH 密钥、PAM 和双因素认证等机制,管理员可以确保系统的安全访问。同时,合理的用户和权限管理,以及日志审计等措施,能够有效提升系统的安全性。
为保证 Linux 系统的安全,管理员应采取以下措施:
- 确保密码策略的强度和安全性。
- 使用 SSH 密钥认证代替密码认证。
- 启用双因素认证以增强用户身份验证。
- 定期审计系统日志,及时发现潜在的安全风险。
相关文章:

linux-安全管理-用户认证
Linux 安全管理:用户认证 一、概述 用户认证是 Linux 安全管理的核心部分,确保系统能够识别并验证合法用户,同时阻止未经授权的访问。Linux 提供了多种用户认证机制,包括用户名和密码认证、基于密钥的认证、双因素认证ÿ…...

webpack5 构建优化方案看这篇就够了!【Node.js进阶】
无论在面试还是内部晋升,webpack 构建优化方案 一直都是非常重要的部分。 webpack5构建加持 一、项目完成目标二、搭建项目1. 安装koa、koa/router (如果已经配置可路过)2. 创建入口文件3. 安装构建依赖4. 在项目根目录添加 .babelrc 文件5. …...

esp32-C2 对接火山引擎实现智能语音(一)
目录 一、火山引擎大模型简介 1)火山引擎网址: 2)首先需要先注册火山引擎账号 3)语音识别——即语音转为文本 一句话识别 流式语音识别 录音文件识别标准版 录音文件识别极速版 4)语音合成——文本转音频 一、火山引擎大模型简介 火山引擎的智能语音技术,基于业界先…...

【MySQL-初级】mysql基础操作(账户、数据库、表的增删查改)
概述 数据备份与恢复 数据库备份:在cmd下 root用户:sudo mysqldump -u root -p Test > Test.sql普通用户:mysqldump -u zzz -p db_name > db_name.sql 数据库恢复 先创建一个空的数据库在cmd下:sudo mysql -u root -p d…...

centos bash脚本一键运行安装go环境
复制到install_go.sh直接bash install_go.sh运行就完了 echo ----------安装go环境 wget https://go.dev/dl/go1.21.13.linux-amd64.tar.gz tar -zxvf go1.21.13.linux-amd64.tar.gzmkdir /srv cp -r go /srv/echo "PATH$PATH:/srv/go/bin ">> ~/.bashrc echo…...

vue2制作高复用页面
记录一下页面搭建记录,利用vue2组件化开发的思想。这个页面适合于大部分信息管理系统~。模板固定,每次使用,直接修改表单表格参数,api接口等。 以上图页面为例,一个基础数据信息页面可以分为,分类ÿ…...

Feed流系统重构:架构篇
重构对我而言,最大的乐趣在于解决问题。我曾参与一个C#彩票算奖系统的重构,那时系统常因超时引发用户投诉。接手任务时,我既激动又紧张,连续两天几乎废寝忘食地编码。结果令人振奋,算奖时间从一小时大幅缩短至十分钟。…...

Android 后台服务之Persistent 属性
在 Android 开发中,有时我们需要后台服务持续运行,以保持应用的某些功能。例如,音乐播放器需要在后台播放音乐,或者健康应用需要持续跟踪用户的运动数据。后台服务是 Android 中的一种组件,它不与用户界面交互,能够在后台执行长时间运行的任务。由于 Android 系统的资源管…...

STM32+ESP01连接到机智云
机智云,全球领先的智能硬件软件自助开发及物联网(iot)云服务平台。机智云平台为开发者提供了自助式智能硬件开发工具与开放的云端服务。通过傻瓜化的自助工具、完善的SDK与API服务能力最大限度降低了物联网硬件开发的技术门槛,降低开发者的研发成本,提升…...

电脑实时监控软件有哪些?七个电脑屏幕监控软件任你选择
电脑实时监控软件种类繁多,每款软件都有其独特的功能和适用场景。 以下是七个备受推荐的电脑屏幕监控软件,供您选择: 1.安企神: 功能:它是一款国内领先的企业级电脑监控解决方案, 提供实时屏幕监控、 文…...

信奥学习规划(CSP-J/S)
CSP-J组学习路线规划 CSP-S组学习规划...

【Linux取经之路】编译器gcc/g++的使用 调试器gdb的使用
目录 背景知识 编译器gcc/g的安装 编译器gcc/g的使用 调试器gdb的使用 cgdb 条件断点 背景知识 子曰:“温故而知新”。在谈gcc/g的使用之前,我们先来复习编译的4个阶段,也算是为下面的内容做一些铺垫,请看思维导图。 编译…...

自动化流程机器人(RPA)
自动化流程机器人(RPA)正逐渐成为企业提高效率和降低成本的强有力工具。 一、RPA的概念 自动化流程机器人(Robotic Process Automation,简称RPA)是一种利用软件机器人(Robot)模拟和执行复杂任务…...

Unity persistentDataPath使用案例
Unity persistentDataPath使用案例 一、Application.persistentDataPath 1、概念 persistentDataPath:此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件;是一个可读写的目录;此文件夹在Edi…...

Android 测试手册
1. 介绍 Android 测试是确保应用程序质量的重要步骤。它包括不同类型的测试,用于验证应用程序的功能、性能、安全性和用户体验。这个手册将指导你了解和实施 Android 测试的主要方法和工具。 2. 测试类型 2.1 单元测试 目的:验证单个组件(…...

各大平台统遭入侵??区块链市场遭攻击损失近3亿!
今年,全球发生多起骇人听闻的勒索入侵软件攻击事件,黑客组织利用各种手段和技术,不断试图突破网络安全防线,窃取敏感信息、破坏系统运行,甚至进行勒索和敲诈,使得网络安全问题日益凸显其重要性和紧迫性。 S…...

Java泛型(“代码模板”,一套代码套用各种类型)
1.什么是泛型 a.定义 i.如果不用泛型定义,在使用ArrayList时需要为每个class编写特定类型代码。 ii.泛型就是定义一种模板,既实现了编写一次,万能匹配,又通过编译器保证了类型安全。 iii.编写模板代码来适应任意…...

速响低代码平台:升级营销管理系统,开启高效无忧新体验!
当前日新月异的商业环境,企业面临着前所未有的挑战与机遇。随着市场竞争的日益加剧和企业业务的不断拓展,传统的营销方式和管理手段逐渐显露出其局限性,难以适应快速变化的市场需求。 数据收集难:传统的营销管理缺乏对客户数据的收…...

Gitlab升级14.0.12-->14.3.6遇到的gitlab-ctl reconfigure错误
问题描述 在按照官方文档升级路线11.0.2>17.2.2的过程中,升级14.0.12–》14.3.6时遇到一个错误: Running handlers: There was an error running gitlab-ctl reconfigure:rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had…...

JDBC导图
思维歹徒 一、使用步骤 二、SQL注入 三、数据库查询(查询) 四、数据库写入(增删改) 五、Date日期对象处理 六、连接池使用 创建连接是从连接池拿,释放连接是放回连接池 七、事务和批次插入 八、Apache Commons DBUtil…...

飞思实验室与中飞院联合开发教学课程,校企联袂共绘教育蓝图
近日,飞思实验室与中国民用航空飞行学院(以下简称“中飞院”) 航空电子电气学院合作,共同开发《无人智能视觉导航控制技术》、《多旋翼无人飞行器集群系统》实验课程。这一举措旨在深化校企融合,学校通过引入企业带来的…...

Telephony Call
1、Telephony 架构 Telephony整体架构和Android架构一样的,包括APP层,框架层,HAL层,内核层。 其中HAL层不同平台实现方式不同,其中MTK SPRD 平台使用AT通道的方式实现,高通使用QMI方式实现。 2、通话业务介绍 APP包括Dialer.apk、TeleService.apk、Tele…...

Python--TCP/UDP通信
文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.客户端与服务端通信原理 1. 服务器端 服务器端的主要任务是监听来自客户端的连接请求,并与之建立连接,然后接收和发送数据。 创建套接字:首先࿰…...

【已解决】请教 “Sa-Token 集成 xxl-job,报错:非 web 上下文无法获取 HttpServletRequest” 如何解决
1. xxl-job 报错日志 2024-09-11 17:19:04 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1726046344528] <br>----------- xxl-job job execute start -----------<br>----------- Param: 2024-09-11 17:19:04 [com.xxl.job.core.thread…...

Redis——常用数据类型string
目录 常用数据结构(类型)Redis单线程模型Reids为啥效率这么高?速度这么快?(参照于其他数据库) stringsetgetMSET 和 MGETSETNX,SETEX,PSETEXincr,incrby,decr…...

架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间
本文首发在这里 重中之重就是想实现无锁!无锁!无锁! 源码 servergolang 预计还会实现gate_server,接受并保持websocket长连接,按需双向流到game_server进行消息转发 未来上述服务均会以容器的形式由k8s自动化部署、…...

个人随想-gpt-o1大模型中推理链的一个落地实现
首先祝大家中秋节快乐。 最近openai又推出了新的模型openai o1还有它的mini版。官网的介绍,就是它的推理能力很强,比gpt-4o有很大的提升。 最近也跟同行在聊这个o1,看看落地方面有哪些可行性。在我们自己的实验上,把o1用…...

python解析ip范围,判断ip是否在ip范围内
目录 1. 背景 2. 代码使用示例 2.1 分割ip,横杠 (-) 的ip范围 2.2 判断ip在掩码(/)的范围内 2.3 判断ip在横杠(-)的范围内 2.3.1 格式:192.168.1.1-192.168.1.10 2.3.2 格式&…...

Springboot错误日志切面,找到post请求体被消费后的数据
问题记录:测试环境接口报错,日志里没有请求参数等信息,于是写了一个切面,但切面中获取不到 request的请求体,因为 post 请求体只能被消费一次,于是找解决办法 解决方法 既然 request 被消费了导致对应的请…...

【二十】【QT开发应用】listwidget右键菜单和删除item
创建项目,添加资源文件 在项目文件夹中创建resources资源文件夹。 在vs中打开qrc文件,选择添加资源文件。 选择我们resources资源文件中的所有文件作为资源文件。 最后不要忘记点击保存。 向ListWidget控件添加item 右键菜单 在.h文件中添加QMenu头…...