32.2. 设置一个FTP没有 shell 的用户账户

重要的是要给你的严格的FTP用户在 Linux 系统上没有真实的 shell 账户。 这样一来,如果有人出于任何原因成功逃脱了FTPchroot 环境,由于他们没有 bash shell,他们就不可能执行任何用户任务。 首先,为此目的创建新用户;

这些用户将是被允许连接到你的FTP服务器的用户。

这必须与具有无限访问权限的常规用户帐户分开,因为chroot环境的工作方式。 Chroot 使从用户的角度来看,你将他们放置在其中的文件系统级别看起来像是文件系统的顶层。

使用以下命令在/etc/passwd文件中创建用户。 必须为你允许访问你的FTP服务器的用户。
        [root@deep ] /# mkdir /home/ftp
        [root@deep ] /# useradd -d /home/ftp/ftpadmin/ -s /dev/null ftpadmin > /dev/null 2>&1
        [root@deep ] /# passwd ftpadmin
      

        Changing password for user ftpadmin
        New UNIX password:
        Retype new UNIX password:
        passwd: all authentication tokens updated successfully
      

一旦home/ftp/目录被创建,你就不必再次为额外的FTP用户使用此命令。

  1. 编辑/etc/shells文件,使用 vi/etc/shells并添加一个不存在的 shell 名称,例如null,例如。 这个假的 shell 将限制系统上对FTP用户使用此命令。
              [root@deep ] /# vi /etc/shells
            
    
              /bin/bash
              /bin/sh
              /bin/ash
              /bin/bsh
              /bin/tcsh
              /bin/csh
              /dev/null  
            
    /dev/null的访问。 这是我们添加的不存在的 shell。 在 Red Hat Linux 中,有一个特殊的设备名称/dev/null用于此类目的。

  2. 现在,编辑你的/etc/passwd文件并手动添加/./行来分隔/home/ftp目录和/ftpadmin目录,用户ftpadmin应该自动 chdir 到该目录。 必须为每个FTP你添加到你的passwd文件中的用户执行此步骤。
              ftpadmin:x:502:502::/home/ftp/ftpadmin/:/dev/null
            
    要读取
              ftpadmin:x:502:502::/home/ftp/./ftpadmin/:/dev/null
              ^^
            
    帐户是ftpadmin,但你会注意到 home 目录的路径有点奇怪。 第一部分/home/ftp/表示应被视为他们新 root 目录的文件系统。 点.将其与他们应自动 chdir 到的目录分隔开。 change directory'd 到,/ftpadmin/。

再一次,/dev/null部分禁用了他们作为常规用户登录。 通过此修改,用户ftpadmin现在拥有一个假的 shell 而不是一个真实的 shell,从而正确地限制了对系统的访问。