前言

在Linux系统中,FTP服务器软件有很多,都已经成熟,像vsftpd, wu-ftp, Pure-FTPd等。但这些软件安装配置起来都比较麻烦,搭建个人的FTP服务器,还是Proftpd比较简单。

目录

  1. Proftpd介绍
  2. Proftpd安装
  3. Proftpd配置文件
  4. Proftpd使用场景
  5. 客户端访问

1. Proftpd介绍

Proftpd是一款开放源码的FTP服务器软件,它是原来世界范围使用最广泛的wu-ftpd的改进版,它修正了wu-ftpd的许多缺陷,在许多方面进行了重大的改进,其中一个重要变化就是它学习了Apache 的配置方式,使proftpd的配置和管理更加简单易懂。

有两种运行方式,独立服务器与超级服务器的子服务器。无论从安全性和稳定性,还是可配置性来说都是非常好的选择。

官方网站:http://www.proftpd.org/

2. Proftpd安装

系统环境

  • Linux
    Ubuntu 12.04.2 LTS 64bit server

安装Proftpd

~ sudo apt-get install proftpd

<h

选择“standalone”

查看proftpd状态

~ sudo /etc/init.d/proftpd status

ProFTPD is started in standalone mode, currently running.

~ ps -aux|grep ftp

proftpd   6674  0.0  0.1  94648 
2092 ?        Ss  
16:05   0:00 proftpd: (accepting connections)

#启动端口21

~ netstat -nltp|grep 21

tcp6      
0      0
:::21                  
:::*                   
LISTEN      -

3. Proftpd配置文件

配置文件:/etc/proftpd/proftpd.conf

#配置服务器名

ServerName           
""blog.fens.me FTP Server"

#设置服务器运行模式,独立服务,或者被监管

ServerType           
standalone

#设置为默认服务器

DefaultServer           
on

#设置服务器进程运行使用的用户

User               
proftpd

#设置服务器进程运行使用的组

Group                   
nogroup

#设置关闭IPv6支持

UseIPv6                   
off

#设置服务器接受请求的端口

Port               
21

#设置被动模式使用的端口范围

PassivePorts            
60000 65535

#设置用户上传文件的权限掩码

Umask               
022

#设置用户被chroot锁定到的各自的Home目录

DefaultRoot           
/ftp

#关闭欢迎信息显示

DeferWelcome           
off

#如果显示欢迎信息,则指定显示的文件

DisplayLogin           
welcome.msg

#指定切换文件夹时,显示的欢迎信息

DisplayChdir           
.message

#设置日志

SystemLog                      
/var/log/proftp.log

TransferLog                    
/var/log/proftp-transfer.log

#限定操作

<Limit SITE_CHMOD>

DenyAll

</Limit>

#设置匿名用户资源

<Anonymous "/ftp/c">

...

</Anonymous>

#配置存储目录权限

<Directory "/ftp/a/" >

<Limit ALL>

AllowUser x

AllowUser a1

DenyAll

</Limit>

<Limit CWD READ RETR DIRS>

AllowAll

</Limit>

</Directory>

Limit权限说明:

  • CWD
    : Change Working Directory 进入该目录
  • MKD
    : Make Directory 创建目录
  • RNFR
    : Rename from 更名
  • DELE
    : Delete 删除文件
  • RMD
    : Remove Directory 删除目录
  • READ
    : 可读
  • WRITE: 可写
  • STOR
    : 可上传
  • RETR
    : 可下载
  • DIRS
    : 允许列出目录
  • LOGIN: 允许登录
  • ALL
    : 全部

4. Proftpd使用场景

场景描述:某公司建立统一的FTP服务器(/ftp),公司有a部门(/ftp/a),b两个部门(/ftp/b),有独立的存储空间。

a1为a部门经理有对(/ftp/a)操作权限,a2为a部门员工只能读文件。

b1为b部门经理有对(/ftp/b)操作权限,b2为b部门员工只能读文件。

x为公司总经理,有对(/ftp)操作权限。

操作权限:

/ftp    -- x所有操作

/ftp/a  -- a1所有操作, a2只读

/ftp/b  -- b1所有操作, b2只读

命令操作:

# 创建FTP目录

sudo mkdir /ftp

sudo mkdir /ftp/a

sudo mkdir /ftp/b

# 创建用户组

sudo groupadd a

sudo groupadd b

Ubuntu系统配置nologin,与其他Linux稍有不同

~  sudo vi /etc/shells

# /etc/shells: valid login shells

/bin/sh

/bin/dash

/bin/bash

/bin/rbash

/usr/bin/tmux

/usr/bin/screen

/usr/sbin/nologin

最后一行增加/usr/sbin/nologin

创建用户并设置nologin, 禁止FTP账户登陆

sudo useradd a1 -g a -s /usr/sbin/nologin

sudo useradd a2 -g a -s /usr/sbin/nologin

sudo useradd b1 -g b -s /usr/sbin/nologin

sudo useradd b2 -g b -s /usr/sbin/nologin

sudo useradd x -G a,b -s /usr/sbin/nologin

#设置账户密码

echo -e "a1:123" | sudo chpasswd

echo -e "a2:123" | sudo chpasswd

echo -e "b1:123" | sudo chpasswd

echo -e "b2:123" | sudo chpasswd

echo -e "x:123" | sudo chpasswd

#设置目录权限

sudo chown x /ftp

sudo chown a1:a /ftp/a

sudo chmod 770 /ftp/a

sudo chmod g+s /ftp/a

sudo chown b1:b /ftp/b

sudo chmod 770 /ftp/b

sudo chmod g+s /ftp/b

修改配置文件:/etc/proftpd/proftpd.conf

~ sudo vi /etc/proftpd/proftpd.conf

ServerName "blog.fens.me FTP Server"

ServerType standalone

DefaultServer on

Port 21

Umask 022

MaxInstances 30

User proftpd

Group nogroup

DefaultRoot /ftp

AllowOverwrite on

SystemLog /var/log/proftp.log

TransferLog /var/log/proftp-transfer.log

<Directory "/ftp/*">

<Limit CWD READ>

AllowAll

</Limit>

</Directory>

<Directory "/ftp/a/" >

<Limit ALL>

AllowUser x

AllowUser a1

DenyAll

</Limit>

<Limit CWD READ RETR DIRS>

AllowAll

</Limit>

</Directory>

<Directory "/ftp/b/" >

<Limit ALL>

AllowUser x

AllowUser b1

DenyAll

</Limit>

<Limit CWD READ RETR DIRS>

AllowAll

</Limit>

</Directory>

<Limit SITE_CHMOD>

DenyAll

</Limit>

重新服务器

~ sudo /etc/init.d/proftpd restart

* Stopping ftp server
proftpd        [ OK ]

* Starting ftp server proftpd

5. 客户端访问

客户端命令行:Win7 64bit Command

模拟a1用户登陆:

~ ftp

#建立连接

ftp> open 192.168.1.201

连接到 192.168.1.201。

220 ProFTPD 1.3.4a Server (blog.fens.me FTP Server)
[::ffff:192.168.1.201]

用户(192.168.1.201:(none)): a1

331 Password required for a1

密码:

230 User a1 logged in

#查看目录

ftp> dir

200 PORT command successful

150 Opening ASCII mode data connection for file list

drwxrws---   2 a1      
a            4096
Nov  3 12:59 a

drwxrws---   2 b1      
b            4096
Nov  3 12:25 b

226 Transfer complete

ftp: 收到 116 字节,用时 0.00秒 58.00千字节/秒。

ftp> cd a

250 CWD command successful

ftp> pwd

257 "/a" is the current directory

ftp> dir

200 PORT command successful

150 Opening ASCII mode data connection for file list

-rw-r--r--   1 a2      
a           55723 Nov  3
12:56 36kryunjiasu.docx

-rw-r--r--   1 a1      
a              
4 Nov  3 12:24 test.txt

226 Transfer complete

ftp: 收到 139 字节,用时 0.00秒 69.50千字节/秒。

#上传文件

ftp> put c:\22.log

200 PORT command successful

150 Opening ASCII mode data connection for 22.log

226 Transfer complete

ftp: 发送 120 字节,用时 0.06秒 2.18千字节/秒。

#下载文件

ftp> get test.txt

200 PORT command successful

150 Opening ASCII mode data connection for test.txt (4 bytes)

226 Transfer complete

ftp: 收到 5 字节,用时 0.00秒 5000.00千字节/秒。

#尝试访问B目录,出错

ftp> cd ../b

550 ../b: No such file or directory

#退出

ftp> bye

221 Goodbye.

模拟a2用户登陆:

~ ftp

#建立连接

ftp> open 192.168.1.201

连接到 192.168.1.201。

220 ProFTPD 1.3.4a Server (blog.fens.me FTP Server)
[::ffff:192.168.1.201]

用户(192.168.1.201:(none)): a2

331 Password required for a2

密码:

230 User a2 logged in

#查看目录

ftp> dir

200 PORT command successful

150 Opening ASCII mode data connection for file list

drwxrws---   2 a1      
a            4096
Nov  3 13:09 a

drwxrws---   2 b1      
b            4096
Nov  3 12:25 b

226 Transfer complete

ftp: 收到 116 字节,用时 0.00秒 116.00千字节/秒。

#上传文件,出错

ftp> put c:\11.log

200 PORT command successful

550 11.log: Operation not permitted

#下载文件

ftp> get 22.log

200 PORT command successful

150 Opening ASCII mode data connection for 22.log (114 bytes)

226 Transfer complete

ftp: 收到 120 字节,用时 0.00秒 120000.00千字节/秒。

用Proftpd我们快速建立了一个公司内部的FTP服务器,比wu-ftpd要方便。

转载请注明出处:

http://blog.fens.me/linux-ftp-proftpd/

最新文章

  1. 添加jre/jdk A java Exception occurred
  2. 在 NetBeans IDE 6.0 中分析 Java 应用程序性能
  3. cesium 获取点击点的高程
  4. composer的安装方法 以及 ThinkPHP5安装
  5. 学习java之路 简单日历查询代码
  6. nginx 配sorry page - error page
  7. Android解决NDK not configured问题
  8. python中常用的模块一
  9. lvm讲解/磁盘故障小案例
  10. Laravel框架中实现supervisor执行异步进程
  11. DataTable怎么判断一列是否为主键?
  12. HDU 4927 Series 1 ( 组合+高精度)
  13. kibana-4.6.3-linux-x86_64.tar.gz的安装(图文详解)(升级)
  14. mybatis所需pom文件内容以及配置文件
  15. Android Studio的串口通讯开发
  16. 随时查找中位数——pat1057
  17. timer实现Grid自动换行(连续相同的id跳到下一行)
  18. 第十七篇:django基础(二)
  19. nodejs 实践:express 最佳实践(七) 改造模块 connect2 解析
  20. ubuntu Android Studio以及SDK安装

热门文章

  1. 【ajax】全面总结
  2. webdriver高级应用- 精确比较页面截图图片
  3. socket编程了解
  4. concurrent.futures模块(进程池&amp;线程池)
  5. AtCoder Regular Contest 083
  6. maven无法下载依赖jar包—几种仓库的区别
  7. Spring 依赖注入(一、注入方式)
  8. 解决Failed with error: unable to access &#39;https://git.coding.net/chenmi1234/lianpos.git/&#39;: Couldn&#39;t resolve host &#39;git.coding.net&#39;
  9. 【bzoj3261】最大异或和 可持久化Trie树
  10. POJ——2236Wireless Network(暴力并查集)