基于Linux搭建SFTP&FTP服务器及相关常用工具、脚本
2024-11-21 22:45:34 0 举报
AI智能生成
基于Linux搭建SFTP&FTP服务器及相关常用工具、脚本
作者其他创作
大纲/内容
搭建SFTP服务器
1、创建用户。例如gongshang,并禁止ssh登录,不创建家目录
useradd -s /sbin/nologin -M gongshang
2、设置sftp账号的密码
passwd gongshang
3、创建sftp根目录,所有sftp用户都在这个目录下活动
mkdir -p /sftp/sftpfile
4、设置目录权限此案,通常目录用root新建后默认就是设置好的
5、创建用户gongshang的根目录,目录名为用户名;
mkdir gongshang
PS:这里的目录名一定是跟用户名一致,不然会连接不上SFTP服务器。
6、新建sftp组并设置gongshang账号目录的权限
groupadd sftp
chown root:sftp /sftp/username
7、将SFTP用户加到SFTP组中;PS:这一步是为了限制SFTP账号的访问目录
usermod -a -G sftp username
8,修改SFTP配置文件
将访问端口从默认的22改成2222,此操作需要重启ssh服务。
vim /etc/ssh/sshd_config
新增如下配置:
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目录,进到目录中新建文件
touch authorized_keys
修改文件权限
chmod 600 authorized_keys
下载私钥id_rsa
sz id_rsa
将公钥写入到authorized_keys中
cat id_rsa.pub > authorized_keys
启用允许公钥访问
重启ssh服务
systemctl restart sshd
如果是sftp账号想要免密登录 就是将公钥放到对应sftp目录的根路径下 新建.ssh目录 然后新建authorized_keys并将公钥放进去即可
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chown $user:$user -R /home/$user
11、想要实现限制SFTP账号只能密钥登录且只能访问指定目录的需求可以通过挂载目录实现
mount --bind /data/sfsftpuser /sftp/sftpdata/sfsftpuser/data
搭建FTP服务器
1、安装vsftpd
yum install -y vsftpd
2、新增FTP用户及设置密码并禁止用户通过ssh登录
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传递数据的最大端口
4、将这一行注释掉,否则可能会提示530登录失败
vim /etc/pam.d/vsftpd
5、配置ftp账号的访问路径
配置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
配置证书后链接效果图
Centos上基于VSFTPD部署FTP服务
vsftpd的三种认证模式
FTP两种工作模式:主动模式: FTP服务器主动向客户端发起连接请求; FTP服务器等待客户端发起连接请求(默认模式)
1. 匿名开放模式:
它是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器;
2. 本地用户模式
它是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是若被恶意用户破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制服务器;
3. 虚拟用户模式
它是三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出的用户进行口令验证的账户信息,而这些账户信息在服务器系统上并不存在,仅供FTP服务器进行认证使用。
更换yum源,关闭防火墙、安装几个常用工具
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y wget vim lrzsz net-tools telnet
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y wget vim lrzsz net-tools telnet
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
部署 FTP服务
#安装vsftpd,pam,db4
yum install -y vsftpd pam pam-* libdb-utils
#配置vsftpd的服务和开机自启动
systemctl start vsftpd
systemctl enable vsftpd
systemctl is-enabled vsftpd
yum install -y vsftpd pam pam-* libdb-utils
#配置vsftpd的服务和开机自启动
systemctl start vsftpd
systemctl enable vsftpd
systemctl is-enabled vsftpd
创建用户和用户目录
创建FTP服务的存储目录
mkdir -p /var/ftp/admin
mkdir -p /var/ftp/admin/adminfolder1
mkdir -p /var/ftp/admin/adminfolder2
mkdir -p /var/ftp/design
mkdir -p /var/ftp/design/designfolder1
mkdir -p /var/ftp/design/designfolder2
mkdir -p /var/ftp/develop
mkdir -p /var/ftp/develop/developfolder1
mkdir -p /var/ftp/develop/developfolder2
mkdir -p /var/ftp/public
mkdir -p /var/ftp/public/publicfolder1
mkdir -p /var/ftp/public/publicfolder2
chown -R ftp:ftp /var/ftp
chmod -R 755 /var/ftp
chmod -R 777 /var/ftp/admin/adminfolder1
chmod -R 777 /var/ftp/admin/adminfolder2
chmod -R 777 /var/ftp/design/designfolder1
chmod -R 777 /var/ftp/design/designfolder2
chmod -R 777 /var/ftp/develop/developfolder1
chmod -R 777 /var/ftp/develop/developfolder2
chmod -R 777 /var/ftp/public/publicfolder1
chmod -R 777 /var/ftp/public/publicfolder2
ls -l /var/ftp/
mkdir -p /var/ftp/admin/adminfolder1
mkdir -p /var/ftp/admin/adminfolder2
mkdir -p /var/ftp/design
mkdir -p /var/ftp/design/designfolder1
mkdir -p /var/ftp/design/designfolder2
mkdir -p /var/ftp/develop
mkdir -p /var/ftp/develop/developfolder1
mkdir -p /var/ftp/develop/developfolder2
mkdir -p /var/ftp/public
mkdir -p /var/ftp/public/publicfolder1
mkdir -p /var/ftp/public/publicfolder2
chown -R ftp:ftp /var/ftp
chmod -R 755 /var/ftp
chmod -R 777 /var/ftp/admin/adminfolder1
chmod -R 777 /var/ftp/admin/adminfolder2
chmod -R 777 /var/ftp/design/designfolder1
chmod -R 777 /var/ftp/design/designfolder2
chmod -R 777 /var/ftp/develop/developfolder1
chmod -R 777 /var/ftp/develop/developfolder2
chmod -R 777 /var/ftp/public/publicfolder1
chmod -R 777 /var/ftp/public/publicfolder2
ls -l /var/ftp/
配置虚拟账号系统
cat > /etc/vsftpd/vuser_passwd.conf << EOF
admin
adminpwd
design
designpwd
develop
developpwd
public
publicpwd
EOF
admin
adminpwd
design
designpwd
develop
developpwd
public
publicpwd
EOF
将文本文件的帐号及密码编译为db4的数据库文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.conf /etc/vsftpd/vuser_passwd.db
配置vsftpd的pam,在文件中增加auth和account配置
sed -ir 's/^/#/g' /etc/pam.d/vsftpd
echo -n '
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
' >> /etc/pam.d/vsftpd
echo -n '
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
' >> /etc/pam.d/vsftpd
创建用于FTP虚拟账号服务的操作系统用户,并禁止该用户登陆操作系统
userdel -rf vsftpd
useradd -g ftp -d /home/vsftpd -s /sbin/nologin vsftpd
useradd -g ftp -d /home/vsftpd -s /sbin/nologin vsftpd
vsftpd 配置文件配置
对vsftpd的配置文件进行备份
mv -b /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
配置vsftpd的配置文件
cat > /etc/vsftpd/vsftpd.conf <<EOF
#不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问
local_enable=YES
#允许写操作
write_enable=YES
#创建或上传后文件的权限掩码
local_umask=022
#禁止匿名用户上传
anon_upload_enable=NO
#禁止匿名用户创建目录
anon_mkdir_write_enable=NO
#进入目录时可以显示一些设定的信息,可以通过message_file=.message来设置
dirmessage_enable=YES
#开启日志
xferlog_enable=YES
#主动连接的端口号
connect_from_port_20=YES
#设定禁止上传文件更改宿主
chown_uploads=NO
#日志路径,需要对日志文件授权chown vsftpd.vsftpd /var/log/vsftpd.log
xferlog_file=/var/log/xferlog
#格式化日志
xferlog_std_format=YES
#禁止vsftpd账号登陆,因此写vsftpd或系统内nobody
nopriv_user=vsftpd
#设定支持异步传输功能
async_abor_enable=YES
#设定支持ASCII模式的上传
ascii_upload_enable=YES
#设定支持ASCII模式的上传
ascii_download_enable=YES
#登陆欢迎语
ftpd_banner=Welcome to Linux Teach FTP service.
#限定用户在个人目录内访问。
chroot_local_user=YES
chroot_list_enable=YES
#限定在个人目录内访问的用户信息列表
chroot_list_file=/etc/vsftpd/chroot_list
#以standalone方式启动
listen=YES
#/etc/pam.d/下的vsftpd文件
pam_service_name=vsftpd
#在/etc/vsftpd/user_list中的用户将不能使用FTP
userlist_enable=YES
#启用虚拟用户功能
guest_enable=YES
#虚拟用户权限所对应的宿主用户,宿主用户为linux操作系统用户
guest_username=vsftpd
#虚拟用户的vsftpd配置文件存放路径。
virtual_use_local_privs=YES
#vsftpd_config是目录,里面存放的文件名和虚拟用户名必须完全一致。
user_config_dir=/etc/vsftpd/vuser_conf
EOF
#不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问
local_enable=YES
#允许写操作
write_enable=YES
#创建或上传后文件的权限掩码
local_umask=022
#禁止匿名用户上传
anon_upload_enable=NO
#禁止匿名用户创建目录
anon_mkdir_write_enable=NO
#进入目录时可以显示一些设定的信息,可以通过message_file=.message来设置
dirmessage_enable=YES
#开启日志
xferlog_enable=YES
#主动连接的端口号
connect_from_port_20=YES
#设定禁止上传文件更改宿主
chown_uploads=NO
#日志路径,需要对日志文件授权chown vsftpd.vsftpd /var/log/vsftpd.log
xferlog_file=/var/log/xferlog
#格式化日志
xferlog_std_format=YES
#禁止vsftpd账号登陆,因此写vsftpd或系统内nobody
nopriv_user=vsftpd
#设定支持异步传输功能
async_abor_enable=YES
#设定支持ASCII模式的上传
ascii_upload_enable=YES
#设定支持ASCII模式的上传
ascii_download_enable=YES
#登陆欢迎语
ftpd_banner=Welcome to Linux Teach FTP service.
#限定用户在个人目录内访问。
chroot_local_user=YES
chroot_list_enable=YES
#限定在个人目录内访问的用户信息列表
chroot_list_file=/etc/vsftpd/chroot_list
#以standalone方式启动
listen=YES
#/etc/pam.d/下的vsftpd文件
pam_service_name=vsftpd
#在/etc/vsftpd/user_list中的用户将不能使用FTP
userlist_enable=YES
#启用虚拟用户功能
guest_enable=YES
#虚拟用户权限所对应的宿主用户,宿主用户为linux操作系统用户
guest_username=vsftpd
#虚拟用户的vsftpd配置文件存放路径。
virtual_use_local_privs=YES
#vsftpd_config是目录,里面存放的文件名和虚拟用户名必须完全一致。
user_config_dir=/etc/vsftpd/vuser_conf
EOF
创建chroot_list文件并写入文件内容
rm -rf /etc/vsftpd/chroot_list
touch /etc/vsftpd/chroot_list
echo vsftpd > /etc/vsftpd/chroot_list 作者:棒棒堂智能运维 https://www.bilibili.com/read/cv27280615/ 出处:bilibili
创建虚拟用户的配置文件存放的路经
rm -rf /etc/vsftpd/vuser_conf
mkdir -p /etc/vsftpd/vuser_conf
cd /etc/vsftpd/vuser_conf/
mkdir -p /etc/vsftpd/vuser_conf
cd /etc/vsftpd/vuser_conf/
为admin用户创建vsftpd的配置文件
cat > admin << EOF
local_root=/var/ftp/admin
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
local_root=/var/ftp/admin
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
为design用户创建vsftpd的配置文件
cat > design << EOF
local_root=/var/ftp/design
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
local_root=/var/ftp/design
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
为develop用户创建vsftpd的配置文件
cat > develop << EOF
local_root=/var/ftp/develop
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
local_root=/var/ftp/develop
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
为public用户创建vsftpd的配置文件
cat > public << EOF
local_root=/var/ftp/public
write_enable=NO
anon_umask=022
anon_world_readable_only=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
EOF
local_root=/var/ftp/public
write_enable=NO
anon_umask=022
anon_world_readable_only=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
EOF
安全性配置:SELinux Firewalld
systemctl is-enabled firewalld
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
firewall-cmd --zone=public --list-all
sestatus
setsebool -P ftpd_anon_write off
setsebool -P ftpd_full_access on
getsebool -a | grep ftp
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
firewall-cmd --zone=public --list-all
sestatus
setsebool -P ftpd_anon_write off
setsebool -P ftpd_full_access on
getsebool -a | grep ftp
验证服务状态
重新启动vsftpd服务
systemctl restart vsftpd
systemctl status vsftpd
systemctl status vsftpd
脚本一键部署
脚本内容
参考文档
https://www.bilibili.com/read/cv27280615/
通过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"
将同步下载的进程放到后台运行并将运行的结果输入到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 &
0 条评论
下一页