我注意到我的路由器和我的各种文件系统中出现了很多奇怪的文件。位于奇怪位置的文件或与安全性有关的文件后带有 - 符号。
如果我这样做ls -l /etc/shadow*,这就是我所看到的。
-rw-r----- 1 root shadow 1163 Aug 9 15:48 shadow
-rw------- 1 root root 1163 Aug 8 21:11 shadow-
Run Code Online (Sandbox Code Playgroud)
这看起来正常吗?第二个影子文件有什么用?
我在影子文件中发现了一些我不明白其含义的条目。
user:UP:::::::
user1:NP:::::::
Run Code Online (Sandbox Code Playgroud)
UP 和 NP 是什么意思?除了这 2 个之外,同一个影子文件还具有正常的散列条目和指示锁定帐户的LK。
该机器是 Solaris 10 VM。
使用用户时(在我的例子中是通过 LXC),您将一系列从属 GID 和 UID 分配给非特权用户。请参阅资源:subuid(5),subgid(5),newuidmap(1),newgidmap(1),user_namespaces(7)。
然后可以使用该范围,并将通过用户映射到系统帐户。
假设我们有一个(主机)系统帐户john,其 UID(和 GID)为 1000。GID 和 UID 的分配范围是 100000..165536。
所以一个条目分别存在于/etc/subgid和 中/etc/subuid:
john:100000:65536
Run Code Online (Sandbox Code Playgroud)
非特权容器内的文件归“内部”john所有,现在归主机 101000 所有,归“内部”root所有的文件归 100000。
通常,这些范围不会分配给主机上的任何名称。
ls朋友们提供更有意义的输出?john在我们的情况下?如果是这样,在从属范围内的那些有效用户和用户“所有者”之间创建共享组并相应地设置权限的唯一明智方法是?好吧,或者 ACL,很明显。基于第二个(密码)字段的/etc/shadow(5)文档:
加密密码
如果密码字段包含一些不是 crypt(3) 的有效结果的字符串,例如!或*,用户将无法使用unix密码登录(但用户可以通过其他方式登录系统)。
我的问题是是否有禁用用户密码的 linux 命令,即设置“*”或“!” 在密码字段上。
CentOS 6 Linux 有两种锁定密码的方法:
passwd -lusermod -L今天我发现,他们做了一些不同的事情。
passwd 将两个感叹号写入影子文件。
# passwd -d test1 删除用户 test1 的密码。 密码:成功 # passwd -l test1 锁定用户 test1 的密码。 密码:成功 # passwd -S test1 test1 LK 2014-01-14 0 99999 7 -1(密码锁定。) # grep test1 /etc/shadow test1::!!:16084:0:99999:7:::
但是usermod只写一个。
# passwd -d test1 删除用户 test1 的密码。 密码:成功 # usermod -L test1 # passwd -S test1 test1 LK 2014-01-14 0 99999 7 -1(密码锁定。) # grep test1 /etc/shadow test1::!:16084:0:99999:7:::
这只是外观上的不一致还是不同的锁定指示器有含义?
如果混合使用这两个命令,就会发生有趣的事情:
锁定帐户passwd:
# …Run Code Online (Sandbox Code Playgroud) man 5 shadow关于第二个字段是这样说的:
加密密码
今天是真的吗?我认为它应该说“散列密码”。我对么?
我在问,因为我使用现有/etc/shadow.
我正在编写的应用程序将具有一些密码更改功能。但是我想知道是否可以不以 root 身份运行帐户管理部分。
现在我遇到了一个问题,如果我以我试图管理的用户身份运行,我将无法更改密码。我通过首先使用给定的密码进行身份验证来验证密码是否正确。(单独调用身份验证模块的另一部分。)只有当我调用chauthtok为用户更改它时pamtest,它才会导致对话函数的调试输出:
START PAM CHANGE PASSWORD
PAM_CONV start [('Changing password for pamtest.', 4)]
PAM_CONV iter: Changing password for pamtest. 4
PAM_CONV end: [('', 0)]
PAM_CONV start [('(current) UNIX password: ', 1)]
PAM_CONV iter: (current) UNIX password: 1
PAM_CONV end: [(u'5ACN5pbmDFBVMHp', 0)]
PAM_CONV start [('Enter new UNIX password: ', 1)]
PAM_CONV iter: Enter new UNIX password: 1
PAM_CONV end: [(u'pdJb7ffsQTHWw4V', 0)]
PAM_CONV start [('Retype new UNIX password: ', 1)]
PAM_CONV iter: Retype new UNIX password: …Run Code Online (Sandbox Code Playgroud) 抱歉,我是 Linux 新手,我正在寻找信息,如何使用预定义的加密密码在 Debian 中创建新用户帐户。
我在 bash 中有一个函数,如果新用户的 id 没有出现在我的 /etc/passwd 文件中,那么我运行 bash 命令:
adduser -m -p <encrypted-password> <username>
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但我的所有数据(包括用户名和密码)都存储在 JSON 输出中,并且用户的密码已经由 SHA-512 散列(出于安全原因)。用户的密码由 PHP 脚本加密并发送到 JSON:
$hashed_password = crypt('Test007', '$6$rounds=5000$StJ.1Wji$');
echo looks like this: $6$rounds=5000$StJ.1Wji$cm6ZVl.XoIiQXaJAVHkqiteUGAqZoJ1Ee3dpHP2a6x6rG/kHg4k7ucMLrzHCvQA1TpQYP4eKnoFITVGcviqjU0
Run Code Online (Sandbox Code Playgroud)
当我查看我的/etc/shadow文件时,在 adduser 函数之后,我看到散列密码与 PHP 生成的原始密码不同,当然我无法以纯文本形式使用该密码登录新用户(即使我知道它是纯文本)。
有没有简单的方法,如何使用预定义的加密密码创建用户帐户?如何生成散列密码以供 Linux useradd 函数接受?我在互联网上找不到任何解决方案。
如果我执行
sudo getent shadow
Run Code Online (Sandbox Code Playgroud)
我看到所有拥有密码的本地用户的密码哈希。对于大多数 LDAP 帐户,我只*在密码字段中看到。但是,对于一些 LDAP 用户,我看到了密码哈希。我已经确认他们没有本地帐户(即没有输入/etc/passwd但getent passwd username返回一行)。
事实上,以我自己的身份登录,我的用户条目是带有*.
有一个运行 OpenLDAP 的 LDAP 服务器和一组帐户(树中的一个分支)。
LDAP 客户端服务器正在运行nscd并且libnss-ldap.
这是/etc/nsswitch.confLDAP 客户端服务器上的一部分:
passwd: files ldap
group: files ldap
shadow: files ldap
Run Code Online (Sandbox Code Playgroud)
在这种情况下,LDAP 用于验证用户登录 LDAP 客户端服务器的身份,并且在某些时候,身份验证机制(在这种情况下为 PAM)必须根据存储的哈希值检查用户在登录时提供的密码的哈希值包含在 LDAP 数据库中。
每个用户的 LDAP 帐户都存储他们的密码哈希,并具有objectClassesposixAccount和shadowAccount(以及其他值和设置)。
只有系统帐户在/etc/password和 中有本地条目/etc/shadow。用户帐户都在 LDAP 上(并且仅在那里)。LDAP 中的所有用户都有 userPassword 条目。
什么可能导致这种情况或我怎样才能解决它的原因?为什么不getent shadow为所有 LDAP 用户返回密码哈希?