如何使用 passwd 和 adduser 在 Linux VPS 上管理密码

2023-11-18

介绍

密码和身份验证是每个用户在 Linux 环境中工作时必须处理的概念。这些主题涵盖许多不同的配置文件和工具。

在本指南中,我们将探索一些基本文件,例如“/etc/passwd”和“/etc/shadow”,以及用于配置身份验证的工具,例如名称恰当的“passwd”命令和“adduser”。

我们将使用 Ubuntu 12.04 VPS 来讨论这些主题,但任何现代 Linux 发行版都应该以类似的方式运行。

什么是“/etc/passwd”文件?

我们要查看的第一个文件称为“/etc/密码" 文件,实际上并不存储密码。

曾经,该文件存储了系统上每个用户的哈希密码。但是,出于安全原因,此责任已转移到单独的文件中。

让我们看看什么is在“/etc/passwd”文件中:


less /etc/passwd  

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .  

首先要注意的是,非特权用户可以访问该文件。

系统上的每个人都具有该文件的读取权限。这就是密码信息被移出该文件的原因。

我们来看看文件的格式。

如何读取“/etc/passwd”文件

文件中的每一行包含系统上单个用户的登录信息。其中一些用户可能是为守护程序和后台服务使用而创建的。

看一下一行,看看它包含哪些信息:


root:x:0:0:root:/root:/bin/bash  

信息字段由冒号 (:) 字符分隔。典型的 Linux“/etc/passwd”文件中每行有七个字段:

  1. root: 帐户用户名。
  2. <li><strong>x</strong>: Placeholder for password information.  The password is obtained from the "/etc/shadow" file.</li>
    
    <li><strong>0</strong>: User ID.  Each user has a unique ID that identifies them on the system.  The root user is always referenced by user ID 0.</li>
    
    <li><strong>0</strong>: Group ID.  Each group has a unique group ID.  Each user has a "primary" group that is used as the group by default.  Again, the root group's ID is always 0.</li>
    
    <li><strong>root</strong>: Comment field.  This field can be used to describe the user or user's function.  This can be anything from contact information for the user, to descriptions of the service the account was made for.</li>
    
    <li><strong>/root</strong>: Home directory.  For regular users, this would usually be "/home/<span class="highlight">username</span>".  For root, this is "/root".</li>
    
    <li><strong>/bin/bash</strong>: User shell. This field contains the shell that will be spawned or the command that will be run when the user logs in.</li>	
    

当您使用“adduser" and "useradd”,或者当您安装更多服务时,该文件将会增大。新的用户名信息将添加到该文件的底部。

在大多数情况下,您不必手动编辑此文件。有一些工具可以操作该文件并确保维护正确的语法。

什么是“/etc/shadow”文件?

实际的密码数据存储在名为“/etc/影子".

这实际上并不包含纯文本的密码。相反,它使用密钥派生函数来创建哈希。这就是它存储在文件中的内容。

密钥派生函数基本上是一种算法,当给定相同的输入时,该算法始终会创建特定的哈希值。对身份验证期间给出的密码运行相同的算法,并将该值与该文件中的值进行比较。

请注意,该文件与“/etc/passwd”文件不同,非特权用户无法读取。

root 用户具有读写权限,“shadow”组(包含身份验证所需的用户)具有读取权限。

如何读取“/etc/shadow”文件

输入以下命令打开“/etc/shadow”文件:


sudo less /etc/shadow  

root:$6$mJD3Rsj4$xUa7jru6EEGTXnhwTfTT26/j8M5XiQvUl6UH32cfAWT/6W9iSI5IuIw5OOw4khwrsOHPyMwfCLyayfYiVdhAq0:15952:0:99999:7:::
daemon:*:15455:0:99999:7:::
bin:*:15455:0:99999:7:::
sys:*:15455:0:99999:7:::
sync:*:15455:0:99999:7:::
games:*:15455:0:99999:7:::
man:*:15455:0:99999:7:::
. . .  

与“/etc/passwd”文件一样,每一行定义用户信息,每个字段由冒号 (:) 字符分隔。

Note:上述某些行第二个字段中的星号 (*) 值表示该帐户无法登录。这主要用于服务,是预期行为。

我们再看一下单行:


daemon:*:15455:0:99999:7:::  

这些是“/etc/shadow”文件中定义的字段:

  1. daemon: 帐户用户名。
  2. <li><strong>*</strong>: Salt and hashed password.  You can see what this looks like with the root entry above.
    
    	As noted above, the asterisk signifies that this account cannot be used to log in.</li>
    
    <li><strong>15455</strong>: Last password change.  This value is measured in days from the Unix "epoch", which is January 1, 1970.</li>
    
    <li><strong>0</strong>: Days until password change permitted.  0 in this field means there are no restrictions.</li>
    
    <li><strong>99999</strong>: Days until password change required.  99999 means that there is no limit to how long the current password is valid.</li>
    
    <li><strong>7</strong>: Days of warning prior to expiration.  If there is a password change requirement, this will warn the user to change their password this many days in advance.</li>
    
    <li><strong>[blank]</strong>The last three fields are used to denote days before the account is made inactive, days since the Epoch when the account expires.  The last field is unused.</li>	
    

如何更改密码?

用户的密码可以通过发出“passwd”命令来修改。

默认情况下,此命令更改当前用户的密码,不需要特殊权限。


passwd  

如果您想更改其他用户的密码,您将需要管理权限。可以使用以下语法:


sudo passwd username  

系统将提示您输入“sudo”命令的密码,然后系统将提示您输入并确认您要使用的新密码。

如果您比较“/etc/shadow”文件中的哈希值,您会发现在发出 passwd 命令后它发生了变化。

如何创建新用户?

可以使用一些不同的命令创建用户。

最简单的方法可能是“adduser“命令,我们将在这里介绍该命令。在 Ubuntu 系统上,该命令链接到一个处理适当用户创建的 perl 脚本。

你可以这样称呼它:


adduser demo  

Adding user `demo' ...
Adding new group `demo' (1000) ...
Adding new user `demo' (1000) with group `demo' ...
Creating home directory `/home/demo' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for demo
Enter the new value, or press ENTER for the default
	Full Name []: test
	Room Number []: room
	Work Phone []: work phone
	Home Phone []: home phone
	Other []: other
Is the information correct? [Y/n]  

您将被问到一系列问题,这些问题将有助于填写“/etc/passwd”文件和“/etc/shadow”文件中的信息。

我们可以通过输入以下内容来查看它添加到“/etc/passwd”文件中的条目:


tail -1 /etc/passwd  

demo:x:1000:1000:test,room,work phoneme phone,other:/home/demo:/bin/bash  

您可以看到,这极大地利用了评论字段。其他字段按预期填写。

我们可以运行类似的命令来查看对“/etc/shadow”文件所做的修改:


sudo tail -1 /etc/shadow  

demo:$6$XvPCmWr4$HXWmaGSeU5SrKwK2ouAjc68SxbJgUQkQ.Fco9eTOex8232S7weBfr/CMHQkullQRLyJtCAD6rw5TVOXk39NAo/:15952:0:99999:7:::  

结论

使用这些简单的工具,您可以更改系统上的登录信息。

进行任何更改后测试您的登录能力非常重要。保持身份验证文件的权限相同以维护功能和安全性也很重要。

贾斯汀·埃林伍德
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 passwd 和 adduser 在 Linux VPS 上管理密码 的相关文章

  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • 上传的白名单或黑名单文件扩展名?

    我正在制作一个新闻通讯编辑器 它将允许文件上传 新闻通讯的发件人可以将文件上传到将在电子邮件中链接到的服务器 该站点的设置使得只有 do URI 实际由 servlet 执行 处理 因此不会有太大的安全风险 但有人告诉我将 jsp php
  • Rfc2898DeriveBytes 与密码的 Sha2 哈希生成

    我最近知道使用 SHA256 为加盐密码生成密码哈希 在阅读了一些有关加盐密码和安全性的内容后 我看到rfc2898derivebytes and passwordderivebytes NET 中的类 使用有什么好处吗rfc2898der
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • 解码 OAEP 填充时出错

    我的问题已经解决了一半 请帮助 我已使用数字签名的公钥成功加密了文本 但在解密时出现错误 解码 OAEP 填充时出错 我的代码如下 region Test Encryption public void a using var rsa new
  • 支持 API 28(Android Pie) 上的 Android StrongBox 的 Android 智能手机列表

    我需要 Android 9 中支持安全元件和 StrongBox 的 Android 手机列表 在哪里或如何找到该列表 我在 Samsung Galaxy S9 和 AVD Google Pixel XL API 28 上尝试了下面的代码
  • 如何在 Web 应用程序中使用 Javascript 安全地访问 Windows Azure 移动服务?

    我需要一本 web javascript 安全入门书 根据如何使用 Windows Azure 移动服务的 HTML JavaScript 客户端 http www windowsazure com en us develop mobile
  • 如何为移动应用程序创建无密码登录

    我有兴趣在移动应用程序和 API 之间构建某种无密码登录 假设我可以控制两者 动机是必须登录对用户来说非常烦人并且存在安全风险 例如 用户将重复使用现有密码 我希望用户能够立即开始使用该应用程序 我想知道是否有一些可行的技术 例如 在移动设
  • 客户端登录 - 如何在客户端安全地存储凭据?

    许多 API 都提供通过用户 密码组合远程访问其数据的功能 我想知道存储这些值的最佳方式是什么 高度安全的方式 即使 100 是不可能的 以便直接连接它们而无需每次都询问这些值 我推荐以下三种方法之一 使用身份验证令牌完全避免存储密码 在此
  • 在数据库中存储密码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 什么是 API 密钥? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如今 我几乎在每个跨服务应用程序中都看到这个词 API 密钥到底是什么以及它的用途是什么 另外 公共 API 密钥和私有 API 密钥
  • 存储外部站点(不使用 OAuth)的用户凭据的智能方法是什么?

    我意识到 一般来说 您不应该直接存储用户凭据 即以纯文本形式 相反 最好存储它们的某种加密形式 但是 假设我创建了一个与其他第三方网站交互的网站 假设这个第 3 方站点提供了一个 API 需要用户的凭据 使用该站点 进行身份验证 如果我的目
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • 日志锻造强化修复

    我正在使用 Fortify SCA 来查找我的应用程序中的安全问题 作为大学作业 我遇到了一些无法解决的 日志锻造 问题 基本上 我记录一些来自 Web 界面的用户输入的值 logger warn current id not valid
  • Windows DPAPI - 如何处理熵?

    我正在使用 Windows DPAPI 来加密一些敏感数据 密码存储在注册表中 这一切都运行良好 但我想知道是否有人可以澄清我对 NET 中 可选 提供给 ProtectedData Protect 的 熵 字节的理解 熵 字节数组似乎类似
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • FormsAuthentication:安全吗?

    Using 表单验证构建成asp net创建一个为经过身份验证的用户创建 cookie 的登录系统非常快速且简单 FormsAuthentication SetAuthCookie uniqueUsername false 与中的一些代码配
  • SSLHandshakeException:证书中的主机名不匹配

    我正在编写一个系统 必须向具有自签名证书的服务器 一个名为 ARX 的第三方程序 当前在开发过程中在本地主机上运行 进行多部分发布 我试图找到它的证书 但只能找到三个不同的jks文件 服务器 jks 服务器信任 jks and 服务器ca
  • PHP 的password_verify() 是否可以抵御极长的密码(DoS 攻击)?

    一般攻击场景 2013 年 Django 存在一个普遍漏洞 攻击者可以通过非常大的密码创建极其密集的 CPU 计算 请参阅此处的安全通知 https www djangoproject com weblog 2013 sep 15 secu

随机推荐

  • 如何在 Ubuntu 中添加 apt 存储库

    使用 Ubuntu 软件中心或命令行实用程序 例如apt or apt get这些软件包是从一个或多个 apt 软件存储库下载的 APT 存储库是网络服务器或本地目录 其中包含 APT 工具可读的 deb 包和元数据文件 虽然默认 Ubun
  • 如何在 Ubuntu 18.04 上安装 Visual Studio Code

    视觉工作室代码是微软开发的开源跨平台代码编辑器 它有一个内置的调试支持 嵌入式Git控制 语法突出显示 代码完成 集成终端 代码重构和片段 在 Ubuntu 计算机上安装 Visual Studio Code 最简单且推荐的方法是启用 VS
  • 如何在 CentOS 7 上安装 Atom 文本编辑器

    Atom是由GitHub开发的开源跨平台代码编辑器 它有一个内置的包管理器 嵌入Git控制 智能自动完成 语法突出显示和多个窗格 从本质上讲 Atom 是一个基于 Electron 构建的桌面应用程序 使用 HTML JavaScript
  • 如何在 Ubuntu 20.04 上安装 Git

    Git 是世界上最流行的分布式版本控制系统 被许多开源和商业项目使用 它允许您与其他开发人员协作进行项目 跟踪代码更改 恢复到之前的阶段 创建分支 和更多 Git 最初是由莱纳斯 托瓦尔兹Linux内核的创建者 本指南介绍如何在 Ubunt
  • 如何在 Ubuntu 18.04 上安装 VirtualBox 来宾添加

    虚拟盒子是一款开源 跨平台虚拟化软件 允许您同时运行多个来宾操作系统 虚拟机 VirtualBox 提供了一组可以安装在来宾操作系统中的驱动程序和应用程序 VirtualBox Guest Additions 来宾添加为来宾计算机提供了多种
  • Linux 类型命令

    The type命令用于显示有关命令类型的信息 它将向您展示在命令行上键入给定命令时将如何解释 在这篇文章中 我们将解释如何使用Linuxtype命令 如何使用 type 命令 type是 Bash 和其他 shell 如 Zsh 和 Ks
  • 如何在 CentOS 7 上使用 Apache 安装和保护 phpMyAdmin

    phpMyAdmin 是一个基于 PHP 的开源工具 用于通过基于 Web 的界面管理 MySQL 和 MariaDB 服务器 phpMyAdmin 允许您与 MySQL 数据库交互 管理用户帐户和权限 执行 SQL 语句 以各种数据格式导
  • 如何在 Ubuntu 20.04 上设置 Nginx 服务器块

    服务器块是一种 Nginx 指令 它定义特定域的设置 允许您在一台服务器上运行多个网站 对于每个网站 您可以设置网站文档根目录 包含网站文件的目录 创建单独的安全策略 使用不同的 SSL 证书等等 本文介绍如何在 Ubuntu 20 04
  • 如何在 CentOS 7 上添加和删除用户

    CentOS 以及所有其他 Linux 发行版都是一个多用户操作系统 每个用户可以对各种命令行和 GUI 应用程序拥有不同的权限级别和特定设置 了解如何添加和删除用户是每个 Linux 用户应该了解的基本技能之一 在本教程中 我们将解释如何
  • 如何在树莓派上安装和使用 Docker

    Docker 是一个容器化平台 允许您快速构建 测试和部署应用程序作为可移植 自给自足的容器 几乎可以在任何地方运行 在本教程中 我们将解释如何在 Raspberry Pi 上安装 Docker 并探索基本的 Docker 概念和命令 先决
  • 如何在 Ubuntu 18.04 上使用 Apache 安装和配置 Nextcloud

    下一云是一个开源 自托管的文件共享和协作平台 类似于 Dropbox 它捆绑了媒体播放器 日历和联系人管理 Nextcloud 可通过应用程序进行扩展 并拥有适用于所有主要平台的桌面和移动客户端 在本教程中 我们将向您展示如何在 Ubunt
  • 了解 /etc/passwd 文件

    Linux 系统上可以使用多种不同的身份验证方案 最常用和标准的方案是针对 etc passwd and etc 影子 files etc passwd是一个基于纯文本的数据库 包含系统上所有用户帐户的信息 这是owned第 644 章权限
  • 如何在 Debian 9 上使用 UFW 设置防火墙

    Debian 包含多个软件包 这些软件包提供了用于管理防火墙的工具 其中 iptables 作为基本系统的一部分安装 对于初学者来说 学习如何使用 iptables 工具正确配置和管理防火墙可能很复杂 但 UFW 简化了它 UFW Unco
  • 如何在 Ubuntu 14.04 服务器上安装 ISPConfig3

    介绍 尽管命令行是一个功能强大的工具 可以让您在许多情况下快速轻松地工作 但在某些情况下 可视化界面会很有帮助 如果您要在一台计算机上配置许多不同的服务 或者为客户端管理系统的某些部分 则可以使用诸如ISP配置可以使这个任务变得更加简单 I
  • 如何在 CentOS 7 上安装 Git

    介绍 版本控制已成为现代软件开发中不可或缺的工具 版本控制系统允许您在源代码级别跟踪您的软件 您可以跟踪更改 恢复到之前的阶段以及从基本代码分支以创建文件和目录的替代版本 最流行的版本控制系统之一是git 许多项目在 Git 存储库中维护其
  • 什么是 Kubernetes?

    介绍 Kubernetes 是一个功能强大的开源系统 最初由 Google 开发 并得到云原生计算基金会 CNCF 的支持 用于在集群环境中管理容器化应用程序 它旨在提供更好的方法来管理跨不同基础设施的相关分布式组件和服务 要了解有关 Ku
  • 使用 Debian 9 进行初始服务器设置

    介绍 当您首次创建新的 Debian 9 服务器时 您应该尽早执行一些配置步骤作为基本设置的一部分 这将提高服务器的安全性和可用性 并为您后续的操作奠定坚实的基础 第一步 以 root 身份登录 要登录您的服务器 您需要知道您的服务器的公共
  • 如何使用 DigitalOcean 云服务器创建虚荣或品牌名称服务器

    介绍 托管提供商或经销商特别感兴趣 拥有品牌或 虚荣域名服务器为客户提供了更专业的外观 它 无需要求您的客户将其域名指向另一个域名 公司的域名服务器 本教程将概述两种创建方法 自定义域名服务器 i 虚荣和 ii 品牌 Types 虚荣名称服
  • 如何在 Ubuntu 18.04 上安装 MySQL

    本教程的先前版本由以下人员编写榛子维尔多 介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LAMP Linux Apache MySQL PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来
  • 如何使用 passwd 和 adduser 在 Linux VPS 上管理密码

    介绍 密码和身份验证是每个用户在 Linux 环境中工作时必须处理的概念 这些主题涵盖许多不同的配置文件和工具 在本指南中 我们将探索一些基本文件 例如 etc passwd 和 etc shadow 以及用于配置身份验证的工具 例如名称恰