基于Linux搭建SFTP&FTP服务器及相关常用工具、脚本
2023-10-18 14:32:24 0 举报
基于Linux搭建SFTP&FTP服务器及相关常用工具、脚本
作者其他创作
大纲/内容
搭建SFTP服务器
1、创建用户。例如gongshang,并禁止ssh登录,不创建家目录
useradd -s /sbin/nologin -M gongshang
useradd -s /sbin/nologin -M gongshang
2、设置sftp账号的密码
passwd gongshang
passwd gongshang
3、创建sftp根目录,所有sftp用户都在这个目录下活动
mkdir -p /sftp/sftpfile
mkdir -p /sftp/sftpfile
4、设置目录权限此案,通常目录用root新建后默认就是设置好的
5、创建用户gongshang的根目录,目录名为用户名;
mkdir gongshang
PS:这里的目录名一定是跟用户名一致,不然会连接不上SFTP服务器。
mkdir gongshang
PS:这里的目录名一定是跟用户名一致,不然会连接不上SFTP服务器。
6、新建sftp组并设置gongshang账号目录的权限
groupadd sftp
chown root:sftp /sftp/username
groupadd sftp
chown root:sftp /sftp/username
7、将SFTP用户加到SFTP组中;PS:这一步是为了限制SFTP账号的访问目录
usermod -a -G sftp username
usermod -a -G sftp username
8,修改SFTP配置文件
将访问端口从默认的22改成2222,此操作需要重启ssh服务。
vim /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
新增如下配置:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /sftp/sftpdata/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
红色框中的注释掉
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /sftp/sftpdata/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
红色框中的注释掉
9、关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
10、SFTP账号设置免密登录
切换至需要配置免密登录的账号的家目录下
然后运行生成密钥
ssh-keygen -t rsa
一直回车
然后运行生成密钥
ssh-keygen -t rsa
一直回车
生成.ssh目录,进到目录中新建文件
touch authorized_keys
touch authorized_keys
修改文件权限
chmod 600 authorized_keys
chmod 600 authorized_keys
下载私钥id_rsa
sz id_rsa
sz id_rsa
将公钥写入到authorized_keys中
cat id_rsa.pub > authorized_keys
cat id_rsa.pub > authorized_keys
启用允许公钥访问
重启ssh服务
systemctl restart sshd
systemctl restart sshd
如果是sftp账号想要免密登录 就是将公钥放到对应sftp目录的根路径下 新建.ssh目录 然后新建authorized_keys并将公钥放进去即可
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chown $user:$user -R /home/$user
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chown $user:$user -R /home/$user
11、想要实现限制SFTP账号只能密钥登录且只能访问指定目录的需求可以通过挂载目录实现
mount --bind /data/sfsftpuser /sftp/sftpdata/sfsftpuser/data
mount --bind /data/sfsftpuser /sftp/sftpdata/sfsftpuser/data
搭建FTP服务器
1、安装vsftpd
yum install -y vsftpd
yum install -y vsftpd
2、新增FTP用户及设置密码并禁止用户通过ssh登录
useradd ftpuser
passwd ftpuser
usermod -s /sbin/nologin ftpuser
useradd ftpuser
passwd ftpuser
usermod -s /sbin/nologin ftpuser
3、修改配置文件/etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
配置文件最后再加上:
chroot_local_user=YES
local_root=/data
allow_writeable_chroot=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
user_config_dir=/etc/vsftpd/userconfig
pasv_min_port=60000 //修改vsftpd传递数据的最小端口
pasv_max_port=60100 //修改vsftpd传递数据的最大端口
chroot_local_user=YES
local_root=/data
allow_writeable_chroot=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
user_config_dir=/etc/vsftpd/userconfig
pasv_min_port=60000 //修改vsftpd传递数据的最小端口
pasv_max_port=60100 //修改vsftpd传递数据的最大端口
4、将这一行注释掉,否则可能会提示530登录失败
vim /etc/pam.d/vsftpd
vim /etc/pam.d/vsftpd
5、配置ftp账号的访问路径
配置FTP账号指定的访问目录
local_root=/app/ftpdas
新建ftp账号的访问目录
mkdir /app/ftpdas
配置FTP账号指定的访问目录
local_root=/app/ftpdas
新建ftp账号的访问目录
mkdir /app/ftpdas
6、在user_list文件中加上新增的ftp账号
7、启动ftp服务
8、修改FTP指定端口是需要修改配置文件:
vim /etc/services
vim /etc/vsftpd/vsftpd.conf
9、PS:如果是需要对公网公开,一般需要加白名单,除了需要放开FTP指定的端口之外还需要将最小到最大的限制端口放开,例如这边示例中的TCP 60000-60100端口。
10、配置SSL证书
vim vsftpd.conf
下面的配置加到文件最后面即可
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
PS:证书生成命令:
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
下面的配置加到文件最后面即可
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
PS:证书生成命令:
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
配置证书后链接效果图
通过FTP服务器自动备份数据---shell脚本
将FTP服务器上的数据下载至本地并下载完删除文件:
lftp -e "set ssl:verify-certificate false; open -u username,password ftpserveraddress; mirror --Remove-source-files / /data/testtdata; bye"
mirror --Remove-source-files:表示从对端下载文件后将对端的文件删除掉,这里是下载一个文件删除一个问题
ps:这里需要注意密码的格式,尽量不要使用有特殊字符作为密码,不然会出现认证失败的问题,例如下图:
这里将密码改成不包含特殊字符的即可正常连接
这里将密码改成不包含特殊字符的即可正常连接
如果需要在上述基础上海需要多线程下载,可以加上以下参数
--parallel=n;n是要下载的线程数,建议线程数小于等于10,例如:
lftp -e "set ssl:verify-certificate false; open -p 811 -u username,password ftpserveraddress; mirror --parallel=10 --Remove-source-files / /data/testtdata; bye"
--parallel=n;n是要下载的线程数,建议线程数小于等于10,例如:
lftp -e "set ssl:verify-certificate false; open -p 811 -u username,password ftpserveraddress; mirror --parallel=10 --Remove-source-files / /data/testtdata; bye"
将同步下载的进程放到后台运行并将运行的结果输入到ftpdownload1018.txt文件中
nohup lftp -e "set ssl:verify-certificate false; open -u username,password ftp.server.com; mirror --parallel=10 --Remove-source-files / /data/ftpdata1018; bye" > ftpdownload1018.txt 2>&1 &
nohup lftp -e "set ssl:verify-certificate false; open -u username,password ftp.server.com; mirror --parallel=10 --Remove-source-files / /data/ftpdata1018; bye" > ftpdownload1018.txt 2>&1 &
0 条评论
下一页