公司某應用系統與合作伙伴對接時,對方需要使用應用程序通過SFTP免輸入密碼到我公司服務器上傳下載文件。之前其他合作伙伴都是通地FTP交換文件的。
在網上查了些資料大部分基於CenterOS RedHat配置的SFTP,在昨天在SUSE 11.1上配置了下SFTP,特記錄備忘。
1.實現目標:
(1)SUSE 11.1環境下 SFTP通過RSA密鑰配對免密碼訪問
(2)限制SFTP用戶只在自己根目錄下訪問
2.SFTP 服務配置
sftp服務複用ssh服務,sftp的配置即修改/etc/ssh/sshd_config配置
【a】註釋下面這幾條
#Subsystem sftp /usr/lib64/ssh/sftp-server
下面這幾條一定要註釋要不然sshd啓不來,暫時不知道以下幾條是做什麼用的,註釋後沒任何異常
#This enables accepting locale enviroment variables LC_* LANG, see sshd_config(5).
#AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
#AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
#AcceptEnv LC_IDENTIFICATION LC_ALL
【b】添加下面這幾條
Subsystem sftp internal-sftp
Match group sftp #指定以下的行僅匹配sftp用戶組的用戶
ChrootDirectory %h #指定用戶驗證後用於chroot環境的路徑 %h是指用戶根目錄
ForceCommand internal-sftp #執行內部sftp,並忽略任何~/.ssh/rc文件中的命令
X11Forwarding no
AllowTcpForwarding no
【c】增加支持RSA密鑰認證
AuthorizedKeysFile .ssh/authorized_keys #此參數用於說明公鑰文件位置,指用戶根目錄.ssh文夾authorized_keys文件作爲SRA公鑰
PasswordAuthentication no #設置成no強制使用密鑰訪問,而不能用戶名及密碼;如果設置成yes表示兩種方式都可以訪問,一般建議用yes
至此,SFTP服務器端配置完成,然後重啓sshd服務
3.SFTP服務器上增加sftp用戶
【a】rman:/usr/sftp-dir # useradd -G sftp -d /usr/sftp-dir/test1 -s /sbin/nologin test1
//-s /sbin/nologin 禁止test1用戶登陸操作系統
【b】rman:/usr/sftp-dir # mkdir /usr/sftp-dir/test1 //用root用戶爲test1賬戶建目錄
檢查test1目錄權限,必須是root用戶755權限
rman:/usr/sftp-dir # ll
drwxr-xr-x 2 root root 4096 Oct 18 09:25 test1
rman:/usr/sftp-dir #
【c】在用戶目錄下建上傳下載目錄
rman:/usr/sftp-dir/test1 # mkdir upload
rman:/usr/sftp-dir/test1 # mkdir download
rman:/usr/sftp-dir/test1 # chown test1. upload/ //upload目錄屬主test1
rman:/usr/sftp-dir/test1 # ll
total 8
drwxr-xr-x 2 root root 4096 Oct 18 09:40 download //經過測試下載文件夾一定要755權限
drwxr-xr-x 2 test1 sftp 4096 Oct 18 09:40 upload
4.客戶端服務器製作SRA密鑰並上傳至目標服務器
【a】製作RSA證書
test-lvm:~/.ssh # ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): //免密碼認碼此處直接回車
Enter same passphrase again: //免密碼認碼此處直接回車
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
f2:25:e6:5a:3d:2c:4f:d2:19:bf:3c:46:52:15:4f:db root@test-lvm
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
| ...|
| .oo|
| . .E|
| . |
| . S o. |
| = *.+. |
| * Bo. |
| o = oo. |
| . ..o. |
+-----------------+
【b】將RSA公鑰(x.pub)上傳到目標服務器sftp用戶.ssh目錄下
test-lvm:~/.ssh # ls
id_rsa id_rsa.pub
test-lvm:~/.ssh # scp id_rsa.pub [email protected]:/usr/sftp-dir/test1/.ssh
【c】目標服務器.ssh目錄下修改RSA公鑰文件名
因當時在目標服務器sshd_config 指定證書名爲authorized_keys
AuthorizedKeysFile.ssh/authorized_keys
所以,需要將修改公鑰名
rman:/usr/sftp-dir/test1/.ssh # ls
id_rsa.pub
rman:/usr/sftp-dir/test1/.ssh # mv id_rsa.pub authorized_keys
rman:/usr/sftp-dir/test1/.ssh # ll
total 4
-rw-r--r-- 1 root root 395 Oct 18 10:23 authorized_keys
rman:/usr/sftp-dir/test1/.ssh #
至此,SFTP RSA公鑰配對完成
5.客戶端服務器測試
使用 sftp sftp-user@sftp-ip 登陸不需要輸入密碼即表示成功
test-lvm:~/.ssh # sftp [email protected]
Connecting to 172.22.2.228...
sftp> ls
download upload
sftp>
切換目錄失敗,只能在用戶根目錄下
sftp> cd /home
Couldn't canonicalise: No such file or directory
sftp>
6.需要注意的幾點
SUSE Linux 與其他的不同之處
【a】配置sshd_config時, 一定要註釋下面幾條,否則sshd有務啓不來
#This enables accepting locale enviroment variables LC_* LANG, see sshd_config(5).
#AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
#AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
#AcceptEnv LC_IDENTIFICATION LC_ALL
【b】配置下載文件夾的時候權限一定要如下示,否則使用root用戶放在download文件夾的文件,sftp用戶看不到,在suse 11.1 64bit 上反覆測試過,也許是一個bug
rman:/usr/sftp-dir/test1 # ll
total 8
drwxr-xr-x 2 root root 4096 Oct 18 09:40 download
drwxr-xr-x 2 test1 sftp 4096 Oct 18 09:40 upload