CentOS上搭建SFTP

追极發表於2024-05-11

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的客戶端(如WinSCPFileZilla等)連線到伺服器。確保使用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行為。

相關文章