我有一台旧的 Solaris 5.10 服务器。我正在将 tomcat 产品迁移到 Centos 7。我需要迁移 Solaris 服务器上的两个帐户。这两个帐户的 shell 都被标识为“/usr/local/bin/ftponly”。这看起来像一个简单的 SH 脚本,但我不知道它是随服务器一起提供的,还是以前的管理员(或供应商技术人员)编写的。该脚本和“/bin/sh”是“/etc/shells”中仅有的项目。
在新的 Centos 7 服务器上,我选择“/usr/sbin/nologin”作为两个用户的 shell。旧服务器上的“/usr/local/bin/ftponly”是人类可读的脚本,但“/usr/sbin/nologin”似乎是一个二进制文件。新服务器上的 FTP 事务正在使用两个相关用户帐户进行,并且 SSH 被拒绝。
我是好去处还是对可用的外壳有更大的考虑?我的主要 Linux 操作系统是 Ubuntu,所以 Centos 的一些内置安全功能有时让我摸不着头脑。
这不是因操作系统而异的东西。它因 FTP 服务器软件而异。
在 Unix 中算作真人用户帐户的内容对于以编程方式确定并非易事。非个人用户帐户可以在系统帐户数据库中具有指向真实可执行文件(例如
uucico
)和有效的现有主目录(例如/var/spool/news
)的非空 shell 字段。至少两个非匿名 FTP 服务器采用的约定是,用户帐户是用于 FTP 目的的真人,因此可以执行 FTP 登录,如果其在系统帐户数据库中的记录中的 shell 字段是非空的并且具有可以在系统“用户外壳”表中找到的值(
/etc/shells
对于这两个中的一个,getusershell()
在另一个的情况下根据库函数)。显然,仅从名称就可以看出, shell 正在利用这一点,以便让用户帐户在用户尝试终端
/usr/local/bin/ftponly
时执行可能是一个非常简单的发出消息并注销程序登录,但适用于FTP登录。nologin
如果它在用户 shell 表中,它将执行相同的工作。但这是特定于您碰巧使用的 FTP 服务器软件。同一操作系统上的另一个 FTP 服务器软件会有完全不同的规则。例如, Bruce Guenter 的 twoftpd根据两个配置设置测试 shell 字段的值。如果匹配一个,客户端将获得该程序的只读 FTP 服务
twoftpd-anon
。如果它与另一个匹配,则客户端通过程序获得仅文件上传 FTP 服务twoftpd-drop
。即使您可能正在使用的软件也可能具有影响这一点的复杂配置选项。例如,在 vsftpd 中,该
check_shell
服务的选项、local_enable
选项、pam_service_name
选项和 PAM 配置(包括pam_shells
模块的存在和配置)都涉及。进一步阅读