如果我是一个Web服务器,为什么我可以closurespasswd文件中的shell?

我正在运行LAMP的Web服务器,并希望使用SSH访问它。

当我打开passwd文件时,我看到所有这些帐户,我想知道哪些可以放false 。 我有以下帐户:

 root, daemon, bin, sys, sync, games, man, lp, mail, news, uucp, proxy, www-data backup, list, irc, gnats, nobody, libuuid, syslog, messagebus, whoopsie, mandscape, sshd, eric 

除了rootsshderic ,哪些不应该禁用? 如何www-datasshd

您对于login系统的工作原理以及这些帐户的用途有一些误解。

首先,除了rooteric之外,这些帐户中的大多数都是系统帐户,它们不是用于人们login的,而是允许不同的服务以普通用户身份运行,而没有所有的root帐户权限。 例如,OpenSSH守护程序通常以用户sshd身份运行,因此如果有人能够控制sshd进程,则只允许他访问和修改相应用户sshd拥有权限的文件。

其次,禁用用户login的首选方法是禁用他的密码,不要将loginshell更改为/bin/false 。 在现代Linux系统上,用户数据库实际上由两部分组成, /etc/passwd/etc/shadow 。 密码存储在/etc/shadow (请参阅下面的原因),如果/etc/shadow中的密码字段为*则会禁用该帐户。

在以下示例中,用户sshd已禁用,而sven已设置encryption密码。 你不能以用户sshd身份login,也不能通过控制台和ssh会话login,但是loginsven将会起作用。

 sshd:*:15533:0:99999:7::: sven:$6$ckP43saI2$Xjoxh52LLJxz2VXa.:15538:0:99999:7::: 

最有可能的是,你会发现你的系统上的所有用户,除了eric (也许是root )都被这样禁用,这意味着你想完成的任务已经被开发者完成了。 另外,你会发现许多帐户在/etc/passwd的loginshell已经被设置为/bin/false ,这意味着甚至root也不能使用`su'切换到这些帐户。


为什么要分开/etc/passwd/etc/shadow

许多程序需要访问用户数据库以满足不同的用途,但是对/etc/passwd提供读取访问权限允许每个人都读取所有用户的encryption密码,这是非常不安全的,特别是由于密码的encryption很长时间时间。 这是通过将密码放入单独的文件/etc/shadow来解决的,这个文件只能被root用户读取。