如何获取可以通过 ssh 访问服务器的所有用户列表?

如何获取可以通过 ssh 访问服务器的所有用户列表?

我如何获取可以通过 ssh 连接到服务器的所有用户的列表?ssh [email protected]

请注意,我知道问题,而这并不是我想要的!

如果它有帮助,服务器会在许多不同的组中拥有如此多的用户,并且在主目录下有一些组目录,并且这些组目录中有许多用户目录。

編輯:

请注意,我得到的结果/etc/passwd不是我想要的,如下所示:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
shelladmin:x:1000:1000:shelladmin,,,:/home/shelladmin:/bin/bash
messagebus:x:104:106::/var/run/dbus:/bin/false
festival:x:105:29::/home/festival:/bin/false
ntp:x:106:108::/home/ntp:/bin/false

这个列表甚至不包括我自己的用户名!更不用说其他 1000 名用户了。

編輯2:

因此我与 Yaron 聊了一些,以下是有关该系统的更多信息:

-bash-4.2$ ls -lsa /etc/init.d/nis
ls: cannot access /etc/init.d/nis: No such file or directory
-bash-4.2$ ls -lsa /var/yp
ls: cannot access /var/yp: No such file or directory
if it helps, this is the putput of ls -lsa /var
-bash-4.2$ ls -lsa /var
total 48
4 drwxr-xr-x 12 root root 4096 Oct 25 2016 .
4 drwxr-xr-x 22 root root 4096 Oct 25 2016 ..
4 drwxr-xr-x 2 root root 4096 Oct 26 2016 backups
4 drwxr-xr-x 10 root root 4096 Oct 25 2016 cache
4 drwxr-xr-x 34 root root 4096 Oct 25 2016 lib
4 drwxrwsr-x 2 root staff 4096 May 7 2012 local
0 lrwxrwxrwx 1 root root 9 Oct 25 2016 lock -> /run/lock
4 drwxr-xr-x 9 root root 4096 Dec 10 06:25 log
4 drwxrwsr-x 2 root mail 4096 Jul 30 00:51 mail
4 drwxr-xr-x 2 root root 4096 Nov 21 2012 opt
0 lrwxrwxrwx 1 root root 4 Oct 25 2016 run -> /run
4 drwxr-xr-x 5 root root 4096 Oct 25 2016 spool
4 drwxrwxrwt 12 root root 4096 Dec 10 08:18 tmp
4 drwxr-xr-x 2 root root 4096 Feb 16 2013 www
-bash-4.2$ getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:103::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
shelladmin:x:1000:1000:shelladmin,,,:/home/shelladmin:/bin/bash
messagebus:x:104:106::/var/run/dbus:/bin/false
festival:x:105:29::/home/festival:/bin/false
ntp:x:106:108::/home/ntp:/bin/false
-bash-4.2$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd: files ldap
group: files ldap
shadow: files ldap

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis
-bash-4.2$ cd /etc/sssd/
-bash: cd: /etc/sssd/: No such file or directory

答案1

我的答案来自stackoverflow 问题。

列出所有“用户”

我原本以为会有一种方法,可以直接说“显示所有可以 ssh 到我的服务器的用户”。
但我没有意识到,人员用户和系统“用户”之间没有区别,因此虽然您可以使用此命令列出所有用户,但这可能比您预期/希望的要长得多:

cat /etc/passwd

显示所有具有有效 shell 的用户

如果用户 shell 设置为,/etc/false那么他们就无法登录,因此这会缩小可能的 ssh 用户列表:

cat /etc/passwd | grep -v /bin/false

但这仍然是一个很长的名单。


实际拥有访问权限的用户

如果用户没有有效的密码,则可能表明他们无法登录。
/etc/shadow文件保存加密的密码,此文件第二列中的“!”或“*”表示未设置密码我们可以过滤掉这些用户,得到一个新的(可能更短的)具有有效密码的用户列表:

cat /etc/shadow | grep '^[^:]*:[^\*!]'

有关正则表达式的详细信息

  1. ^- 图案必须位于行首
  2. [^:]*- 匹配任何不:介于 0 和无限次之间的字符
  3. ::-按字面意思匹配角色
  4. [^\*!]- 匹配任何非*,字符!一次。

请注意,正则表达式是用单引号括起来的,这很重要,因为许多正则表达式特有的字符对 bash 来说也是特有的(参见第 2 部分这个答案

唯一没有被涵盖的其他帐户是他们的用户帐户上有 ssh 密钥的帐户,因此您还需要查看拥有主文件夹的用户:

ls -l /home

限制访问

好的 - 现在我有一个有限的列表 - 并且我想删除几个帐户的访问权限。
@Yaron 的回答更详细地描述了这一点(),但简而言之;该/etc/ssh/sshd_config文件说明哪些帐户可以 ssh,如果您AllowUsers在那里设置,那么其他用户将受到限制 - 因此您可以编辑该文件以明确说明您想允许谁登录:

vi /etc/ssh/sshd_config

并添加一行说

AllowUsers user1 user2

最后重启ssh服务

service ssh restart

(取决于你的系统 - 请参阅用于在其他系统上重启服务)

答案2

默认情况下,特定机器的所有用户都可以使用 ssh 登录该机器。

您可以配置sshd仅允许部分机器用户访问。

Ubuntu ssh 手册页指定您可以允许/拒绝特定用户/组sshd_config — OpenSSH SSH daemon configuration file-/etc/ssh/sshd_config

  • 允许用户该关键字后面可以跟一串用户名模式,以空格分隔。
  • 如果指定,则仅允许与其中一种模式匹配的用户名登录。
  • 仅用户名有效;数字用户 ID 无法识别。
  • 默认情况下,允许所有用户登录。
  • 如果模式采用 USER@HOST 形式,则会分别检查 USER 和 HOST,从而限制特定主机的特定用户登录。
  • 允许/拒绝指令按以下顺序处理:拒绝用户、允许用户、拒绝组、最后允许群组

通过在服务器上运行以下命令可以找到服务器中所有用户的列表:

cat /etc/passwd

根据更新的问题,/etc/passwd不包含多个用户名。这可能是由于服务器是网络信息服务、LDAP 或 SAMBA。

要查看服务器已知的所有用户和组,无论它们来自何处,最好使用以下命令getent

getent passwd

讨论摘要:

看来您在服务器上安装了 LDAP,并且已将其定义为禁用对 LDAP 用户列表的访问。
否则getent passwd会向您显示passwd文件

相关内容