我现在有一个需求,要使用FTP图形工具,连接公司的Linux服务器,上传文件到指定的工作目录里,现在有一种简单的方式可以实现需求。
可以利用SFTP文件传输协议,它们基于SSH或SSL/TLS加密连接,这种协议,默认使用22端口(这个端口并不安全,需要修改成其它自定义端口,防止被扫描),它不需要单独安装FTP服务,只要服务器上启用了SSH服务,并且你有一个有效的系统用户账户,就可以使用SFTP协义进行文件传输。
现在我的需求如下:
1.我要给同事创建一个名为zw的账号
2.她连接到服务器后,需要将文件上传到 /data/jiemo/upload目录里,这时她只能在FTP软件上,看到upload目录,她无法访问其它系统目录,如:/root,/home,/etc等目录。
现在正式操作:
1.创建账号
创建一个只能用于ftp连接,而不能ssh登陆服务器的账号
adduser zw
passwd zw
然后出现提示:设置密码,并在确认一次密码
usermod -s /sbin/nologin zw #设置该账号不能用于ssh登陆
2.创建ftp目录
mkdir -p /data/jiemo/upload
其中 /data/jiemo 是给账号zw设置的根目录,当她通过FTP连接到服务器时,会看到/data/jiemo 下面拥有的子目录,但是它无法访问/data/jiemo 以外的其它目录。
3.设置目录权限
chown root:root /data/jiemo
chmod 755 /data/abc/zw
根据目录/data/jiemo 的属主必须是root,属组可以换成其它的,但是属主必须是root,/data和 jiemo这两个层级的权限必须是755,这是不能更改的权限,要记住。
然后给upload设置权限,upload的属主和属组,都分给zw账号
chown zw:zw /data/jiemo/upload
chmod 755 /data/jiemo/upload
4.配置SSH
这是最重要的一步,在文件的尾部添加代码
vi /etc/ssh/sshd_config
#添加下面这段代码
Match User zw
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /data/jiemo
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
主要是两个地方要设置
Match User zw # 填写账号名 每次只能填写一个账号名,不能添加多个
ChrootDirectory /data/jiemo # 设置根目录
重启ssh服务,让配置生效
systemctl restart sshd
当设置ChrootDirectory 后,通过SFTP连接服务器后,只会看到upload目录
如果需要给多个账号,设置不同的权限目录,就复制刚才的代码,进行多次添加。
5.关于安全方面的处理
在配置sftp账号上传文件后,日志/var/log/secure文件里,就可以看到各种扫描,有了很多非法攻击。需要修改一下端口号,将默认的22和2222端口去掉。
vi /etc/ssh/sshd_config
找到Port部分 删掉默认端口,改成新端口 12379
Port 12379
然后运行命令 systemctl restart sshd 重启ssh服务
连接ftp时,如果出现连接不上的问题时,也可以查看/var/log/secure 这个日志文件。