当前位置: 首页 > 工具软件 > Proftpd > 使用案例 >

Proftpd服务搭建

越源
2023-12-01

前几天迁移服务器,其中有个ftp,当时以为这个ftp只是公司用来上传视频的,所以搭建了一个vsftpd服务,没想到这个ftp同时还被java程序连接,而java使用vsftpd进行文件移动时总会报错‘550 Rename failed’,其实就是移动时会先更改源文件名称,而改名时名称前面会加上路径,其中‘/’是不允许在命名时使用的,所以最后只能还使用原来的proftpd服务。

1、环境

阿里云ECS CentOS7

2、下载文件

wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.5.tar.gz

3、解压文件

tar -zvxf proftpd-1.3.5.tar.gz

4、编译安装

cd proftpd-1.3.5

./configure  --prefix=/usr/local/proftpd  --sysconfdir=/etc/  --enable-nls  --enable-openssl  --enable-shadow

make

make install

编译说明:

--prefix=PREFIX         指定安装路径(--prefix=/usr/local/)              

--sysconfdir=DIR        指定FTP服务配置文件路径(--sysconfdir=/etc)                  

--localstatedir=DIR     指定运行状态的文件存放位置(默认/var/proftpd)                 

--with-modules=mod_ldap 指定加载功能模块                        

--enable-memcache       支持缓存功能                          

--enable-nls            支持多语言环境(如中文),安装完成后在主配置文件中                          需要指定字符编码(UseEncoding UTF-8 CP936) 

--enable-openssl        支持TLS加密FTP服务                        

--enable-shadow         支持使用/etc/shadow验证用户密码

5、创建共享目录

用户名 ftpuser1 对应目录:
/data/ftp_dir1

用户名 ftpuser2 对应目录:
/data/ftp_dir2

 6、编辑配置文件 /etc/proftpd.conf

ServerName                      "abiftp"
ServerType                      standalone
DefaultServer                   on
Port                            21
Umask                           002
MaxInstances                    30
MaxClients 30
User                            nobody
Group                           nobody
DefaultRoot ~
UseEncoding UTF-8 GBK
AllowOverwrite          on
AllowRetrieveRestart    on
AllowStoreRestart       on
MaxClientsPerHost       20
UseReverseDNS           off
TimeoutLogin            60
TimeoutNoTransfer       600
LogFormat myxfer "%h %u %t \"%r\" %s %b"
LogFormat default "%h %a %u %t \"%r\" %s %b $$ \'%F\'"
LogFormat auth "%h %a %t \"%r\" %s"
LogFormat write "%h %a %t \"%r\" %s %b"
SetEnv TZ :/etc/localtime
SystemLog /usr/local/proftpd/var/proftpd.log
TransferLog /usr/local/proftpd/var/xfer.log

# 目录及权限配置
RequireValidShell off
<Directory /data/ftp_dir1> 
    <Limit READ>
        AllowUser ftpuser1
        DenyAll
    </Limit>
    <Limit WRITE>
        AllowUser ftpuser1
        DenyAll
    </Limit>
<Limit STOR MKD>
AllowUser ftpuser1
DenyAll
</Limit>
<Limit DELE RMD>
AllowUser ftpuser1
DenyAll
</Limit>
<Limit RETR>
AllowUser ftpuser1
DenyAll
</Limit>
</Directory>

<Directory /data/ftp_dir2> 
    <Limit READ>
        AllowUser ftpuser2
        DenyAll
    </Limit>
    <Limit WRITE>
        AllowUser ftpuser2
        DenyAll
    </Limit>
<Limit STOR MKD>
AllowUser ftpuser2
DenyAll
</Limit>
<Limit DELE RMD>
AllowUser ftpuser2
DenyAll
</Limit>
<Limit RETR>
AllowUser ftpuser2
DenyAll
</Limit>
</Directory>

7、创建用户

先创建一个系统用户,该用户拥有/data/ftp_dir1 和 ftp_dir2的属主和属组权限

useradd -s /sbin/nologin ftpuser

chown ftpuser:ftpuser /data/ftp_dir1
chown ftpuser:ftpuser /data/ftp_dir2

创建连接ftp的用户

useradd -d /data/ftp_dir1/ -g ftpuser -s /sbin/nologin ftpuser1

useradd -d /data/ftp_dir2/ -g ftpuser -s /sbin/nologin ftpuser2

passwd ftpuser1

passwd ftpuser2

8、测试配置文件及启动

测试

/usr/local/proftpd/sbin/proftpd -t6

启动

/usr/local/proftpd/sbin/proftpd

完成!

附加:虚拟用户

/etc/proftpd.con增加配置

AuthOrder mod_auth_file.c
RequireValidShell off
AuthUserFile /usr/local/proftpd/ftpd.passwd

创建用户

/usr/local/proftpd/bin/ftpasswd --passwd --file=/usr/local/proftpd/ftpd.passwd --name=ftpuser1  --uid=1004  --home=/data/ftp_dir1/  --shell=/bin/false

当时我配置虚拟用户,但配置文件中的权限似乎没有生效,所以我为了服务快速可用,使用了系统用户连接ftp的方式,但后来想想,应该是相对路径和绝对路径的问题。

所以当使用虚拟用户时,配置文件中的权限应该将:

<Directory /data/ftp_dir1>   改为 <Directory />

这样我觉得可行,但我并未测试,可以参考一下

 类似资料: