Ubuntu 12.04下Proftpd FTP服务器配置

Proftpd FTP服务器配置

操作系统 Ubuntu 12.04 64bit server LTS

方案一: 本地文件方式认证

1、安装软件包

apt-getinstall proftpd proftpd-doc proftpd-mod-mysql

ProftpdFTP服务器的配置类似apache配置文件风格,配置文件为/etc/proftpd/proftpd.conf

2、建立ftpuser用户,用于虚拟用户登录系统的身份

useraddftpuser

3、建立主FTP目录

mkdir-p /var/ftpdir

chownftpuser.ftpuser /var/ftpdir

chmod755 /var/ftpdir

4、建立虚拟用户

ftpasswd–passwd –file=/etc/proftpd/passwd/ftpd.passwd –name=test–uid=1001 –gid=1001 –home=/var/ftpdir/beijing/–shell=/usr/sbin/nologin

 

5、修改配置文件

DefaultRoot ~默认登录到用户的家目录

UseEncodingUTF-8 GBK防止IE、资源管理器文件乱码神器

AllowRetrieveRestarton下载续传

AllowStoreRestarton上传续传

RequireValidShell off不要求有合法的shell

PathDenyFilter\.exe$限制上传的文件格式

PS:proftpdLimit的使用介绍

我们用到的比较多的可能是Limit的使用,Limit大致有以下动作,基本能覆盖全部的权限了。

  CMDChangeWorking Directory 改变目录

  MKDMaKeDirectory建立目录的权限

  RNFRReNameFRom更改目录名的权限

  DELEDELEte删除文件的权限

  RMDReMoveDirectory删除目录的权限

  RETRRETRieve从服务端下载到客户端的权限

  STORSTORe从客户端上传到服务端的权限

  READ:可读的权限,不包括列目录的权限,相当于RETRSTAT

  WRITE:写文件或者目录的权限,包括MKDRMD

  DIRS:是否允许列目录,相当于LISTNLST等权限,还是比较实用的

  ALL:所有权限

  LOGIN:是否允许登陆的权限

PS:补充下官网权限说明:

  • ALL

    Covering: all FTP commands (but not LOGIN)
  • DIRS

    Covering: CDUP, CWD, LIST, MDTM, MLSD, MLST, NLST, PWD, RNFR, STAT, XCUP, XCWD, XPWD
  • LOGIN

    Covering: client logins
  • READ

    Covering: RETR, SIZE
  • WRITE

    Covering: APPE, DELE, MKD, RMD, RNTO, STOR, STOU, XMKD, XRMD

针对上面这个Limit所应用的对象,又包括以下范围

  AllowUser针对某个用户允许的Limit

  DenyUser针对某个用户禁止的Limit

  AllowGroup针对某个用户组允许的Limit

  DenyGroup针对某个用户组禁止的Limit

  AllowAll针对所有用户组允许的Limit

  DenyAll针对所有用户禁止的Limit

关于限制速率的参数为:

  TransferRateSTOR|RETR速度(Kbytes/suser使用者

方案二:MYSQL数据库方式认证

proftp+mysql

apt-getinstall mysql-common mysql-server mysql-server-5.5

mysql-u root -p

createdatabaes ftpdb创建数据库

grantall on ftpdb.* to proftpd@"%" identified by'password'创建数据管理账户。

创建用户组表UIDGID与系统用户一致

CREATETABLE ftpgroup (

groupnamevarchar(16) NOT NULL default '',

gidsmallint(6) NOT NULL default '1001',

membersvarchar(16) NOT NULL default '',

KEYgroupname (groupname)

);

插入一条信息,组名称

INSERTINTO ftpgroup VALUES ('ftpuser',1001,'ftpuser');

创建用户表

CreateTABLE ftpusers (

useridvarchar(30) NOT NULL default '',

passwdvarchar(80) NOT NULL default '',

uidint(10) unsigned NOT NULL default '1001',

gidint(10) unsigned NOT NULL default '1001',

homedirvarchar(255) NOT NULL default '',

shellvarchar(255) NOT NULL default '/sbin/nologin',

countint(10) unsigned NOT NULL default '0',

hostvarchar(30) NOT NULL default '',

lastloginvarchar(30) NOT NULL default '',

UNIQUEKEY userid (userid)

)ENGINE=MyISAM DEFAULT CHARSET=gbk;

建立FTP用户

INSERTINTO ftpusersVALUES('wujr','123',1001,1001,'/var/ftpdir/beijing/bj1y/','/sbin/nologin','','','');

修改proftpd.conf配置文件加入如下字段:

LoadModulemod_sql.c

LoadModulemod_sql_mysql.c

AuthOrdermod_sql.c

SQLBackendmysql

SQLConnectInfoftpdb@localhost proftpd 3sh6q9

SQLAuthTypesPlaintext

SQLUserInfoftpusers userid passwd uid gid homedir shell

SQLGroupInfoftpgroup groupname gid members

SQLAuthenticateusers groups

SQLNegativeCacheon

#如果用户目录不存在则自动创建

SQLNamedQuerygetcount SELECT "count from ftpusers where userid='%u'"

SQLNamedQuerygetlastlogin SELECT "lastlogin from ftpusers where userid='%u'"

SQLNamedQueryupdatelogininfo UPDATE "count=count+1, host='%h',lastlogin=current_timestamp() WHERE userid='%u'" ftpusers

SQLShowInfoPASS "230" "You've logged on %{getcount} times,lastlogin at %{getlastlogin}"

SQLLogPASS updatelogininfo

DeferWelcomeon

RootLoginoff

RequireValidShelloff

重启服务,serviceproftpd restart

权限配置实例:

1、用户需求

2、配置

创建文件夹:

创建操作系统用户

useradd docuser  #默认会一起建立同名用户组

id docuser   #查看用户的uid  gid

cd /var/ftpdir/doctorftp

mkdir DoctorGroup1 DoctorGroup2 DoctorGroup3 DoctorGroup4 DoctorGroup5

chown docuser:docuser *  #给5个文件夹更改用户、用户组

创建FTP虚拟用户对应目录如下:

ywb

/var/ftpdir/aoyadoctor/

ps /var/ftpdir/aoyadoctor/

yisheng1 /var/ftpdir/aoyadoctor/DoctorGroup1/

yisheng1-1 /var/ftpdir/aoyadoctor/DoctorGroup1/

yisheng2 /var/ftpdir/aoyadoctor/DoctorGroup2/

yisheng2-1 /var/ftpdir/aoyadoctor/DoctorGroup2/

yisheng3 /var/ftpdir/aoyadoctor/DoctorGroup3/

yisheng3-1 /var/ftpdir/aoyadoctor/DoctorGroup3/

yisheng4 /var/ftpdir/aoyadoctor/

yisheng4-1 /var/ftpdir/aoyadoctor/DoctorGroup4/

yisheng5 /var/ftpdir/aoyadoctor/DoctorGroup5/

yisheng5-1 /var/ftpdir/aoyadoctor/DoctorGroup5/

根据需求权限,配置配置文件 /etc/proftpd/proftpd.conf (权限部分)

<Directory /var/ftpdir/aoyadoctor/DoctorGroup1/>

< Limit RMD DELE>

AllowUser yisheng1        #允许1组主任删除文件及文件夹,其他组员拥有除以上两个权限的其他权限

DenyALL

< /Limit>

< Limit STOR RNFR>

DenyUser yisheng4     #因为医生4既是医务部主任兼任医生4组主任,所以医生4的权限需求为,对所有组文件有查看、下载权限,而对4组有上传、下

#载、删除、重命名等管理权限,这里的设置是去掉除4组文件外其他文件夹的上传、重命名权限。

</Limit>

< /Directory>

< Directory /var/ftpdir/aoyadoctor/DoctorGroup2/>

< Limit RMD DELE>

AllowUser yisheng2

DenyAll

< /Limit>

< Limit STOR RNFR>

DenyUser yisheng4

< /Limit>

< /Directory>

< Directory /var/ftpdir/aoyadoctor/DoctorGroup3/>

< Limit RMD DELE>

AllowUser yisheng3

DenyAll

< /Limit>

< Limit STOR RNFR>

DenyUser yisheng4

< /Limit>

< /Directory>

< Directory /var/ftpdir/aoyadoctor/DoctorGroup4/>

< Limit RMD DELE>

AllowUser yisheng4          #医生4对4组文件有删除权限 其他组员无。

DenyAll

< /Limit>

< /Directory>

< Directory /var/ftpdir/aoyadoctor/DoctorGroup5/>

< Limit RMD DELE>

AllowUser yisheng5

DenyAll

< /Limit>

< Limit STOR RNFR>

DenyUser yisheng4

< /Limit>

< /Directory>

< Directory /var/ftpdir/aoyadoctor/*>

< Limit WRITE RNFR STOR>

DenyUser ps    #评审组用户只有所有文件夹的浏览 下载权限

</Limit>

< Limit DELE RMD RNFR>

DenyUser ywb      #医务组用户拥有所有文件夹的浏览 下载 上传 权限

</Limit>

< /Directory>

重启 service proftpd restart 完成权限配置。

发表评论