前言1:應用場景:對於數據量很大的交互,對接方不肯意經過接口方式對接式可採用ftp的方式數據交互。html
A——>上傳數據文件到sftp服務器linux
*:須要給A開設一個只用於sftp上傳的帳號,而且只能在指定目錄下活動。數據庫
B——>從sftp服務器上獲取數據文件服務器
*:也須要開設一個sftp帳號,權限設置視狀況而定。ssh
前言2:服務器版本爲Centos6.5, 採用系統自帶的internal-sftp, 限制用戶只能在本身的目錄下活動,這裏須要使用到chroot,openssh 4.8p1之後都支持chroot,我如今用的是CentOS 6.5,自帶的openssh已是5.3p1,足夠了。測試
一、 查看 openssh的版本,若是低於4.8p1,須要自行升級安裝ui
# ssh -Vspa
二、 建立sftp組.net
# groupadd sftprest
三、 建立一個sftp用戶,名爲guest
# useradd -g sftp -s /bin/false guest
*: /bin/false 表示不能經過ssh的方式登陸
四、設置密碼
# passwd guest
*:輸入兩次密碼,回車便可。也可經過此命令修改已有的帳號密碼。
五、建立用戶活動的根目錄
# mkdir -p /5108/sftp
# usermod -d /5108/sftp guest
六、配置sshd_config
# vi /etc/ssh/sshd_config
找到以下這行,並註釋掉
Subsystem sftp /usr/libexec/openssh/sftp-server
添加以下幾行:
Subsystem sftp internal-sftp # 指定使用sftp服務使用系統自帶的internal-sftp
Match Group sftp # 匹配sftp組的用戶,若是要匹配多個組,多個組之間用逗號分割
ChrootDirectory /5108/sftp/ # 用chroot將用戶的根目錄指定到 /5108/sftp/, 可設爲"/",表明根目錄。
ForceCommand internal-sftp # 指定sftp命令
AllowTcpForwarding no # 容許用戶能使用端口轉發
X11Forwarding no # 容許用戶能使用端口轉發
:wq保存並退出
七、 設定Chroot目錄權限
# chown root:sftp /5108/sftp
# chmod 755 /5108/sftp
*:權限必須爲755
八、 創建SFTP用戶登入後可寫入的目錄
照上面設置後,在重啓sshd服務後,用戶 guest 已經能夠登陸,但使用chroot指定根目錄後,根應該是沒法寫入的,因此要新建一個目錄供 guest 上傳文件。這個目錄全部者爲 guest,全部組爲sftp,全部者有寫入權限,而全部組無寫入權限
# mkdir /5108/sftp/ABH
# chown guest:sftp /5108/sftp/ABH
# chmod 755 /5108/sftp/ABH
*: 權限可設置爲777,表明組的全部用戶都擁有全部權限。
九、 修改/etc/selinux/config文件中的SELINUX="" 爲 disabled或者
# setenforce 0
十、 重啓sshd服務
# service sshd restart
測試ssh可否登陸:
ssh guest@127.0.0.1
測試sftp可否登陸:
sftp guest@127.0.0.1
到此,咱們已經把A的帳號創建好了,並已經設置了相應的權限。下面再配置B,也就是咱們系統下載文件的帳號。
# useradd -g sftp -s /bin/false consftp
# passwd consftp
設置帳號後,就能經過sftp的方式登陸了,再配置下路徑:
# usermod -d /5108/sftp/ABH consftp
參考資料:http://blog.sina.com.cn/s/blog_4fd50c3901018a0l.html
理解chroot:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
補充:
groupdel命令:刪除組
groupdel 命令用於刪除再也不須要的組,若是指定的組中包含用戶,則必須先刪除組裏面的用戶>之後,才能刪除組。
# sudo groupdel test
vipw :
-g, --group 編輯 group 數據庫
-h, --help 顯示此幫助信息並推出
-p, --passwd 編輯 passwd 數據庫
-q, --quiet 安靜模式
-R, --root CHROOT_DIR chroot 到的目錄
-s, --shadow 編輯 shadow 或 gshadow 數據庫
問題:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
這個問題的緣由是ChrootDirectory的權限問題,你設定的目錄必須是root用戶全部,不然就會出現問題。因此請確保sftp用戶根目錄的全部人是root, 權限是 750 或者 755
關鍵是ChrootDirectory /5108/sftp/%u 目錄的配置,可更改目錄爲"/"試試
後續:
第一次在設置第二個帳號的時候,重複建立了目錄,設置了權限,因此致使第一個帳號也鏈接不上。折騰了好久,在此記錄下,引覺得戒,之後配置方面的東西,必定要先看懂,瞭解流程。切記切記......