首页 > 代码库 > ubuntu12.04+proftpd1.3.4a的系统用户+虚拟用户权限应用实践

ubuntu12.04+proftpd1.3.4a的系统用户+虚拟用户权限应用实践

目录:
  一、什么是Proftpd?
  二、Proftpd的官方网站在哪里?
  三、在哪里下载?
  四、如何安装?
    1)系统用户的配置+权限控制
    2)虚拟用户的配置+权限控制
 
  一、什么是Proftpd?
  ProFTPd是一套可配置性强的开放源代码的FTP伺服器软件,名称最後的d字是因为在Linux中是用daemon来称呼。ProFTPd与Apache的配置方式类似,因此十分容易配置和管理。
  项目开始时,Unix或类Unix平台上 FTP Server十分有限,最常使用的恐怕就是wu-ftpd了。虽然wu-ftpd有着极佳的效能同时也是一套很好的软件,然而它却欠缺了许多Win32平台上FTP Server的一些特色,同时wu-ftpd过去也有不少的安全漏洞陆续被发现。ProFTPD的原创者本身就曾经花非常多的时间寻找wu-ftpd 的漏洞加以改进并且增加许多功能。然而十分不幸的是,他很快地发现显然wu-ftpd需要全部重新的改写才能补足欠缺的设定能力以及缺乏的一些功能。
  除了wu-ftpd的,也有一些其他的FTP服务器可被设计成重量轻,安全而牺牲的可配置性。例如,Troll FTP是一个很好的FTP程序,比wu-ftpd更为安全而且资源占用更少。不幸的是,它是非常适合于基本的FTP服务,但不适合需要更复杂功能的FTP站点. 
  ProFTPD不是由其它FTP Server的源代码修改而产生的,相反的,它是完全独立而完整、重新改写的FTP Server。许多著名的,访问量大的网站使用ProFTPD的。ProFTPD有两种运行方式,独立服务器与超级服务器的子服务器。无论从安全性和稳定性,还是可配置性来说都是非常好的选择。
 
  二、Proftpd的官方网站在哪里?
  http://www.proftpd.org/
 
  三、在哪里下载?
  http://www.proftpd.org/md5_pgp.html
 
  四、如何安装?
  标题中介绍了我的系统是ubuntu12.04,所以就直接使用apt-get的方式安装了,安装过程中会弹出个窗口让你选择运行模式,这里我们选择的是“standalone”
root@ubuntu:~# apt-get install proftpd
 
  安装后,proftpd会自动启动,可以查看下进程是否存在"ps -aux|grep ftp"或用"netstat -tulpn | grep :21"查看下ftp的默认21端口是否有内容
root@ubuntu:~# ps -aux|grep ftpWarning: bad ps syntax, perhaps a bogus ‘-‘? See http://procps.sf.net/faq.htmlproftpd  18912  0.0  0.0  93376  2204 ?        Ss   11:10   0:00 proftpd: (accepting connections)              root     18942  0.0  0.0   8112   940 pts/1    S+   12:06   0:00 grep --color=auto ftproot@ubuntu:~# netstat -tulpn | grep :21tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      18912/proftpd: (accroot@ubuntu:~# 
  proftpd基本配置说明:
关闭IPv6支持 UseIPv6                         off # 禁用反向域名解析 UseReverseDNS      off #支持的编码格式UseEncoding UTF-8 GBK# 不显示服务器相关信息, 如proftpd版本 ServerIdent          off #查找客户的远程用户名,关掉节省连接时间IdentLookups                    off#配置服务器名 ServerName                      "idoall.org FTP server" #设置服务器运行模式,独立服务,或者被监管 ServerType                      standalone #关闭欢迎信息显示 DeferWelcome                    on #如果显示欢迎信息,则指定显示的文件 DisplayLogin /usr/share/proftpd/etc/ftplogin.msg#指定切换文件夹时,显示的欢迎信息DisplayChdir			.message#FTP安全扩展MultilineRFC2228                on #设置为默认服务器 DefaultServer                   on #不显示链接文件的目标文件DefaultRoot ShowSymlinks                    off#允许root用户登录,默认是不允许的,安全起见不推荐此选项。 RootLogin off  #登陆后允许IDLE的时间TimeoutNoTransfer               600 #连接超时的时间 TimeoutStalled                  600 #客户端idle时间设置,默认就是600秒 TimeoutIdle                     600 #显示时显示详细信息ListOptions                     "-l" #阻止带.的命令DenyFilter                      \*.*/  # 限制lionftp用户上传的速率限制在150Kbytes/s TransferRate STOR 150 user lionftp # 限制lionftp用户下载的速率限制在100Kbytes/s TransferRate RETR 100 user lionftp #端口号  Port                            21 # 显示以MB为单位 QuotaDisplayUnits Mb  #设置被动模式使用的端口范围 PassivePorts                  60000 65535  #FTP SERVER最大连接数 MaxInstances                    30  #设置服务器进程运行使用的用户 User                            proftpd #设置服务器进程运行使用的组 Group                           nogroup #设置用户上传文件的权限掩码 Umask                           022  022 #设置用户被chroot锁定到的各自的Home目录 DefaultRoot     /usr/local/nginx/html # 允许覆盖文件 AllowOverwrite                  on #屏蔽服务器版本信息 ServerIdent off   #上传时,允许断点续传 AllowStoreRestart on  #下载时,允许断点续传 AllowRetrieveRestart on  #每个帐户最多允许来源ip为1个 MaxHostsPerUser 10  #每个帐户在每个客户端最多可以同时登陆1次,可以防止多线程软件下载对服务器的破坏 MaxClientsPerUser 10 #同一个客户端只能最多1个帐号可以登陆 MaxClientsPerHost 10 #是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。 WtmpLog on #设置日志 TransferLog /var/log/proftpd/xferlog SystemLog   /var/log/proftpd/proftpd.log
  Limit权限说明:
CMD : Change Working Directory 改变目录MKD : MaKe Directory 建立目录的权限RNFR : ReName FRom 更改目录名的权限DELE : DELEte 删除文件的权限RMD : ReMove Directory 删除目录的权限RETR : RETRieve 从服务端下载到客户端的权限STOR : STORe 从客户端上传到服务端的权限READ :可读的权限,不包括列目录的权限,相当于 RETR , STAT 等WRITE :写文件或者目录的权限,包括 MKD 和 RMDDIRS :是否允许列目录,相当于 LIST , NLST 等权限,还是比较实用的ALL :所有权限LOGIN :是否允许登陆的权限#limit 中对用户和群组的控制AllowUser 针对某个用户允许的 LimitDenyUser 针对某个用户禁止的 LimitAllowGroup 针对某个用户组允许的 LimitDenyGroup 针对某个用户组禁止的 LimitAllowAll 针对所有用户组允许的 LimitDenyAll 针对所有用户禁止的 Limit
 
  关于欢迎文件的设置包含如下参数:
%T 目前的时间%F 所在硬盘剩下的容量%C 目前所在的目录%R Client 端的主机名称%L Server 端的主机名称%U 使用者帐户名称%M 最大允许连接人数%N 目前的服务器连接人数%E FTP服务器管理员的 email%i 本次上传的文件数量%o 本次下载的文件数量%t 本次上传+下载的文件数量
  知道这些参数,我们就可以写出一个友好的欢迎语:
root@ubuntu:~# vi /usr/share/proftpd/etc/ftplogin.msg欢迎您%U, 这是idoall的测试FTP服务器;目前时间是:%T;本服务器最多允许%M个用户连接数;目前服务器上已有%N个用户连接数;目前你所在的目录是%C;目录所在的硬盘还剩下%F字节。
    1)系统用户的配置+权限控制
      a)Ubuntu系统配置nologin,与其他Linux稍有不同,最后一行增加/usr/sbin/nologin
root@ubuntu:~# 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
      b)用户操作权限说明
/usr/share/nginx/html    ----lionftp可以读写,chenshuaiftp只读/usr/share/nginx/html/a    ----lionftp可以读写,chenshuaiftp可以读写
      c)先创建一个ftp用户组,再创建两个测试用户lionftp和chenshuaiftp,并且禁止ftp用户使用终端登录,将用户lionftp和chenshuaiftp加入到ftp用户组中
root@ubuntu:~# groupadd ftproot@ubuntu:~# useradd lionftp -g ftp -s /usr/sbin/nologinroot@ubuntu:~# useradd chenshuaiftp -g ftp -s /usr/sbin/nologinroot@ubuntu:~# passwd lionftpEnter new UNIX password: Retype new UNIX password: passwd: password updated successfullyroot@ubuntu:~# passwd chenshuaiftpEnter new UNIX password: Retype new UNIX password: passwd: password updated successfully
      d)设置目录用户权限
root@ubuntu:~# chown lionftp /usr/share/nginx/html
      e)修改proftpd的配置
root@ubuntu:~# vi /etc/proftpd/proftpd.conf# If set on you can experience a longer connection delay in many cases.# # /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file. # To really apply changes, reload proftpd after modifications, if # it runs in daemon mode. It is not required in inetd/xinetd mode. #   # Includes DSO modules Include /etc/proftpd/modules.conf  关闭IPv6支持 UseIPv6                         off # 禁用反向域名解析 UseReverseDNS      off #支持的编码格式UseEncoding UTF-8 GBK# 不显示服务器相关信息, 如proftpd版本 ServerIdent          off #查找客户的远程用户名,关掉节省连接时间IdentLookups                    off#配置服务器名 ServerName                      "idoall.org FTP server" #设置服务器运行模式,独立服务,或者被监管 ServerType                      standalone #关闭欢迎信息显示 DeferWelcome                    on #如果显示欢迎信息,则指定显示的文件 DisplayLogin /usr/share/proftpd/etc/ftplogin.msg#指定切换文件夹时,显示的欢迎信息DisplayChdir			.message#FTP安全扩展MultilineRFC2228                on #设置为默认服务器 DefaultServer                   on #不显示链接文件的目标文件DefaultRoot ShowSymlinks                    off#允许root用户登录,默认是不允许的,安全起见不推荐此选项。 RootLogin off  #登陆后允许IDLE的时间TimeoutNoTransfer               600 #连接超时的时间 TimeoutStalled                  600 #客户端idle时间设置,默认就是600秒 TimeoutIdle                     600 #显示时显示详细信息ListOptions                     "-l" #阻止带.的命令DenyFilter                      \*.*/  # 限制lionftp用户上传的速率限制在150Kbytes/s TransferRate STOR 150 user lionftp # 限制lionftp用户下载的速率限制在100Kbytes/s TransferRate RETR 100 user lionftp #端口号  Port                            21 # 显示以MB为单位 QuotaDisplayUnits Mb  #设置被动模式使用的端口范围 PassivePorts                  60000 65535  #FTP SERVER最大连接数 MaxInstances                    30  #设置服务器进程运行使用的用户 User                            proftpd #设置服务器进程运行使用的组 Group                           nogroup #设置用户上传文件的权限掩码 Umask                           022  022 #设置用户被chroot锁定到的各自的Home目录 DefaultRoot     /usr/local/nginx/html # 允许覆盖文件 AllowOverwrite                  on #屏蔽服务器版本信息 ServerIdent off   #上传时,允许断点续传 AllowStoreRestart on  #下载时,允许断点续传 AllowRetrieveRestart on  #每个帐户最多允许来源ip为1个 MaxHostsPerUser 10  #每个帐户在每个客户端最多可以同时登陆1次,可以防止多线程软件下载对服务器的破坏 MaxClientsPerUser 10 #同一个客户端只能最多1个帐号可以登陆 MaxClientsPerHost 10 #是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。 WtmpLog on #设置日志 TransferLog /var/log/proftpd/xferlog SystemLog   /var/log/proftpd/proftpd.log <Directory "/usr/local/nginx/html/*">         <Limit ALL>                 AllowUser lionftp		DenyAll        </Limit> 	<Limit CWD READ DIRS>		AllowAll	</Limit></Directory> <Directory "/usr/local/nginx/html/a/*" >	<Limit ALL>		AllowUser lionftp		AllowUser chenshuaiftp		DenyAll	</Limit>	<Limit CWD READ DIRS>		AllowAll	</Limit></Directory>#不允许任何人执行chmod命令(SITE_CHMOD)<Limit SITE_CHMOD>         DenyAll </Limit>  <IfModule mod_quotatab.c> QuotaEngine off </IfModule>  <IfModule mod_ratio.c> Ratios off </IfModule> <IfModule mod_delay.c> DelayEngine on </IfModule> <IfModule mod_ctrls.c> ControlsEngine        off ControlsMaxClients    2 ControlsLog           /var/log/proftpd/controls.log ControlsInterval      5 ControlsSocket        /var/run/proftpd/proftpd.sock </IfModule>  <IfModule mod_ctrls_admin.c> AdminControlsEngine off </IfModule>  # This is useful for masquerading address with dynamic IPs: # refresh any configured MasqueradeAddress directives every 8 hours <IfModule mod_dynmasq.c> # DynMasqRefresh 28800 </IfModule> Include /etc/proftpd/conf.d/
 
      f)重启ftp服务器
root@ubuntu:~# service proftpd restart
      g)在windows上测试连接
C:\Users\Administrator>ftpftp> open 192.168.1.100连接到 192.168.1.100。220 192.168.1.100 FTP server ready用户(192.168.1.100:(none)): chenshuaiftp331 Password required for chenshuaiftp密码:230-欢迎您chenshuaiftp,这是idoall的测试FTP服务器;230-   目前时间是:Sat Aug 09 03:22:02 2014;230-   本服务器最多允许0个用户连接数;230-   目前服务器上已有2个用户连接数;230-   目前你所在的目录是/;230-   目录所在的硬盘还剩下0字节。230 User chenshuaiftp logged inftp> dir200 PORT command successful150 Opening ASCII mode data connection for file list-rw-r--r--   1 root     root          537 Aug  6 06:38 50x.htmldrwxrwxrwx  19 root     root         4096 Jun 17 05:49 xxxdrwxrwxrwx   7 root     root         4096 Aug  9 01:19 aaaa226 Transfer completeftp: 收到 201 字节,用时 0.01秒 13.40千字节/秒。
    2)虚拟用户的配置+权限控制
      a)修改配置文件,在刚才的配置文件中增加以下配置,同时在“/usr/local/nginx/html/a/*”权限部分增加一个用户,后面我们用这个虚拟用户“ftpchenshuai”来测试
# 不要求有合法shell,直接效果是允许nologin用户和虚拟用户登录RequireValidShell off# AuthOrder指定了权限检查的顺序。这里只使用虚拟用户AuthOrder mod_auth_file.c mod_auth_unix.cAuthUserFile /usr/share/proftpd/etc/passwdAuthGroupFile /usr/share/proftpd/etc/group
      修改后的proftpd的全部配置文件内容如下:
root@ubuntu:~# vi /etc/proftpd/proftpd.conf# If set on you can experience a longer connection delay in many cases.# # /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file. # To really apply changes, reload proftpd after modifications, if # it runs in daemon mode. It is not required in inetd/xinetd mode. #   # Includes DSO modules Include /etc/proftpd/modules.conf  关闭IPv6支持 UseIPv6                         off # 禁用反向域名解析 UseReverseDNS      off #支持的编码格式UseEncoding UTF-8 GBK# 不显示服务器相关信息, 如proftpd版本 ServerIdent          off #查找客户的远程用户名,关掉节省连接时间IdentLookups                    off#配置服务器名 ServerName                      "idoall.org FTP server" #设置服务器运行模式,独立服务,或者被监管 ServerType                      standalone #关闭欢迎信息显示 DeferWelcome                    on #如果显示欢迎信息,则指定显示的文件 DisplayLogin /usr/share/proftpd/etc/ftplogin.msg#指定切换文件夹时,显示的欢迎信息DisplayChdir			.message#FTP安全扩展MultilineRFC2228                on #设置为默认服务器 DefaultServer                   on #不显示链接文件的目标文件DefaultRoot ShowSymlinks                    off#允许root用户登录,默认是不允许的,安全起见不推荐此选项。 RootLogin off  #登陆后允许IDLE的时间TimeoutNoTransfer               600 #连接超时的时间 TimeoutStalled                  600 #客户端idle时间设置,默认就是600秒 TimeoutIdle                     600 #显示时显示详细信息ListOptions                     "-l" #阻止带.的命令DenyFilter                      \*.*/  # 限制lionftp用户上传的速率限制在150Kbytes/s TransferRate STOR 150 user lionftp # 限制lionftp用户下载的速率限制在100Kbytes/s TransferRate RETR 100 user lionftp #端口号  Port                            21 # 显示以MB为单位 QuotaDisplayUnits Mb  #设置被动模式使用的端口范围 PassivePorts                  60000 65535  #FTP SERVER最大连接数 MaxInstances                    30  #设置服务器进程运行使用的用户 User                            proftpd #设置服务器进程运行使用的组 Group                           nogroup #设置用户上传文件的权限掩码 Umask                           022  022 #设置用户被chroot锁定到的各自的Home目录 DefaultRoot     /usr/local/nginx/html # 允许覆盖文件 AllowOverwrite                  on #屏蔽服务器版本信息 ServerIdent off   #上传时,允许断点续传 AllowStoreRestart on  #下载时,允许断点续传 AllowRetrieveRestart on  #每个帐户最多允许来源ip为1个 MaxHostsPerUser 10  #每个帐户在每个客户端最多可以同时登陆1次,可以防止多线程软件下载对服务器的破坏 MaxClientsPerUser 10 #同一个客户端只能最多1个帐号可以登陆 MaxClientsPerHost 10 #是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。 WtmpLog on #设置日志 TransferLog /var/log/proftpd/xferlog SystemLog   /var/log/proftpd/proftpd.log # 不要求有合法shell,直接效果是允许nologin用户和虚拟用户登录RequireValidShell off# AuthOrder指定了权限检查的顺序。这里只使用虚拟用户AuthOrder mod_auth_file.c mod_auth_unix.cAuthUserFile /usr/share/proftpd/etc/passwdAuthGroupFile /usr/share/proftpd/etc/group <Directory "/usr/local/nginx/html/*">         <Limit ALL>                 AllowUser lionftp		DenyAll        </Limit> 	<Limit CWD READ DIRS>		AllowAll	</Limit></Directory> <Directory "/usr/local/nginx/html/a/*" >	<Limit ALL>		AllowUser lionftp		AllowUser chenshuaiftp		AllowUser ftpchenshuai		DenyAll	</Limit>	<Limit CWD READ DIRS>		AllowAll	</Limit></Directory>#不允许任何人执行chmod命令(SITE_CHMOD)<Limit SITE_CHMOD>         DenyAll </Limit>  <IfModule mod_quotatab.c> QuotaEngine off </IfModule>  <IfModule mod_ratio.c> Ratios off </IfModule> <IfModule mod_delay.c> DelayEngine on </IfModule> <IfModule mod_ctrls.c> ControlsEngine        off ControlsMaxClients    2 ControlsLog           /var/log/proftpd/controls.log ControlsInterval      5 ControlsSocket        /var/run/proftpd/proftpd.sock </IfModule>  <IfModule mod_ctrls_admin.c> AdminControlsEngine off </IfModule>  # This is useful for masquerading address with dynamic IPs: # refresh any configured MasqueradeAddress directives every 8 hours <IfModule mod_dynmasq.c> # DynMasqRefresh 28800 </IfModule> Include /etc/proftpd/conf.d/
      b)配置文件中的虚拟用户和用户组的文件如果不存在,先创建:
root@ubuntu:~# mkdir -p /usr/share/proftpd/etc/root@ubuntu:~# touch /usr/share/proftpd/etc/passwdroot@ubuntu:~# touch /usr/share/proftpd/etc/group
      c)创建一个虚拟用户ftpchenshuai,并指定目录
root@ubuntu:~# ftpasswd --passwd --file=/usr/share/proftpd/etc/passwd --name=ftpchenshuai --uid=3000 --home=/usr/local/nginx/html/a --shell=/bin/false
      –passwd 指定建立一个新的虚拟用户,–group则建立一个虚拟组;
      –file 指定存储虚拟用户的文件;
      –name 指定此虚拟用户的用户名,密码会在命令执行时要求输入;
      –uid 指定此虚拟用户对应的系统用户UID,此虚拟用户将以此系统UID的身份读写文件
      –home 指定此虚拟用户的根目录,就是其登陆FTP后的根目录;
      –shell 指定此虚拟用户的shell,为了安全当然指定一个不可登陆的shell了
 
      d)新建一个虚拟用户组
root@ubuntu:~# ftpasswd --group --name=testgroup --gid=2014
      e)将虚拟用户添加到虚拟用户组
root@ubuntu:~# ftpasswd --group --name=testgroup --gid=2014 --member=ftpchenshuai
      f)如果用户登录后,没有写权限,要使用以下命令增加
root@ubuntu:~# chmod 777 -R /usr/local/nginx/html/a
      g)重启ftp服务器
root@ubuntu:~# service proftpd restart
      h)在windows上测试连接
C:\Users\Administrator>ftpftp> open 192.168.1.100连接到 192.168.1.100。220 192.168.1.100 FTP server ready用户(192.168.1.100:(none)): ftpchenshuai331 Password required for ftpchenshuai密码:230-欢迎您ftpchenshuai,这是idoall的测试FTP服务器;230-   目前时间是:Sat Aug 09 03:30:53 2014;230-   本服务器最多允许0个用户连接数;230-   目前服务器上已有2个用户连接数;230-   目前你所在的目录是/a;230-   目录所在的硬盘还剩下0字节。230 User ftpchenshuai logged inftp> pwd257 "/a" is the current directoryftp> dir200 PORT command successful150 Opening ASCII mode data connection for file list-rw-r--r--   1 ftpchenshuai 3000      1870666 Aug  9 02:13 xxx.apk226 Transfer completeftp: 收到 88 字节,用时 0.01秒 5.87千字节/秒。ftp> put c:\a.txt200 PORT command successful150 Opening ASCII mode data connection for a.txt226 Transfer completeftp: 发送 1 字节,用时 0.06秒 0.02千字节/秒。ftp> dir200 PORT command successful150 Opening ASCII mode data connection for file list-rw-r--r--   1 ftpchenshuai 3000            1 Aug  9 03:33 a.txt-rw-r--r--   1 ftpchenshuai 3000      1870666 Aug  9 02:13 xxx.apk226 Transfer completeftp: 收到 154 字节,用时 0.01秒 22.00千字节/秒。ftp> bye221 Goodbye.
  之前也尝试过vsftpd等FTP,最后感觉还是Proftpd配置简单比较方便一些。
 
---------------------------------------
博文作者:迦壹
博客地址:http://idoall.org/home.php?mod=space&uid=1&do=blog&id=549
转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作!
---------------------------------------