Apache-2.2

EC2 FileZilla 登錄正常,但沒有寫入或刪除權限

  • March 12, 2018

我是一個完全的 Apache 菜鳥,經過一番苦惱和咬牙切齒之後,我終於在被動模式下獲得了對新 EC2 實例的 SFTP 訪問權限。只能以“ec2-user”或“root”身份登錄,沒有密碼,但不能使用 myusername 和/或密碼…我在 /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 使用者身份登錄,但我沒有寫權限。懷疑我需要 chown… 什麼?

我正在使用這裡推薦的 vsftpd 設置

關於我需要更改哪些內容以便 1) 通過 Filezilla 以“myusername”而不是“ec2-user”或“root”登錄的任何想法?

PS:我已經安裝了大部分相關的 AWS 命令​​行工具並執行…

您已經提到(並且可能會混淆)一些不同的事情-不幸的是,您的目標不太清楚。

  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

要將您的使用者限制在一個目錄(即 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

引用自:https://serverfault.com/questions/344078