在公司,經常會用到sftp服務,比如兩個公司對接生產項目,其中一方,要在sftp上上傳pdf文件,另一方公司要在sftp服務器上用nginx代理直接下載pdf文件。下面就說說我在實際中應用到的sftp服務+nginx代理的配置方法:
一.環境:
192.168.16.12 centos6.5
在Centos 6.5環境使用系統自帶的internal-sftp搭建SFTP服務器。
二.查看版本
查看openssh的版本,使用ssh -V 命令來查看openssh的版本,版本必須大於4.8p1,低於的這個版本需要升級
[root@master ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
[root@master sftpd]# /etc/init.d/iptables stop
[root@master sftpd]# setenforce 0
setenforce: SELinux is disabled
1.創建三個用戶:test1 test2 test3
創建用戶的家目錄:/data/sftpd/test1 /data/sftpd/test2 /data/sftpd/test3
創建三個用戶組,分別與用戶對應:sftp-test1 sftp-test2 sftp-test3
1.1創建用戶組
[root@localhost ~]# groupadd sftp-test1
[root@localhost ~]# groupadd sftp-test2
[root@localhost ~]# groupadd sftp-tes3
1.2 創建用戶的家目錄
[root@localhost ~]# mkdir -pv /data/sftpd/test1
mkdir: 已創建目錄 "/data"
mkdir: 已創建目錄 "/data/sftpd"
mkdir: 已創建目錄 "/data/sftpd/test1"
[root@localhost ~]# mkdir -pv /data/sftpd/test2
mkdir: 已創建目錄 "/data/sftpd/test2"
[root@localhost ~]# mkdir -pv /data/sftpd/test3
mkdir: 已創建目錄 "/data/sftpd/test3"
[root@MQ2 ]# pwd
/data/sftpd/test3/ //此處的家目錄名可以隨便創建,我公司要求項目平台與用戶名相同。用戶進來就可以看到他的家目錄
1.3 創建用戶,並指定到相應的用戶組里
[root@localhost ~]# useradd -g sftp-test1 -s /sbin/nologin -d /data/sftpd/test1/ test1
useradd:警告:此主目錄已經存在。
不從 skel 目錄里向其中復制任何文件。
[root@localhost ~]# useradd -g sftp-test2 -s /sbin/nologin -d /data/sftpd/test2/ test2
useradd:警告:此主目錄已經存在。
不從 skel 目錄里向其中復制任何文件。
[root@localhost ~]# useradd -g sftp-test3 /sbin/nologin -d /data/sftpd/test3/ test3
useradd:警告:此主目錄已經存在。
不從 skel 目錄里向其中復制任何文件。
2.設置用戶密碼 670e3c2cc r690bk79j uxzer73z9
[root@localhost ~]# passwd test1
更改用戶 test1 的密碼 。
新的 密碼: 670e3c2cc
重新輸入新的 密碼: 670e3c2cc
passwd: 所有的身份驗證令牌已經成功更新。
[root@localhost ~]# passwd test2
更改用戶tset2 的密碼 。
新的 密碼: r690bk79j
重新輸入新的 密碼:r690bk79j3
passwd: 所有的身份驗證令牌已經成功更新。
[root@localhost ~]# passwd test3
更改用戶test3 的密碼 。
新的 密碼: uxzer73z9
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經成功更新。
3.配置sshd_config 配置文件
[root@localhost ~]# cd /etc/ssh/
[root@localhost ssh]# cp sshd_config sshd_config.bak
[root@localhost ssh]# vim sshd_config
132 #Subsystem sftp /usr/libexec/openssh/sftp-server
133 Subsystem sftp internal-sftp
134 Match Group test1,test3,test2 //此處是用戶組的家目錄
135 ChrootDirectory %h //%h 代表的是用戶的目錄 %u代表的是用戶
136 ForceCommand internal-sftp
137 AllowTcpForwarding no
138 X11Forwarding no
4.設置Chroot 目錄權限
[root@localhost /data/sftpd/]# chown -R test1:sftp-test1 test1/ //要求test1的屬主和屬組分別是test1,sftp-test1。test2和test3同理,否則登陸不上
[root@localhost ~]# chmod 755 /data/sftpd/test1
[root@localhost ssh]# chown test2:sftp-test2 /data/sftpd/test2/
[root@localhost ~]# chmod 755 /data/sftpd/test2/
[root@localhost ssh]# chown test3:sftp-test3 /data/sftpd/test3/
[root@localhost ~]# chmod 755 /data/sftpd/test3/
5.建立SFTP用戶登入后可寫入的目錄
[root@localhost ssh]# cd /data/sftpd/
[root@localhost sftpd]# ls
test1 test2 test3
[root@localhost sftpd]# cd test1
[root@localhost sftpd]# mkdir xiaofeidai
[root@localhost sftpd]# ls
xiaofeidai
[root@localhost sftpd]# chmod o-x -R test1 //限制其他用戶訪問test1用戶的目錄。
6. test2,test3 用戶的家目錄依上操作,略。
7.重啟sshd服務
[root@localhost sftpd]# /etc/init.d/sshd restart
停止 sshd: [確定]
正在啟動 sshd: [確定]
8.驗證sftp服務,本地登錄sftp服務器
[root@localhost sftpd]# sftp test1@127.0.0.1
Connecting to 127.0.0.1...
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is 74:09:81:67:99:48:e0:0b:bf:a1:f0:0f:2d:74:db:14.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
shuojin@127.0.0.1's password: 670e3c2cc7
sftp> ls
xiaofeidai
注:如果ssh更改過登陸端口,采用:
sftp -oPort=XXX test1@127.0.0.1
9.windows 下采用sftp工具連接,略
二.采用nginx代理下載sftp里邊的pdf文件
1.搭建nignx--略
2.nginx配置:
35 server {
36 listen 80;
37 server_name localhost;
36 listen 80;
37 server_name localhost;
。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
51 location /test1/ {
52 root /data/sftpd;
52 root /data/sftpd;
3.test2 test3 nginx配置依上操作。
4.修改完nginx配置文件后,使用平滑重啟命令,重啟nginx:
[root@localhost ]# killall -s HUP nginx
5.瀏覽器驗證,下載pdf文件
http://192.168.16.12/test1/xiaofeidai/*.pdf
注:pdf文件的屬主與屬組必須和文件屬性一樣。目錄權限為755,文件權限為644,否則下載時報錯