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

Sea*_*ean 4 ftp sftp amazon-ec2 apache-2.2

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

我正在使用这里推荐的 vsftpd 设置

关于我需要更改什么以便 1) 以“myusername”而不是“ec2-user”或“root”身份通过 Filezilla 登录的任何想法?

PS:我已经安装了大部分相关的 AWS 命令​​行工具并且可以正常运行......

cyb*_*x86 7

您已经提到(并且可能混淆)了一些不同的事情-不幸的是,您的目标还不是很清楚。

  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 下的主目录


在亚马逊的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
Run Code Online (Sandbox Code Playgroud)


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

由于 sftp-server 不会在您的 chroot 路径中,我们需要对其进行更改:更改(在 sshd_config 中):

Subsystem      sftp    /usr/libexec/openssh/sftp-server
Run Code Online (Sandbox Code Playgroud)

到:

Subsystem     sftp   internal-sftp
Run Code Online (Sandbox Code Playgroud)

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

Match User USERNAME
    ChrootDirectory /path/to/restrict/to
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp
Match
Run Code Online (Sandbox Code Playgroud)

重启 SSH:

service sshd restart
Run Code Online (Sandbox Code Playgroud)