CentOS搭建SFTP
目標:實現不同用戶只能操作自己目錄
登錄服務器執行命令
ssh -V
查看openssh版本,版本必須大於4.8p1.創建sftp組:
groupadd sftp
創建用戶: 對於每個用戶都有自己的上傳和下載目錄,用戶之間目錄完全隔離
useradd -g sftp -s /bin/false channel2
passwd channel2
- sftp組的用戶的home目錄統一指定到
/ecasdata/sftp/
下,按用戶名區分,不同用戶分配不同目錄即可
mkdir -p /ecasdata/sftp/channel2/cf/
mkdir -p /ecasdata/sftp/channel2/batch/
- 配置sshd_config,文本編輯器打開 /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
- 找到如下這行,用井號符號註釋掉.
# Subsystem sftp /usr/libexec/openssh/sftp-server
- 在文件最後面添加如下幾行內容,然後保存.
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /ecasdata/sftp/%u (此處配置sftp組用戶的home目錄)
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
- 設定Chroot目錄權限
chown root:sftp /ecasdata/sftp/channel2/
chmod 755 /ecasdata/sftp/channel2/
- 給用戶設置權限
chown channel2:sftp /ecasdata/sftp/channel2/cf/
chown channel2:sftp /ecasdata/sftp/channel2/batch/
chmod 755 /ecasdata/sftp/channel2/cf/
chmod 755 /ecasdata/sftp/channel2/batch/
- 修改/etc/selinux/config,文本編輯器打開/etc/selinux/config
vi /etc/selinux/config
- 將文件中的SELINUX=enforcing 修改爲 SELINUX=disabled 然後保存
- 再執行命令:setenforce 0
- 重啓sshd服務:
service sshd restart
- 驗證sftp環境: sftp [email protected]
快速構建
以channel2爲例,創建目錄,分配目錄權限:
useradd -g sftp -s /bin/false channel2
passwd channel2
輸入密碼: channel2
確認密碼: channel2
mkdir -p /ecasdata/sftp/channel2/cf/
mkdir -p /ecasdata/sftp/channel2/batch/
usermod -d /ecasdata/sftp/channel2/ channel2 修改用戶家目錄
chown root:sftp /ecasdata/sftp/channel2/
chmod 755 /ecasdata/sftp/channel2/
chown channel2:sftp /ecasdata/sftp/channel2/cf/
chown channel2:sftp /ecasdata/sftp/channel2/batch/
chmod 755 /ecasdata/sftp/channel2/cf/
chmod 755 /ecasdata/sftp/channel2/batch/
驗證sftp環境: sftp [email protected]
搭建過程中可能遇到的問題
防火牆未關閉,執行命令: service iptables stop
目錄權限問題:
每個用戶一個目錄,注意目錄的層次必須是用戶名
用戶目錄(channel2)及其上級目錄設置 root:sftp ,權限755
用戶目錄下子目錄設置 channel2:sftp,權限755
ChrootDirectory設置的目錄權限及其所有的上級文件夾權限,屬主和屬組必須是root;
ChrootDirectory設置的目錄權限及其所有的上級文件夾權限,只有屬主能擁有寫權限,也就是說權限最大設置只能是755。
注意:由於權限是755,導致非root用戶都無法在目錄中寫入文件,所以需要在ChrootDirectory指定的目錄下建立子目錄,重新設置屬主和權限。
例如:
這個目錄所有者爲channel2,所有組爲sftp,所有者有寫入權限,而所有組無寫入權限
chown channel2:sftp /ecasdata/sftp/channel2/cf/
chmod 755 /ecasdata/sftp/channel2/cf/
sftp相關命令:
- 上傳和下載
sftp> get /var/www/fuyatao/index.php /home/fuyatao/
將從遠程主機的 /var/www/fuyatao/目錄下將 index.php 下載到本地 /home/fuyatao/目錄下。
sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/
把本地 /home/fuyatao/downloads/目錄下的 linuxgl.pdf文件上傳至遠程主機/var/www/fuyatao/ 目錄下
- 刪除文件或文件夾
mkdir 創建文件夾
rm 刪除文件
rmdir 刪除文件夾,但是隻能刪除空文件夾,因此要使用命令rm folder/* 把文件夾裏面的文件先清空, 再rmdir folder。而且還需要是folder裏面沒有子文件夾的情況。
- nginx配置轉發時
sftp -oPort=port username@IP passward
- 參考博客
http://blog.csdn.net/qin_weilong/article/details/69486104
http://blog.csdn.net/xinxin19881112/article/details/46831311
https://www.cnblogs.com/luyucheng/p/6094729.html
http://blog.csdn.net/s277955712/article/details/70172376