概述
安装vsftpd
1、yum安装
查看是否安装
rpm -qa | grep vsftpd
卸载vsftpd
yum remove vsftpd
yum安装
# 安装
yum install vsftpd
2、启动
# 开启
service vsftpd start
# 关闭
service vsftpd stop
# 重启
service vsftpd restart
# 开机启动
chkconfig vsftpd on
3、创建用户
# 创建用户 useradd -d 目录 用户名
useradd -d /usr/noobmantest noobmantest
# 设置用户密码
passwd noobmantest
修改用户信息
# 更改用户主目录 usermod -d 目录 用户名
usermod -d /user/newFold noobmantest
# 限定用户ftpuser不能telnet,只能ftp
usermod -s /sbin/nologin ftpuser
#当然如果想恢复为正常用户,可以执行以下命令:
usermod -s /sbin/bash ftpuser
4、修改配置文件
修改/etc/vsftpd/vsftpd.conf如下:
anonymous_enable=NO //不允许匿名用户访问,默认是允许。
chroot_local_user=NO
chroot_list_enable=YES
// 打开此注释
chroot_list_file=/etc/vsftpd/chroot_list
// 加入限制目录地址 (可不加)
local_root = /opt/FTP
创建禁止调整用户目录
touch chroot_list
配置说明
anonymous_enable=YES #设置是否允许匿名用户登录
local_enable=YES #设置是否允许本地用户登录
local_root=/home #设置本地用户的根目录
write_enable=YES #是否允许用户有写权限
local_umask=022 #设置本地用户创建文件时的umask值
anon_upload_enable=YES #设置是否允许匿名用户上传文件
anon_other_write_enable=YES #设置匿名用户是否有修改的权限
anon_world_readable_only=YES #当为YES时,文件的其他人必须有读的权限才允许匿名用户下载,单单所有人为ftp且有读权限是无法下载的,必须其他人也有读权限,才允许下载
download_enbale=YES #是否允许下载
chown_upload=YES #设置匿名用户上传文件后修改文件的所有者
chown_username=ftpuser #与上面选项连用,表示修改后的所有者为ftpuser
ascii_upload_enable=YES #设置是否允许使用ASCII模式上传文件
ascii_download_enable=YES #设置是否允许用ASCII模式下载文件
python访问ftp服务器拷贝文件到本地
# -*- coding: UTF8 -*-
import time
from ftplib import FTP
import os
# 日志保存地方
log_path = r'D:/file'
log_file = 'log.txt'
# 本地保存目录
remote_path = 'c'
local_path = ''
"""用于FTP连接"""
ftp_server = '' # ftp站点对应的IP地址
username = '' # 用户名
password = '' # 密码
if not os.path.exists(log_path):
os.makedirs(log_path)
# 连接
def ftp_connect():
ftp = FTP()
ftp.set_debuglevel(0) # 较高的级别方便排查问题
ftp.connect(ftp_server, 21)
ftp.login(username, password)
# ftp.encoding = 'utf-8'
return ftp
# 下载文件
def download_file(ftp, local_path, local_file, remote_path, remote_file):
if not os.path.exists(local_path):
os.makedirs(local_path)
fp = open(local_path + "/" + local_file, 'wb')
ftp.cwd(remote_path)
ftp.set_debuglevel(0) # 较高的级别方便排查问题
# ftp.retrbinary('RETR ' + remote_file, fp.write, 1024)
# ftp.retrbinary("RETR filename.txt",file_handel,bufsize) #下载FTP文件
ftp.retrbinary('RETR {0}'.format(remote_file), fp.write, 1024)
# 判断本地是否已经存在
def is_local_exist(ftp, remote_path, local_path, file_name):
# 判断是否存在
if not os.path.exists(local_path):
os.makedirs(local_path)
files = os.listdir(local_path)
if file_name in files:
cur_path = local_path + "/" + file_name
if os.path.isdir(cur_path):
# print(cur_path + " it's a directory")
return False
elif os.path.isfile(cur_path):
# print(cur_path + " it's a normal file")
# 如果文件大小也一样则认为是同一个文件,否则不是
if os.stat(cur_path).st_size == ftp.size(remote_path + "/" + file_name):
return True
else:
return False
else:
log("错误访问")
return False
else:
return False
# 递归下载
def download_dir(ftp, remote_path, local_path):
ftp.cwd(remote_path)
nlst_test = ftp.nlst()
dirs = []
ftp.dir(".", dirs.append)
transcodeUTF8(dirs=nlst_test)
transcodeUTF8(dirs=dirs)
for i in range(len(dirs)):
try:
# 区分文件和文件夹
if("drwxr-xr-x" in dirs[i]):
log("扫描目录:" + remote_path + "/" + nlst_test[i])
# print("扫描目录:" + nlst_test[i])
download_dir(ftp, remote_path=remote_path + "/" +
nlst_test[i], local_path=local_path+'/' + nlst_test[i])
else:
# 如果本地不存在则下载
if not is_local_exist(ftp=ftp, remote_path=remote_path, local_path=local_path, file_name=nlst_test[i]):
log("文件:" + remote_path + "/" +
nlst_test[i] + '下载到' + local_path)
# print("文件:" + nlst_test[i] + '下载到' + local_path)
download_file(ftp=ftp, local_path=local_path,
local_file=nlst_test[i], remote_path=remote_path, remote_file=nlst_test[i])
except Exception as e:
log(str(e))
log('文件下载失败,文件名:')
log(dirs[i])
continue
# 日志工具
def log(log_content):
print(log_content)
with open(log_path + "/" + log_file, 'a') as f:
f.write(
'n' + time.strftime("%Y/%m/%d %H:%M:%S") + str(log_content))
# latin1转uft8,解决读文件名问题
def transcodeUTF8(dirs):
for i in range(len(dirs)):
try:
dirs[i] = dirs[i].encode('latin1').decode('utf-8')
except Exception as e:
# print(e)
log(str(e))
log('文件名转码出错')
# log(dirs[i])
if __name__ == '__main__':
log("程序启动!")
ftp = ftp_connect()
download_dir(ftp=ftp, remote_path=remote_path,
local_path=local_path)
ftp.close
最后
以上就是聪明羽毛为你收集整理的linux安装vsftpd和配置安装vsftpd的全部内容,希望文章能够帮你解决linux安装vsftpd和配置安装vsftpd所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复