linux创建ftp指定目录命令行,Linux-命令行建立FTP_weixin_39972567的博客-程序员宅基地

技术标签: linux创建ftp指定目录命令行  

虽然有宝塔,有可道云,但是使用命令行建立的FTP还是必须要搞的,比较宝塔和可道云是别人的

FTP服务器简介:

各类的操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,即FTP(File Transfer Protocol)

FTP三类用户:

实体用户。Linux系统中的用户,即系统本机的用户。Linux一般不会针对实体用户进行限制,因此实体用户可以针对整个文件系统进行工作。但通常不希望他们通过FTP方式远程访问系统。

访客用户。只能采用FTP方式使用系统的用户,不能直接使用Shell登录系统,即虚拟用户,访问服务器时需要验证。大多数FTP用户是这类用户。

匿名用户。对于公共性质的服务器可以提供匿名用户访问,用户名:anonymous。但在使用匿名用户时,应对其进行尽可能多的限制,权限较低,如:同时连接的用户数量受限,访问的文件数目受限,不能上传文件,允许操作的指令较少,设置匿用户同时登入的最大联机数量等。

这次装vsftpd,后续会安装pureftpd

# 安装

yum -y install vsftpd

// 服务端

yum -y install ftp

// 客户端

// 如果找不到软件执行下

yum updata

// 如果不想全部更新就n就行,软件列表会更新的

// 会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。我们在新立得软件包管理器里看到的软件列表,都是通过update命令更新的。

# 启动

systemctl start vsftpd.service

// 设置启动

// start 启动 stop 停止 status 状态 restart 重新启动

systemctl enable vsftpd.service

// bisable 停止

// systeamctl = systemcontrol ?

# 测试

ftp 127.0.0.1

// 账号可用anonymous,密码为空

# 创建访客账号

// 账号为 techftp netftp admftp markftp

// 指定默认访问路径为/zyx/ftp/[账号名目录]

// setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组

// 简单来说 setsebool设置Policy[策略]的布尔值,以启用或停用某项Policy

// selinx = Security Enhanse[安全增强模式] Linux

// 关于SElinux会写一篇新的文章放在下方

// -P:直接将设置值写入配置文件,该设置数据将来会生效的。 这个解释太......

setseboll -P ftpd_full_access=1

// 设置允许用户上传下载

getsebool -a |grep ftp

// 查找布尔值中的ftp

ftpd_anon_write --> off

//不允许上传

ftpd_connect_db --> off

//不允许FTP连接数据库

ftpd_full_access --> off

//不允许用户上传下载

ftpd_use_cifs --> off

//不允许FTP使用Samba文件系统

ftpd_use_nfs --> off

//不允许FTP使用NFT文件系统

httpd_enable_ftp_server --> off

//不允许httpd 作为 FTP 服务器

# 防火墙:

firewall-amd --list-services

// 查看防火墙列表

firewall-cmd --permanent --zone=public --add-service=ftp

// 新建永久防火墙规则

firewall-cmd --reload

// 重新加载防火墙规则

# 建用户

useradd -g ftp -s /sbin/nologin ftp1

// 新建一个不能登陆的用户ftp1和组ftp

# 连接方法

ftp:[用户名]:[密码]@localhost // 有账号密码

ftp:[ip或域名] // 匿名

常用FTP命令如下表:

命令说明

?查询列出ftp命令

pwd显示远程主机上的当前工作目录

ls显示当前远程目录下的内容

cd切换远程目录

lcd切换本地工作目录

asc纯文本方式传输

bin二进制方式传输

get从远程服务器上download一个文件

put上传一个文件到远程服务器上

mget下载多个文件

mput上传多个文件

bye断开与服务器的连接

quit退出服务器

vsftpd.config配置文件介绍

option=value (选项=值)

需要注意在option=value之间不允许有空白符(空格等),每一个配置项在编译时都有一个默认的设置,可以在配置文件中修改。

注意:在vsftpd.conf里键值对之间不要有空格!!!!

路径:/etc/vsftpd/vsftpd.conf

ftpusers 存放不允许访问的用户

anonymous_enable=yes

// 修改匿名用户是否能登陆 修改后需要重新启动一下

systemctl restart vsftpd

// 重启服务

# 匿名权限上传设置

anon_upload_enable=YES

anon_mkdir_write_enable=YES

setsebool -P ftpd_full_access=1

setsebool -P ftpd_anon_write=1

// 文件权限不够的话 要么更改权限,要么更改所有者

chmod 777 /var/ftp

chown ftp:ftp /var/ftp

// 开放匿名上传权限很危险,慎用!!!

anon_other_write_enable=YES

// 可以新建、删除文件

anon_mkdir_write_enable=YES

// 设置是否允许匿名用户创建目录的同时可以在此目录中上传文件

local_enable=yes

// 设置本地账号是否能够登录

write_enable=yes

// 设置是否开放所有用户写的权限

local_umask=022

// 创建[文件夹文件]的umask掩码

dirmessage_enable=yes

// 打开目录时显示的信息 需要创建一个.message的隐藏文件

chown_uploads=YES

// 更改上传所有者

chown_username=[默认root]

// 更改后的用户名

// 问题: 对普通账户无用,只对匿名账户有效

// 问题: 仅上传文件修改拥有者,创建文件夹不可更改

# 因为登陆账号后可以直接访问根目录,所以要添加以下内容

chroot_local_user=YES

// ch=change 更改本地用户

chroot_list_enable=YES

// 更改根列表开启

// 从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

// 要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列项:

allow_writeable_chroot=yes

// 所有用户更改全部allow_writeable_changeroot = 允许可写更改根

dirmessage_enable=YES

// 如果文件夹包含.message文件,则访问时显示内容信息

chroot_list_file=/etc/vsftpd/chroot_list

// 更改根用户列表文件位置

vim /etc/vsftpd/chroot_list

// 指定用户做change root

anon_root=/tmp/test

// 更改匿名ftp主目录

userlist_enable=YES

userlist_file=/etc/vsftpd/user_list

// 如果 userlist_deny=no 那么只能用下面文件列表里登陆

userlist_deny=no

/etc/vsftpd/user_list

// 现在就算user_list里面有root账号也不能用,需要修改ftpusers文件才能使用root登陆,但是不建议使用

ftpd_banner=Welcome to ZYX FTP service.

// 欢迎信息

idle_session_timeout=[秒]

// The timeout, in seconds, which is the maximum time a remote client may

// spend between FTP commands. If the timeout triggers, the remote client is // kicked off.

// Default: 300(秒)

// 这个参数是指等待输入FTP指令的空闲时间(秒)。初次连上FTP服务后、或上一次FTP指令// 执行完成后,开始计时。相当于使用FTP客户端命令行工具时,出现输入提示符,等待用户输// 入的时间。

// 这个时间超时,客户端的(一个TCP,命令)连接会被断开。

data_connection_timeout=[秒]

// The timeout, in seconds, which is roughly the maximum time we permit data // transfers to stall for with no progress.

// If the timeout triggers, the remote client is kicked off.

// Default: 300(秒)

// 这个参数是指等待数据传输(上传/下载)的空闲时间(秒)。当FTP服务端每接收/或发送一// 次数据包(trans_chunk_size大小,默认值是8KB),就会复位一次这个定时器。相当于使用// FTP客户端命令行工具时,出现传输速率为0的持续时间。

// 这个时间超时,客户端的(两个TCP,命令与数据)连接都会被断开。

// 当 data_connection_timeout 定时器启动时,idle_session_timeout定时器会停止。即// 两个定时,同一时刻只有一个有效!

匿名用户设置

配置项描述可选值

anonymous_enable设置是否允许匿名登录yes|no

anon_upload_enable设置是否开放上传权限,允许匿名上传yes|no

anon_mkdir_write_enable设置是否允许匿名用户创建目录的同时可以在此目录中上传文件yes|no

anon_other_write_enable设置匿名用户是否有删除的权限yes|no

anon_world_readable_only若设置为yes,则匿名用户不仅可以上传和建立目录,而且可以删除和更改文件和目录yes|no

anon_root设置匿名用户登录后所在的目录默认值:/var/ftp

本地用户设置

配置项描述可选值

local_root设置本地用户登录后的目录默认值:/var/ftp

write_enable设置是否开放本地用户写的权限yes|no

local_enable设置本地账号是否能够登录。如果设置为yes,/etc/passwd内的账号都可以使用ftp服务登录系统,使用ftp服务上传下载文件资源yes|no

userlist_enable设置user_list文件是否生效yes|no

local_max_rate设置本地用户所能使用的最大传输速度,单位是B/s,设置为0表示不受速度限制0

服务相关设置

配置项描述可选值

connect_form_port_20启用FTP数据端口20的数据连接yes|no

listen_port设置FTP服务器监听客户端连接的端口默认值:21

listen设置独立的vsftpd服务器yes|no

dirmessage_enable设置是否显示目录信息。当切换目录时,显示目录下.message的内容yes|no

ftpd_banner设置登录欢迎信息

anon_max_rate匿名用户所能使用的最大传输速度,单位是B/s。设置为0表示不受速度限制0

max_clients表示服务器最多可以连接多少客户端。0表示不限制,具体的数字表示客户端最大的限制数目0

max_per_IP表示同一个IP的客户端最多连接数量2

accept_timeout表示连接服务器的超时时间,单位是秒

data_connection_timeout表示数据传输超时时间,单位是秒

idle_session_timeout表示多长时间对服务器没有任何操作后断开服务器连接,单位是秒

ascii_download_enable设置是否启用ASCII模式下载数据yes|no

ascii_upload_enable设置是否启用ASCII模式上传数据yes|no

主动与被动服务设置

FTP服务器的主动与被动服务是从FTP工作方式划分的。主动方式标记为PORT FTP,被动方式标记为PASV FTP。无论主动和被动,服务器首先用21端口接受客户端的连接。接下来传输数据才分主动和被动方式。

主动方式是服务器主动采用20端口发送数据给客户端。被动方式是客户端主动接受FTP服务器的数据,这样服务器变成了被动方式。被动方式传输数据使用的端口号通常是一个范围,这个范围使用如下配置:

passv_min_prot=65200

passv_max_prot=65400

同时,具体使用什么端口号是客户端提出的。为了保证客户端提出的端口号与服务器范围相适应,客户端在连接的同时要指定被动方式。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39972567/article/details/116876524

智能推荐

一重指针、二重指针做函数参数的深刻分析(虽然很基础,但要深刻理解)_ShenHang_的博客-程序员宅基地

一重指针做函数参数#include<iostream>using namespace std;void change(int *p){ *p = 20; p++; cout << p << endl;}int main() { int a = 10; change(&a); cout << &a <&lt...

java设置图片点击渐变透明,图片实现渐变/透明效果_weixin_39569753的博客-程序员宅基地

众所周知,图片等一些盒子都可以利用opacity属性来设置不透明度,但是前两天我朋友忽然给我一个截图,截图效果如下图中红框圈住的位置图片或者说摄像头采集的画面出现了渐变到透明,可以清楚的看到可以看到后面小哥的胳膊,然后问我如何实现这种效果,这下把我难住了(呵 天天给我出难题),我开始在个大论坛开始寻找解决方案;忽然在前天,日常逛论坛时看到一个文字投影的效果,而后忽然灵机一动就想,能不能变相的实现前...

java笔记_笑容温暖城寨的博客-程序员宅基地

安卓课的Java扩展笔记包类命名规范总结输出换行与不换行mian方法中的args参数Math类快捷输出语句static关键字定义无参方法定义带返回值方法包package com.eoe.basic.day01;//包名 在java当中用.表示windos中的/,一般格式:com.公司名.项目名.业务模块名称例如:com.sina.crm.user类命名规范总结1、java中可以有多个类2、java中可以有多个类,但是最多只有一个类的类名和文件名相同3、如果一个类被public修饰,那该类

一、网络游戏架构的前世今生(2)_王元恺David的博客-程序员宅基地

网络游戏架构演进史,优化游戏网络,自定义网络协议

在Chrome 浏览器上滚动截屏_ianly梁炎的博客-程序员宅基地_横向滚动截图

浏览器滚动截屏,截取整个页面 在Chrome 浏览器上滚动截屏,不需要插件和任何 app,利用 chrome 浏览器原生功能即可实现。打开 Chrome 浏览器,进入需要截图的网站页面打开开发者工具:在页面任何地方点击鼠标右键,在弹出菜单中选择「检查」选项。或者使用快捷键组合:option + command + i。打开命令行(command palette):command + s...

微信小程序 获取用户网络状态和设备的信息_东边的小山的博客-程序员宅基地

var app = getApp()Page({ data: { motto: 'Hello World', userInfo: {}, netWorkType: '', phoneType: '', phoneSystemType: '', }, //事件处理函数 bindViewTap: function() { wx.nav...

随便推点

大神博客地址_骏马传奇的博客-程序员宅基地

骏马金龙 http://www.cnblogs.com/f-ck-need-u/ 散尽浮华 http://www.cnblogs.com/kevingrace/ kris12 https://www.cnblogs.com/shengyang17/default.html?page=11 Edison Zhou https://www.cnblogs.com/...

圆排列问题_小张的java日记的博客-程序员宅基地_圆排列java

问题给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。解析圆排列问题的解空间是一棵排列树。按照回溯法搜索排列树的算法框架,设开始时a=[r1,r2,……rn]是所给的n个元的半径,则相应的排列树由a[1:n]的所有排列构成。 首先计算圆在当前圆排列中的横坐标,由x^2 = sqrt((r1+r2)^2-(r1-r2)^2)推导出x = 2 * sqrt(r1 * r2)。然后计算当前圆排列的长度。变量lenmin记录当前最小圆排列长度...

获取颜色编码_Java_Hello_World.的博客-程序员宅基地

1,使用截屏功能2,正在截屏的时候按下shit,然后看到一个#c92027(red/红色)3,按下字母C4,到需要颜色代码的地方Ctrl+V

python 函数进阶_weixin_30951231的博客-程序员宅基地

三元运算a = 1b = 5c = a if a>b else bprint(c)构成变量 = 条件返回True的结果 if 条件 else 条件返回False的结果必须要有返回的结果必须要有if和else只能是简单的情况def func(a,b): return a if a>b else bc = func(3,5)...

rqt_graph提示b‘Format: “dot“ not recognized. Use one of:\n‘_qq_46145354的博客-程序员宅基地

在终端运行roscore,分别运行rosrun turtlesim turtle和rosrun turtlesim turtle_teleop_key,再输入rqt_graph,提示如下错误"dot" with args ['-Tdot', '/tmp/tmp145cvdav'] returned code: 1stdout, stderr:b''b'Format: "dot" not recognized. Use one of:\n'PluginHandlerDirect._resto.

form标签_ailihx的博客-程序员宅基地

这个标签会生成HTML form标签,同时为form内部所包含的标签提供一个绑定路径(binding path)。 它把命令对象(command object)存在PageContext中,这样form内部的标签 就可以使用这个对象了。标签库中的其他标签都声明在form标签的内部。 让我们假设有一个叫User的领域对象,它是一个JavaBean,有着诸如 firstName和lastName这