几个面试问题的回顾

上周面试时碰到了几个问题,感觉有些陌生。回来后查了下资料,以备后用。

  1. what does the plus sign mean in an entry in the passwd file?  (passwd 文件中某一项开始的地方的加号+是什么意思?)
  2. During a telnet session, you type in username and password, and then it hung. what happened? ( 在一个telnet会话中,输入用户名和密码后会停顿很长一段时间。什么原因?)
  3. How does re-transmit work in TCP? (TCP中的重传机制是如何工作的?)

今天先说第一个问题吧。 印象中好像有碰到过一次这样的passwd文件,但是完全忘记了。我当时回答是加号意味着这是一个LDAP用户。google了一下,原来加号是用于表示这是一个NIS用户。(我没用过Solaris的NIS系统,估计以后也没机会用了)。除了加号以外,passwd里还可以出现-减号,表示要从NIS信息中排除指定用户。看一下nsswitch.conf的手册会有更详细的信息。

For passwd and shadow databases:

+user Include the specified user from the NIS passwd/shadow map.

+user:::::: Include the specified user from the NIS passwd map, but override with non-empty passwd fields.

+@netgroup Include all users in the given netgroup.

-user Exclude the specified user from the NIS passwd/shadow map.

-@netgroup Exclude all users in the given netgroup.

+ Include every user, except previously excluded ones, from the NIS passwd/shadow map.

那么,LDAP用户是怎么处理的呢? LDAP的相关设置是放在nsswitch.conf文件中的:

passwd: files ldap

group: files ldap

shadow: files ldap

 

有了这些设置,当需要查找/验证用户信息时,会先找passwd文件(file),然后去找LDAP服务器(ldap)。

下面两个问题后面有空再写吧

2017/11/03 更新:

下面谈谈telnet的这个问题(在一个telnet会话中,输入用户名和密码后会停顿很长一段时间。什么原因?)

我自己其实并没有碰到过这个问题,因为基本上没用过telnet来登录系统,只是偶尔用来测试端口的连通性。当时只能说要抓包分析,看看能否找到问题的原因。

虽然用SSH的时候会有类似的现象,但是SSH的停顿一般在你输入用户名后就出现,等到输入密码的提示出现,就表示会话已经恢复正常。而这个问题是由服务器端要对客户端机器名做反向DNS解析引起的。我不确定telnet是否有同样的机制。

回来后google了一下,有的说是局域网上路由器的MTU设置太小引起的,这个我不确定,但即使这是一个原因,也只有在客户端和服务器端位于不同的子网是才会出现。而另一种说法我认为更合理,应该是这个问题想要考察的知识点:停顿是因为telnet服务端在收到用户名和密码后,由于它被配置为NIS(或者LDAP)客户端,因此要去查询NIS服务器来验证用户/密码信息,因此需要一些时间。如果NIS服务器已经被停掉,则这个查询会一直等到timeout才会返回,需要的时间就会更长。

这个问题中,不管是telnet登录还是NIS现在都已经被淘汰,可以推断出这是一个历史很悠久的面试题目。