EC2 FileZilla 登录正常,但没有写入或删除权限

EC2 FileZilla 登录正常,但没有写入或删除权限

我完全是 Apache 菜鸟,经过一番苦思冥想和咬牙切齿,终于在被动模式下获得了对新 EC2 实例的 SFTP 访问权限。只能以“ec2-user”或“root”身份登录,无需密码,但不能使用我的用户名和/或密码...我在 /home/admin、/home/ec2-user 和 /home/myusername 目录中创建了一个 .htaccess 文件...我调整了 /etc/httpd/conf/httpd.conf、/etc/vsftpd/vsftpd.conf,并根据这些调整更改了 AWS 安全组设置和端口/协议,并为上述每个用户目录创建了 .ssh/authorized_keys 文件。我无法通过 FTP 客户端(Filezilla)从本地计算机拖放到 EC2 实例,因此显然,虽然我可以以 ec2-user 身份登录,但我没有写入权限。怀疑我需要 chown...什么的?

我使用这里推荐的 vsftpd 设置

关于我需要进行哪些更改以便 1) 以“myusername”而不是“ec2-user”或“root”身份通过 Filezilla 登录,您有什么想法吗?

附言:我已经安装了大多数相关的 AWS 命令​​行工具并且可以运行......

答案1

您提到(并且可能混淆)了一些不同的事情 - 因此不幸的是,您的目标并不十分明确。

  1. SFTP - 不存在“被动 SFTP” - SFTP 协议与 FTP 完全不同,由 /usr/libexec/openssh/sftp-server(在 /etc/ssh/sshd_config 中设置)处理,而不是 vsFTPd
  2. Apache .htaccess 文件与 FTP 无关 - 它们定义了您的 Web 服务器如何传递内容(即向您的网站访问者)的规则。
  3. 您是否尝试使用 FTP 转到 SFTP?
  4. 您是否尝试从 /home/admin、/home/ec2-user 等位置提供网站服务?在 Amazon 的 Linux 上,Apache 的默认 Web 根目录是 /var/www/html。通常,您会将内容添加到那里,或者您必须更改 httpd.conf 中的 DocumentRoot。

可以设置 vsFTPd 使用本地用户。操作如下:

  • 设置 local_enable=YES 和 chroot_local_user=YES (vsftpd.conf)
  • 创建系统用户(useradd)(使用 /sbin/nologin 作为 shell) - 用户将被限制在其主目录中(上面的 chroot 指令)
  • 设置密码(passwd)
  • 重新启动 vsftpd 以使配置更改生效
  • 通过 FTP(不是 SFTP)登录

对于 SFTP(不使用 vsftpd!):

  • 将 /usr/libexec/openssh/sftp-server 附加到 /etc/shells
  • 使用 shell /usr/libexec/openssh/sftp-server 创建新用户
  • 为新用户设置密码
  • 通过 SFTP 登录。在这里,您不会被限制在您的主目录中,但无法写入您的用户没有权限的位置

现在您面临的权限问题:

  • 首先,不要因为无法写入目录而去更改文件的权限或所有权。大多数目录归 root 所有,并且只有所有者可以写入。
  • 对于 Web 服务器,请限制您的权限 - 644(rw-r--r--)或更少 - (组和其他人不需要写权限;并且在大多数情况下没有人需要执行权限)
  • 将文件所有权设置为与运行 Web 服务器的用户相同,就像使用动态文件(例如 PHP)一样。

因此,您的选择是:

  • 从用户的主目录(而不是 /var/www/html)提供文件 - 保持用户的 chroot 状态,并将 httpd.conf 中的 DocumentRoot 设置为指向正确的路径。这是一种很好的(安全的)方法,但通常所做的更改是将用户的主目录设置为 /var/www/html 下的路径(例如,对于拥有自己网站的多个人,/var/www/html/USERNAME - 并相应地设置 DocumentRoot)
  • 授予您的 Apache 用户 FTP/SFTP 访问权限 - 这听起来合理,但使用 FTP 尤其不安全。
  • 使用 SCP 并将您的用户切换为 root(sudo) - 它有其用途,但不能用于将文件保存到 Web 服务器目录 - 所有创建的文件都归 root 所有

我的建议是使用带有证书的 SFTP,并且您的主目录位于 /var/www/html 下


在Amazon的Linux上添加SFTP用户的具体命令:

免责声明:使用证书比密码更安全 - 并且您应该保持 PasswordAuthentication 处于禁用状态。

#Add the shell
echo /usr/libexec/openssh/sftp-server >> /etc/shells

#Create a user with the shell, I have not setup a home folder
useradd -M -s /usr/libexec/openssh/sftp-server USERNAME

#Set the password
passwd USERNAME

Edit /etc/ssh/sshd_config:
Change: PasswordAuthentication no to PasswordAuthentication yes (line 69), save and quit

#Restart SSH
service sshd restart


要将用户限制在一个目录(即 chroot):

由于 sftp-server 不会在你的 chroot 路径中,我们需要更改它:更改(在 sshd_config 中):

Subsystem      sftp    /usr/libexec/openssh/sftp-server

到:

Subsystem     sftp   internal-sftp

将以下内容添加到 sshd_config 的末尾(例如,用 /var/www 替换路径):

Match User USERNAME
    ChrootDirectory /path/to/restrict/to
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp
Match

重新启动 SSH:

service sshd restart

相关内容