手动更新NIS服务的用户密码

本文介绍了Linux系统中密码的存储格式,包括NIS服务器基于Solaris10的密码存储方式及Ubuntu14.04的shadow文件格式。文章还详细解释了加密后的密码格式,并提供了通过openssl工具生成密码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 密码存放格式

公司NIS服务器基于Sun OS 5.10,即Solaris 10,没有开放yppasswd服务,由于某些原因只能手动在NIS文件里面手动修改密码,检查yp的文件后发现密码存放在passwd.adjunct文件中。

1.1 密码存放实例

以下是用户ygu的记录:

ygu:$1$T7q3OPy9$zfSTOGqcM.s0.fE1dIOoO/:::::

Ubuntu 14.04上,其shadow文件的格式是这样的:

root@ubuntu:~# cat /etc/shadow | grep root
root:$6$2vZ14Nil$p96FaJofTH.X5YfWqExlEAyLcKGN3xiBnYnrvtk1eoZ44IFbTLRBBHTCMxgQYNp2Z/52E9yNzdtd7Yw9Q47Hh0:17225:0:99999:7:::

1.2 密码存放格式

1.2.1 shadow记录格式

NIS的密码格式和Ubuntu的格式是一样的,以Linux的/etc/shadow文件为例,这个文件的每行是一个单独的记录,每个记录由9个字段组成,使用分号“:”进行分隔,上面的root密码的每个字段意义如下:

<code>root</code>密码格式

  1. login name

    登录名,这里为:root

  2. encrypted password

    密码密文,如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合{./0-9A-Za-z}中的字符,则对应的用户不能登录。

    这里为$6$2vZ14Nil$p96FaJofTH.X5YfW......47Hh0

    加密后的密码也有固定格式,后面会描述。

  3. date of last password change

    上次密码修改日期,通常是从1970年1月1日起的天数,这里为17225

  4. minimum password age

    密码最短保留天数,用户两次更改密码的最小时间间隔,为空或0表示没有限制,这里为0

  5. maximum password age

    密码最长保留天数,用户必须在这个时间间隔内修改密码,到期后原来密码仍然有效,只是会被提示修改密码,为空表示没有限制,这里为99999

  6. password warning period

    密码到期前的提示天数, 为0表示密码到期前不提示,这里为7

  7. password inactivity period

    密码过期后的宽限天数,为空表示不执行宽限功能,这里为空。

  8. account expiration date

    账号过期时间,通常是从1970年1月1日起的天数,账号过期不同于密码过期,账号过期意味着账号不能再登录;密码过期意味着用户不能用当前密码登录,通过其它方式修改密码后仍然可以登录,为空表示账号永不过期,这里为空。

  9. reserved field, this field is reserved for future use

    保留字段,供将来使用,这里为空。

1.2.2 密文字段格式

对于第2个字段(encrypted password),并非全部都是密文,而是由3个子字段构成,即:

$id$salt$encrypted

图示如下:

下面分别介绍各个字段:

  1. id

    id表示密文加密的方式,有多种:1表示采用MD5,5表示采用SHA-256,6表示采用SHA-512,这里为6。

  2. salt

    密码生成的随机参数,通过将saltpasswd合并到一起进行计算得到HASH密文,防止攻击,这里为2vZ14Nil

  3. encrypted

    通过处理后得到的密文,这里为‘p96FaJofTH.X5YfWqExlEAyLcKGN3xiBnYnrvtk1eoZ44IFbTLRBBHTCMxgQYNp2Z/52E9yNzdtd7Yw9Q47Hh0’。

详细描述可以参考Ubuntu Manuals,现将其NOTES一节摘录如下:

NOTES
   Glibc notes
       The glibc2 version of  this  function  supports  additional  encryption
       algorithms.

       If  salt  is  a  character  string  starting with the characters "$id$"
       followed by a string terminated by "$":

              $id$salt$encrypted

       then instead of using the DES machine,  id  identifies  the  encryption
       method  used  and  this  then  determines  how the rest of the password
       string is interpreted.  The following values of id are supported:

              ID  | Method
              ─────────────────────────────────────────────────────────
              1   | MD5
              2a  | Blowfish (not in mainline glibc; added in some
                  | Linux distributions)
              5   | SHA-256 (since glibc 2.7)
              6   | SHA-512 (since glibc 2.7)

       So   $5$salt$encrypted   is   an   SHA-256   encoded    password    and
       $6$salt$encrypted is an SHA-512 encoded one.

       "salt" stands for the up to 16 characters following "$id$" in the salt.
       The encrypted part of  the  password  string  is  the  actual  computed
       password.  The size of this string is fixed:

       MD5     | 22 characters
       SHA-256 | 43 characters
       SHA-512 | 86 characters

       The  characters  in  "salt"  and  "encrypted"  are  drawn  from the set
       [a-zA-Z0-9./].  In the MD5 and SHA implementations the  entire  key  is
       significant (instead of only the first 8 bytes in DES).

2. 重新生成密码

通过以上介绍,有如下结论:

  1. Ubuntu 14.04的密码存储id为6,采用SHA-512方式
  2. NIS服务器的密码存储id为1,采用MD5方式

以下来进行实际操作。

下面通过openssl工具来生成密码:

openssl的用法如下:

ygu@ubuntu:~$ openssl passwd -h
    Usage: passwd [options] [passwords]
    where options are
    -crypt             standard Unix password algorithm (default)
    -1                 MD5-based password algorithm
    -apr1              MD5-based password algorithm, Apache variant
    -salt string       use provided salt
    -in file           read passwords from file
    -stdin             read passwords from stdin
    -noverify          never verify when reading password from terminal
    -quiet             no warnings
    -table             format output as table
    -reverse           switch table columns

假定这里选择参数2MQdYmSo作为salt随机数:

ygu@ubuntu:~$ openssl passwd -1 -salt 2MQdYmSo
Password:
$1$2MQdYmSo$n5oqmyyEoHkP5/3PLnfZL0

用这里最后生成的字符$1$2MQdYmSo$n5oqmyyEoHkP5/3PLnfZL0串替换文件passwd.adjunct中记录的相应字段即可。

由于这里只更新了encrypted password字段,所以账户的一些其他信息,如date of last password change不会得到更新。

3. 参考链接

参考链接:

<think>我们正在处理用户的问题:关于多台服务器共享同一账号密码的实现方式和安全配置。 根据用户的问题,我们需要考虑如何在多个服务器上使用相同的账号密码,同时确保安全性。 参考引用: [^1] 提到了在Windows Server上登录实例的操作,其中涉及用户名和密码的使用,以及重置密码的方法。这提示我们密码管理是服务器安全的重要部分。 [^2] 提到了在文件服务器上创建共享,以及添加库服务器的过程。这涉及到服务器之间的资源共享,但未直接涉及账号密码共享。 [^3] 提到了在LNMP架构下PHP的安全配置,通过open_basedir限制目录访问,防止跨目录访问。这体现了通过配置来隔离不同服务的安全策略。 用户的需求是共享账号密码,这通常是为了方便管理,但会带来安全风险。因此,我们需要提供实现方法,同时强调安全策略。 实现方式: 1. 手动同步:在每台服务器上创建相同的用户名和密码。但这样在密码需要更改时,需要手动更新所有服务器,容易出错且不安全。 2. 使用集中式认证系统:例如LDAP(轻量级目录访问协议)或Active Directory(AD域)。这样所有服务器都连接到同一个认证服务器,用户账号和密码集中管理。 安全配置: 1. 最小权限原则:为共享账号分配最小必要权限,避免使用root或管理员账号。 2. 定期更换密码:并确保密码强度。 3. 使用多因素认证(MFA):增加额外的安全层。 4. 监控和审计:对共享账号的使用进行监控,记录登录和操作日志。 5. 限制登录来源:通过防火墙或安全组策略,只允许特定IP地址使用共享账号登录服务器。 考虑到用户可能使用不同的操作系统,我们分别说明: 对于Windows服务器: - 使用Active Directory域服务,将所有服务器加入同一个域,然后使用域账号登录。 - 参考引用[^1]中提到了远程桌面登录,我们可以配置域账号进行登录。 对于Linux服务器: - 使用LDAP或NIS(网络信息服务)进行集中认证。 - 也可以使用SSH密钥认证代替密码,但用户要求共享密码,所以我们可以配置LDAP。 步骤示例(以LDAP为例): 1. 配置LDAP服务器(如OpenLDAP)。 2. 在每台服务器(客户端)上安装LDAP客户端软件并进行配置,使其指向LDAP服务器。 3. 在LDAP服务器上创建用户账号,客户端服务器即可通过LDAP认证该用户。 但是,共享同一账号密码存在安全风险,因为一旦密码泄露,所有服务器都可能被入侵。因此,我们更推荐使用密钥认证或结合集中式认证的同时使用强密码策略和多因素认证。 相关问题: 1. 如何配置LDAP服务器以实现多台Linux服务器的账号集中管理? 2. 在Windows域环境中,如何将服务器加入域并使用域账号登录? 3. 共享账号密码的安全风险有哪些?如何缓解? 4. 除了共享账号密码,还有哪些安全的服务器身份管理方案? 根据以上分析,我们给出回答。</think>### 多台服务器共享同一账号密码的实现与安全策略 #### 一、实现方式 1. **集中式认证系统** 使用 **LDAP(轻量级目录访问协议)** 或 **Active Directory(AD域)** 实现账号统一管理: - 部署主认证服务器存储账号密码 - 其他服务器配置为认证客户端 - 用户通过主服务器凭证登录所有关联服务器 *示例:Linux系统通过 `sssd` 连接OpenLDAP,Windows服务器加入AD域[^1]* 2. **配置同步工具** 利用自动化工具同步账号信息: ```bash # 使用Ansible批量创建相同账号(示例) ansible server_group -m user -a "name=shared_user password={{加密密码}}" ``` - 支持工具:Ansible/SaltStack/Puppet - 需配合Vault等加密机制传输密码 3. **共享密钥管理器** 通过安全存储系统动态获取密码: - HashiCorp Vault/AWS Secrets Manager - 服务器启动时从密钥管理器拉取凭证 - 实现密码自动轮转 #### 二、安全强化策略 1. **最小权限原则** - 为共享账号分配**严格受限的权限**(非root/administrator) - 遵循**角色分离模型**(如:仅授权运维必须的命令) 2. **访问控制加固** - 网络层:通过安全组限制登录源IP(参考引用[^1]的3389端口控制) - 系统层:配置`sudo`精细授权(Linux)或组策略(Windows) - 应用层:隔离敏感目录(参考引用[^3]的`open_basedir`策略) 3. **动态凭证管理** ```mermaid graph LR A[密码变更] --> B(密钥管理器) B --> C[自动同步到所有服务器] C --> D[旧密码立即失效] ``` - 强制**每30-90天轮换密码** - 启用**多因素认证**(如Google Authenticator) 4. **审计与监控** - 集中收集所有服务器的登录日志(ELK/Splunk) - 配置实时告警规则(如:非常规时段登录行为) #### 三、风险规避建议 1. **避免的场景** - ❌ 生产环境与测试环境共享凭证 - ❌ 数据库与操作系统共用账号 - ❌ 明文存储密码(使用`ansible-vault`等加密工具) 2. **备份方案** - 保留1-2个**应急独立管理账号**(与共享系统隔离) - 定期测试账号失效恢复流程 > **关键提示**:共享账号本质增加安全风险,建议优先考虑**基于证书的认证**(如SSH密钥对)或**零信任架构**。若必须共享密码,需确保符合等保2.0三级要求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛奇看世界

一分也是爱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值