公司某应用系统与合作伙伴对接时,对方需要使用应用程序通过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 image 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