CentOS上搭建SFTP
在CentOS上安裝SFTP服務通常是透過安裝OpenSSH來實現的,因為OpenSSH預設提供了SFTP功能。以下是在CentOS上安裝SFTP的步驟:
一、安裝OpenSSH伺服器:
sudo yum install openssh-server
啟動SSH服務:
sudo systemctl start sshd
確保SSH服務隨系統啟動而啟動:
sudo systemctl enable sshd
檢查SSH服務狀態:
sudo systemctl status sshd
這將顯示SSH服務是否正在執行以及其他相關資訊。
現在,你的CentOS伺服器上應該已經安裝並執行了SFTP服務。你可以使用任何支援SFTP的客戶端(如WinSCP、FileZilla等)連線到伺服器。確保使用SSH協議(埠22)進行連線,並使用具有適當許可權的使用者憑據進行身份驗證。
二、配置sftp使用者、訪問目錄等
下面是一個完整的例子,假設我們要建立一個名為sftpuser的使用者,限制他只能訪問/sftp目錄,並且使用特定的SSH配置檔案。
建立SFTP使用者:
sudo useradd -m -s /sbin/nologin sftpuser
設定使用者密碼:
sudo passwd sftpuser
建立使用者的SFTP根目錄:
sudo mkdir /sftp
設定根目錄的許可權(根目錄必須是root使用者,否則sftp連線不上):
sudo chown root:root /sftp
sudo chmod 755 /sftp
在根目錄下層建立子目錄方可以寫入(根目錄只能讀取不能寫入,因為根目錄必須是root使用者,而sftp訪問的使用者卻是我們新建的sftpuser)
mkdir /sftp/sharedata
chown sftpuser:sftpuser /sftp/sharedata
建立新使用者自定義ssh配置
簡單點直接修改/etc/ssh/sshd_config也可以,這樣服務啟動選項sshd.service就不用改了
建立使用者的SSH配置檔案目錄:
sudo mkdir /home/sftpuser/.ssh
複製系統SSH配置檔案到使用者目錄:
sudo cp /etc/ssh/sshd_config /home/sftpuser/.ssh/sshd_config
編輯使用者的SSH配置檔案:
sudo vi /home/sftpuser/.ssh/sshd_config
在這個檔案中,確保你有適當的配置,例如使用ChrootDirectory限制使用者訪問,以及其他任何你想要自定義的配置。注意將這個配置節放到最後,否則老是報錯: "Directive 'UseDNS' is not allowed within a Match block" 表明在 Match 塊中不允許使用 UseDNS 這個指令。
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
給新使用者的使用者目錄遞迴設定歸屬
chown -R sftpuser:sftpuser /home/sftpuser
給配置檔案設定讀取許可權
chmod 755 /home/sftpuser/.ssh/sshd_config
修改SSH服務啟動選項
開啟SSH服務的啟動選項檔案,可以使用systemctl status sshd檢視找到(通常在 /etc/systemd/system/sshd.service 或 /etc/init.d/sshd 或/usr/lib/systemd/system/sshd.service),並修改為:
ExecStart=/usr/sbin/sshd -f /home/sftpuser/.ssh/sshd_config -D $OPTIONS
或者
/usr/sbin/sshd -f /home/sftpuser/.ssh/sshd_config $OPTIONS
重新載入SSH服務:
systemctl daemon-reload
systemctl restart sshd
現在,使用者sftpuser被限制在sftp目錄下,並且只能使用SFTP進行檔案傳輸。他們的SSH配置檔案位於/home/sftpuser/.ssh/sshd_config,這樣他們可以自定義他們的SSH行為而不影響其他使用者或系統級別的配置。
檢視錯誤日誌:
檢查系統日誌:如果問題仍然存在,請檢視系統日誌檔案,如 /var/log/auth.log 或 /var/log/secure,以獲取有關寫入檔案失敗的詳細資訊。日誌檔案中可能會提供關於出現問題的原因的線索。
三、多SFTP使用者如何配置
SSH服務啟動選項只能指定一個配置檔案。如果你想要為多個使用者指定不同的配置,你需要為每個使用者建立單獨的配置檔案,並在啟動選項中指定這些檔案。
例如,如果你有兩個使用者 sftpuser1 和 sftpuser2,你可以為他們分別建立不同的配置檔案,然後在SSH服務的啟動選項中指定這些檔案。
為每個使用者建立配置檔案:
sudo cp /etc/ssh/sshd_config /home/sftpuser1/.ssh/sshd_config
sudo cp /etc/ssh/sshd_config /home/sftpuser2/.ssh/sshd_config
編輯每個使用者的配置檔案並根據需要進行自定義:
sudo vi /home/sftpuser1/.ssh/sshd_config
Match User sftpuser1
ChrootDirectory /sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
sudo vi /home/sftpuser2/.ssh/sshd_config
Match User sftpuser2
ChrootDirectory /sftp/other_directory
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
修改SSH服務的啟動選項,分別指定每個使用者的配置檔案:
ExecStart=/usr/sbin/sshd -f /home/sftpuser1/.ssh/sshd_config -f /home/sftpuser2/.ssh/sshd_config -D $OPTIONS
或者
/usr/sbin/sshd -f /home/sftpuser1/.ssh/sshd_config -f /home/sftpuser2/.ssh/sshd_config $OPTIONS
這樣配置後,每個使用者將使用自己的配置檔案,可以分別定製他們的SSH行為。