标签: getent

getent hosts 打印 IPv6,getent ahosts 打印 IPv4

我的终端逐字输出:

$ getent hosts example.org
2001:500:88:200::10 example.org
$ getent ahosts example.org
192.0.43.10     STREAM 43-10.any.icann.org
192.0.43.10     DGRAM  
192.0.43.10     RAW    
Run Code Online (Sandbox Code Playgroud)

我认为它们(至少ahosts)都应该打印 IPv4 和 IPv6 地址。为什么这些打印不同的地址类型?

$ uname -srvmpio
Linux 3.2.0-31-generic #50-Ubuntu SMP Fri Sep 7 16:17:36 UTC 2012 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

编辑:看起来它可能与此错误报告有关

getent

10
推荐指数
1
解决办法
1万
查看次数

直接读取文件 VS getent

在各种 shell 脚本中,我经常看到两种从名称服务切换库(如/etc/group/etc/hosts或 )支持的数据库中获取信息的方法/etc/services。一个是getent实用程序,另一个是grep或其他一些文本处理工具。例如:

root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 


root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 
Run Code Online (Sandbox Code Playgroud)

..或者:

root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~# 

root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~# 
Run Code Online (Sandbox Code Playgroud)

应在脚本中使用上述两种方法中的哪一种?我的意思是其中一种解决方案比另一种更优雅或更标准吗?

nsswitch getent

6
推荐指数
2
解决办法
1512
查看次数

getent shadow 显示某些用户的密码哈希

如果我执行

sudo getent shadow
Run Code Online (Sandbox Code Playgroud)

我看到所有拥有密码的本地用户的密码哈希。对于大多数 LDAP 帐户,我只*在密码字段中看到。但是,对于一些 LDAP 用户,我看到了密码哈希。我已经确认他们没有本地帐户(即没有输入/etc/passwdgetent 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 帐户都存储他们的密码哈希,并具有objectClassesposixAccountshadowAccount(以及其他值和设置)。

只有系统帐户在/etc/password和 中有本地条目/etc/shadow。用户帐户都在 LDAP 上(并且仅在那里)。LDAP 中的所有用户都有 userPassword 条目。

什么可能导致这种情况或我怎样才能解决它的原因?为什么不getent shadow为所有 LDAP 用户返回密码哈希?

password ldap authentication shadow getent

5
推荐指数
0
解决办法
4487
查看次数

getent passwd -s sss LOCALUSER 显示本地用户

tl;博士

我想轻松快速地判断用户是本地用户还是域用户(不关心哪个域)。

环境

  • freeipa-client-4.6.1-3.fc27.x86_64
  • sssd-1.16.0-4.fc27.x86_64

全文

我正在编写一个 userinfo.sh 脚本,该脚本将显示用户是否是本地用户、sssd、可以 ssh 以及是否被 sssd 允许。

目前我正在使用getent passwd -s sss $USERNAME命令检查用户是否来自域。但是我遇到了一个问题,检查 sssd 数据库返回本地用户!

# getent passwd -s sss 'bgstack15-local'
bgstack15-local:x:1000:1000:bgstack15-local:/home/bgstack15-local:/bin/bash
Run Code Online (Sandbox Code Playgroud)

检查 sss 的数据库(缓存)内容显示 sssd 显然缓存了有关本地用户的各种信息。

# sudo su root -c 'strings /var/lib/sss/db/* | grep bgstack15-local' | sort | uniq
name=bgstack15-local@implicit_files,cn=groups,cn=ih
name=bgstack15-local@implicit_files,cn=groups,cn=implicit_files,cn=sysdb
name=bgstack15-local@implicit_files,cn=users,cn=implicit_files,cn=sysdb
[...output truncated]
Run Code Online (Sandbox Code Playgroud)

我尝试整体清除 sssd 缓存,并且仅针对用户。两者都没有区别。

# sss_cache -U
# sss_cache -u bgstack15-local
Run Code Online (Sandbox Code Playgroud)

用户确实显示为本地用户,我保证它只是本地用户!

getent passwd -s files 'bgstack15-local'
bgstack15-local:x:1000:1000:bgstack15-local:/home/bgstack15-local:/bin/bash
Run Code Online (Sandbox Code Playgroud)

getent(1)getpwent(3)的手册页不能帮助我理解可能发生的事情。sssd(8)告诉我sssd 可以缓存本地用户,这实际上违背了我的要求!sssd.conf(5)的 nss …

users sssd getent

5
推荐指数
1
解决办法
6788
查看次数

标签 统计

getent ×4

authentication ×1

ldap ×1

nsswitch ×1

password ×1

shadow ×1

sssd ×1

users ×1