2009-02-12 24 views
50

我做我的.ssh家目录一个目录列表,给了我一个奇怪的结果:只有Questionmarks在Linux中dirlisting

ls -lsa .ssh/ 
total 0 
? ?--------- ? ? ? ?   ? . · 
? ?--------- ? ? ? ?   ? .. · 
? ?--------- ? ? ? ?   ? authorized_keys · 

奇怪的是,这仅发生于一个用户,只有在这个特定的目录。如果我在su -l之后执行ls,那么一切都按预期工作。另一个奇怪的是,我的xterm显示了红色闪烁字体中的dir列表! 任何想法是什么导致这种情况发生?

thx!

编辑:
这里是DIR上市为根:

ls -lsa 
total 52 
4 drw------- 2 sdd sdd 4096 Feb 10 15:57 . 
4 drwx------ 16 sdd sdd 4096 Feb 10 15:57 .. 
4 -rw------- 1 sdd sdd 1628 Feb 10 15:57 authorized_keys 

我使用EXT3。

EDIT2:
THX的答案,但我仍然得到这样的:

chmod -R 600 /home/sdd/.ssh 
ls -lsan _ssh.old/ 
total 0 
? ?--------- ? ? ? ?   ? . 
? ?--------- ? ? ? ?   ? .. 
? ?--------- ? ? ? ?   ? authorized_keys 
+0

这个用户有一个奇怪的语言环境或怪异的终端字体吗? – gnud 2009-02-12 14:42:39

+0

不,这是一个“正常”的字体,即没有UTF8的东西或任何东西 – SDD 2009-02-12 14:45:39

回答

90

当发生这种情况的用户不能做对文件的stat()(它需要执行权限) ,但可以读取目录条目(这需要对目录进行读取访问)。因此,您可以获取目录中的文件列表,但无法获取有关这些文件的任何信息,因为它们无法读取。 :)如果你有一个具有读权限但不执行的目录,你会看到这个。有人可能试图错误地保护.ssh目录 - 它应该是“chmod 0700.ssh /”,并由拥有homedir的用户拥有。更可能的是,有人正在按照说明保护.ssh 文件,但将其应用于.ssh目录。 :)

如果您在任何目录上执行chmod 0600或0400,则可以轻松地重现此行为。将执行权限添加到目录,它会正常工作。