zoukankan      html  css  js  c++  java
  • Linux ftp 使用

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件
     
    ftp 概述

    FTP采用客户端/服务器模型,客户端和服务器使用TCP建立连接。

    在服务器端,FTP有两个预分配的的端口号,分别为20和21.其中,端口20用于发送和接受FTP数据(ASCII码或二进制文件),该数据端口只在传输数据是打开,并在传输结束时关闭。端口21用于发送和接受FTP的控制信息,FTP服务器通过侦听这个端口来判断是否有ftp客户端的连接请求,FTP会话建立后,端口21的连接在会话期间始终保持打开状态。

    在客户端,当发出请求时动态分配端口号,选择范围为1024~65535.当一个FTP会话开始后,客户端程序打开一个控制端口(如1038),该端连接到服务器上的21端口,接受和发送控制信命令;需要传输数据时,客户端再打开第二个端口(如1039),连接到服务器上的20端口。每当开始传输文件时,客户端程序会打开一个新的数据端口,在文件传输完毕后,再自动释放该端口。

    ftp 语法

    该命令的语法格式如下所示:

    ftp [-v] [-d] [--i] [-n] [-g] [-k realm] [-x] [-u] [host]

    ftp命令主要选项说明

     选项

     说明

     -d

     启动调试模式

     -u

     关闭自动认证

     -e

     不记录历史指令

     -i

     关闭交互模式

     -x

     在成功认证之后,协商密钥

     -n

     关闭自动登录功能

     -p

     传输文件模式为被动模式

     -v

     程序运行时,显示详细的处理信息

     -k realm

     使用Kerberos v4认证时,从realm中得到信息

     host

     FTP服务器的主机名/IP地址

    -g

     取消全局文件名

    ftp 内部命令

    在客户端访问FTP时,如果没有在命令行给出服务器的主机名或IP,则客户端将出现“ftp>”提示符,等待用户输入ftp内部命令。

    常见ftp内部命令及其说明

     内部命令

     说明

     ls

     显示服务器上的目录

     get

     从服务器下载指定文件到客户端

     put

     从客户端传送指定文件到服务器

     open

     连接ftp服务器

     quit

     断开连接并退出ftp服务器

     cd directory

     改变服务器的当前目录为directory

     lcd directory

     改变本地的当前目录为directory

     bye

     退出ftp命令状态

     ascii

     设置文件传输方式为ASCII模式

     binary

     设置文件传输方式为二进制模式

     !

     执行本地主机命令

     cd

     切换远端ftp服务器上的目录

     cdup

     上一层目录

     close

     在不结束ftp进程的情况下,关闭与ftp服务器的连接

     delete

     删除远端ftp服务器上的文件

     get

     下载

     hash

     显示#表示下载进度

     mdelete

     删除文件,模糊匹配

     mget

     下载文件,模糊匹配

     mput

     上传文件,模糊匹配

     mkdir

     在远端ftp服务器上,建立文件夹

     newer

     下载时,检测是不是新文件

     prompt

     关闭交互模式

     put

     上传

     pwd

     显示当前目录

     

    ftp使用的内部命令如下(中括号表示可选项): 

      1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip. 

      2.$ macro-ame[args]:执行宏定义macro-name. 

      3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。

      4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。

      5.ascii:使用ascii类型传输方式。

      6.bell:每个命令执行完毕后计算机响铃一次。

      7.bin:使用二进制文件传输方式。

      8.bye:退出ftp会话过程。

      9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。

      10.cd remote-dir:进入远程主机目录。

      11.cdup:进入远程主机目录的父目录。

      12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。

      13.close:中断与远程服务器的ftp会话(与open对应)。

      14.cr:使用asscii方式传输文件时,将回车换行转换为回行。

      15.delete remote-file:删除远程主机文件。

      16.debug[debug-value]:设置调试方式,显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。

      17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件local-file。

      18.disconnection:同close。

      19.form format:将文件传输方式设置为format,缺省为file方式。

      20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。

      21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。

      22.hash:每传输1024字节,显示一个hash符号(#)。

      23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。

      24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。

      25.image:设置二进制传输方式(同binary)。

      26.lcd[dir]:将本地工作目录切换至dir。

      27.ls[remote-dir][local-file]:显示远程目录remote-dir,并存入本地文件local-file。

      28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。

      29.mdelete[remote-file]:删除远程主机文件。

      30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如:mdir *.o.*.zipoutfile

      31.mget remote-files:传输多个远程文件。

      32.mkdir dir-name:在远程主机中建一目录。

      33.mls remote-file local-file:同nlist,但可指定多个文件名。

      34.mode[modename]:将文件传输方式设置为modename,缺省为stream方式。

      35.modtime file-name:显示远程主机文件的最后修改时间。

      36.mput local-file:将多个文件传输至远程主机。

      37.newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。

      38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。

      39.nmap[inpattern outpattern]:设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。

      40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans 1R,则文件名LLL将变为RRR。

      41.open host[port]:建立指定ftp服务器连接,可指定连接端口。

      42.passive:进入被动传输方式。

      43.prompt:设置多个文件传输时的交互提示。

      44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。

      45.put local-file[remote-file]:将本地文件local-file传送至远程主机。

      46.pwd:显示远程主机的当前工作目录。

      47.quit:同bye,退出ftp会话。

      48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst. 

      49.recv remote-file[local-file]:同get。

      50.reget remote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。

      51.rhelp[cmd-name]:请求获得远程主机的帮助。

      52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态。

      53.rename[from][to]:更改远程主机文件名。

      54.reset:清除回答队列。

      55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。

      56.rmdir dir-name:删除远程主机目录。

      57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀..1,.2等。

      58.send local-file[remote-file]:同put。

      59.sendport:设置PORT命令的使用。

      60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。

      61.size file-name:显示远程主机文件大小,如:site idle 7200。

      62.status:显示当前ftp状态。

      63.struct[struct-name]:将文件传输结构设置为struct-name,缺省时使用stream结构。

      64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。

      65.system:显示远程主机的操作系统类型。

      66.tenex:将文件传输类型设置为TENEX机的所需的类型。

      67.tick:设置传输时的字节计数器。

      68.trace:设置包跟踪。

      69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。

      70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3。

      71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。

      72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on. 

      73.?[cmd]:同help。
     
     
    ftp 配置
     

    #################匿名权限控制###############

    anonymous_enable=YES   #是否启用匿名用户
    no_anon_password=YES   #匿名用户login时不询问口令

    下面这四个主要语句控制这文件和文件夹的上传、下载、创建、删除和重命名。
    anon_upload_enable=(yes/no);  #控制匿名用户对文件(非目录)上传权限。
    anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限
    anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
    anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名

    注:匿名用户下载是使用的是nobody这个用户,所以相应的O这个位置要有R权限才能被下载。若想让匿名用户能上传和删除权限,必需设置

    write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,若要启用上传权限的话,就要开启他)
    anon_root=(none) #匿名用户主目录
    anon_max_rate=(0) #匿名用户速度限制
    anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)
    chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
    chown_username=whoever #匿名上传文件所属用户名


    #################本地用户权限控制###############

    write_enable=YES #可以上传(全局控制) 删除,重命名
    local_umask=022  #本地用户上传文件的umask
    userlist_enable=YES #限制了这里的用户不能访问
    local_root  #设置一个本地用户登录后进入到的目录
    user_config_dir  #设置用户的单独配置文件,用哪个帐户登陆就用哪个帐户命名
    download_enable  #限制用户的下载权限

    chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
    chown_username=whoever #匿名上传文件所属用户名

    chroot_list_enable=YES #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
    chroot_list_file=/etc/vsftpd/chroot_list #指定限制的用户文件

    user_config_dir= #后面跟存放配置文件的目录。用来实现不同用户不同权限。
       #在vsftpd.conf文件中加入这一句,
       #在相应的目录里面,为每个用户创建自己的配置文件,用来实现不同的权限


    可以通过以下三条配置文件来控制用户切换目录。
    chroot_list_enable=YES/NO   #设置是否启用chroot_list_file配置项指定的用户列表文件。
          #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录 .默认值为yes。

    chroot_list_file=/etc/vsftpd/chroot_list #指出被锁定在自家目录中的用户的列表文件。

    chroot_list_enable=YES
    通过与chroot_local_user=YES/NO搭配能实现以下几种效果:
    1、当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
    2、当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
    3、当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
    4、当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。


    下面是个实例,希望对大家有用:

    1、只能上传。不能下载、删除、重命名。
    cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

    对于参数的详细的解释
    cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,DELE,HELP,LIST,MODE,MDTM,MKD,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER

    CWD - change working directory 更改目录
    DELE - delete a remote file 删除文件
    LIST - list remote files 列目录
    MKD - make a remote directory 新建文件夹
    NLST - name list of remote directory
    PWD - print working directory 显示当前工作目录
    RETR - retrieve a remote file 下载文件
    RMD - remove a remote directory 删除目录
    RNFR - rename from 重命名
    RNTO - rename to 重命名
    STOR - store a file on the remote host 上传文件


    # ABOR - abort a file transfer 取消文件传输
    # CWD - change working directory 更改目录
    # DELE - delete a remote file 删除文件
    # LIST - list remote files 列目录
    # MDTM - return the modification time of a file 返回文件的更新时间
    # MKD - make a remote directory 新建文件夹
    # NLST - name list of remote directory
    # PASS - send password
    # PASV - enter passive mode
    # PORT - open a data port 打开一个传输端口
    # PWD - print working directory 显示当前工作目录
    # QUIT - terminate the connection 退出
    # RETR - retrieve a remote file 下载文件
    # RMD - remove a remote directory
    # RNFR - rename from
    # RNTO - rename to
    # SITE - site-specific commands
    # SIZE - return the size of a file 返回文件大小
    # STOR - store a file on the remote host 上传文件
    # TYPE - set transfer type
    # USER - send username

    # less common commands:

    # ACCT* - send account information
    # APPE - append to a remote file
    # CDUP - CWD to the parent of the current directory
    # HELP - return help on using the server
    # MODE - set transfer mode
    # NOOP - do nothing
    # REIN* - reinitialize the connection
    # STAT - return server status
    # STOU - store a file uniquely
    # STRU - set file transfer structure
    # SYST - return system type

    2、只能下载。不能上传、删除、重命名。write_enable=NO
    3、只能上传、删除、重命名。不能下载。download_enable=NO

    4、只能下载、删除、重命名。不能上传。
    cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,RNFR,RNTO,RETR,DELE,SIZE,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST


    ###################虚拟用户设置###################

    虚拟用户使用PAM认证方式。
    pam_service_name=vsftpd  #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。

    check_shell=YES   #(注意:仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录 )
    guest_enable= YES/NO  #启用虚拟用户。默认值为NO。
    guest_username=ftp  #这里用来映射虚拟用户。默认值为ftp。
    virtual_use_local_privs=YES/NO #当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。
        #当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。


    ###################访问控制设置###################

    两种控制方式:一种控制主机访问,另一种控制用户访问。

    1、控制主机访问:
    tcp_wrappers=YES/NO

    设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。

    比如:若要仅允许192.168.10.1—192.168.10.254的用户可以连接FTP服务器,

    则在
    /etc/hosts.allow
    /etc/hosts.deny
    文件中添加以下内容:


    其格式如下:

    限制的服务:ip(网段)
    vsftpd:192.168.1.
    vsftpd:192.168.1.12
    vsftpd:192.168.1.0/255.255.255.0这里不能写成192.168.1.0/24

    2、控制用户访问:

    vsftpd.ftpusers  #用于保存不允许进行FTP登录的本地用户帐号。就是vsftp用户的黑名单

    vsftpd.user_list

    (1)设置禁止vsftpd.user_list文件中的用户登录:要在主配置文件vsftpd.conf中修改如下两项,
    userlist_enable=yes
    userlist_deny=yes
    说明:配置完以后,除了vsftpd.ftpusers文件和vsftpd.user_list文件中记录的ftp用户不能登录vsftp服务以外,其他的ftp用户都可以登录。
     

    (2)设置只允许vsftpd.user_list文件中的用户登录;同样的道理要把主配置文件vsftpd.conf 中的语句修改如下两项: 
    userlist_enable=yes
    userlist_deny=no
     说明:配置完以后,只允许vsftpd.user_list文件中记录的ftp用户能登录vsftp服务,其他的ftp用户都不可以登录。

    ###################超时设置##################

    idle_session_timeout=600 #空闲连接超时
    data_connection_timeout=120 #数据传输超时
    ACCEPT_TIMEOUT=60  #PAVS请求超时
    connect_timeout=60  #PROT模式连接超时


    ################服务器功能选项###############

    xferlog_enable=YES    #开启日记功能
    xferlog_std_format=YES   #使用标准格式
    log_ftp_protocol=NO    #当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
    pasv_enable=YES    #允许使用pasv模式
    pasv_promiscuous+NO    #关闭安全检查,小心呀.
    port_enable=YES    #允许使用port模式
    prot_promiscuous    #关闭安全检查
    tcp_wrappers=YES    #开启tcp_wrappers支持
    pam_service_name=vsftpd   #定义PAM 所使用的名称,预设为vsftpd。
    nopriv_user=nobody    #当服务器运行于最底层时使用的用户名
    pasv_address=(none)    #使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)

    #################服务器性能选项##############
    ls_recurse_enable=YES  #是否能使用ls -R命令以防止浪费大量的服务器资源
    one_process_model  #是否使用单进程模式
    listen=YES   绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
    text_userdb_names=NO   #当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名     #称。若是希望出现拥有者的名称,则将此功能开启。

    use_localtime=NO    #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
    #use_sendfile=YES    #测试平台优化

    ################信息类设置################

    ftpd_banner=welcome to FTP .  #login时显示欢迎信息.如果设置了banner_file则此设置无效
    dirmessage_enable=YES   #允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
    setproctitle_enable=YES   #显示会话状态信息,关!


    ############## 文件定义 ##################

    chroot_list_file=/etc/vsftpd/vsftpd.chroot_list  #定义不能更改用户主目录的文件
    userlist_file=/etc/vsftpd/vsftpd.user_list  #定义限制/允许用户登录的文件
    banner_file=/etc/vsftpd/banner    #定义登录信息文件的位置
    banned_email_file=/etc/vsftpd.banned_emails  #禁止使用的匿名用户登陆时作为密码的电子邮件地址
    xferlog_file=/var/log/vsftpd.log   #日志文件位置
    message_file=.message     #目录信息文件


    ############## 目录定义 #################

    user_config_dir=/etc/vsftpd/userconf  #定义用户配置文件的目录
    local_root=webdisk    #此项设置每个用户登陆后其根目录为/home/username/webdisk
           #定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录      #来说的.
    anon_root=/var/ftp     #匿名用户登陆后的根目录

    #############用户连接选项#################


    max_clients=100    #可接受的最大client数目
    max_per_ip=5    #每个ip的最大client数目
    connect_from_port_20=YES   #使用标准的20端口来连接ftp
    listen_address=192.168.0.2   #绑定到某个IP,其它IP不能访问
    listen_port=2121    #绑定到某个端口
    ftp_data_port=2020    #数据传输端口
    pasv_max_port=0    #pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。
    pasv_min_port=0    #pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。


    ##############数据传输选项#################

    anon_max_rate=51200  #匿名用户的传输比率(b/s)
    local_max_rate=5120000  #本地用户的传输比率(b/s)


    ##############安全选项#################

    Idle_session_timeout=600 #(用户会话空闲后10分钟)
    Data_connection_timeout=120 #(将数据连接空闲2分钟断)
    Accept_timeout=60  #(将客户端空闲1分钟后断)
    Connect_timeout=60  #(中断1分钟后又重新连接)
    Local_max_rate=50000  #(本地用户传输率50K)
    Anon_max_rate=30000  # (匿名用户传输率30K)

    Pasv_min_port=50000  # (将客户端的数据连接端口改在
    Pasv_max_port=60000  #50000—60000之间)

    Max_clients=200   #(FTP的最大连接数)
    Max_per_ip=4   #(每IP的最大连接数)
    Listen_port=5555  #(从5555端口进行数据连接)

    以上如果有什么不全或错误的地方,请大家与我联系,我及时改进,谢谢


    【案例1】建立基于虚拟用户的FTP服务器,并根据以下要求配置FTP服务器。

    (1)配置FTP匿名用户的主目录为/var/ftp/anon。下载带宽限制为100kB/s

    (2)建立一个名为abc,口令为xyz的FTP账户。下载带宽限制为500kB/s。

    (3)设置FTP服务器同时登录到FTP服务器的最大链接数为100;每个IP最大链接数为3;用户空闲时间超过限值为5分钟。

    mkdir /var/fpt/anon

    useradd abc
    passwd abc

    vim /etc/vsftpd/vsftpd.conf

    主要内容如下

    anonymous_enable=YES
    anon_root=/var/ftp/anon
    anon_max_rate=100000
    # Uncomment this to allow local users to log in.
    local_enable=YES
    local_max_rate=500000
    max_clients=100
    max_per_ip=3
    connect_timeout=300

     

    以上是本地的LOCAL用户

    下面是用虚拟用户来实现

     

    vim /etc/vsftpd/vuser

    内容如下

    tom
    123

     

    生成数据库文件
    db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
    chmod 600 /etc/vsftpd/vuser.db

    vim /etc/pam.d/vsftpd


    注释掉原来的内容

    然后加入

     

    auth        required    pam_userdb.so   db=/etc/vsftpd/vuser
    account     required    pam_userdb.so   db=/etc/vsftpd/vuser

    最后编辑VSFTPD.CONF加入下面两句

    guest_enable=YES
    guest_username=abc

    大家可以自行测试。

    到此,案例一完成


    【案例2】
    1、新建一分区,10G空间,ext3 文件系统,挂在到 /ftp下,作为 ftp服务器数据存放地方。

    2、四个部门:dep1,dep2, dep3, dep4,分别对应目录 /ftp/dep1,/ftp/dep2,/ftp/dep3,/ftp/dep4。另外设定一个公共目录 /ftp/public。

    3、五个用户:admin,user1,user2,user3,user4。其中:user 1/2/3/4分别对应部门dep 1/2/3/4,他们只能访问自己所属部门的目录和public目录。如:user1只能访问dep1和public目录,不能访问其它目录。admin为管理员用户,可以访问 ftp 服务器上的任何目录。

    4、用户访问权限限制:user1/2/3/4在所能访问的目录,具有上传文件、下载文件的功能,但是不能够删除文件、更改文件权限等功能。admin管理员用户对所有目录具有文件上传、下载、删除、权限更改等功能。

    5、对每个部门定制一个 quota,设置该账户的文件配额为1000个;磁盘配额为2G。

    6、匿名用户不能访问。


    第一、增加一块硬盘,然后分区,把分区挂载情况写入/etc/fstab

    # fdisk /dev/hdb
    # mkfs.ext3 /dev/hdb1
    # mkidr /ftp
    # mount /dev/hdb1 /ftp -o usrquota,grpquota

    # vim /etc/fstab
    加入下面一句

    /dev/hdb1               /ftp                    ext3    defaults,usrquota,grpquota      0 0


    第二、建立用户组和用户和相应的文件夹并更改权限,达到题目要求

    # groupadd dep1
    # groupadd dep2
    # groupadd dep3
    # groupadd dep4
    # groupadd boobooke

    # usradd  -G dep1,boobooke user1
    # usradd  -G dep2,boobooke user2
    # usradd  -G dep3,boobooke user3
    # usradd  -G dep4,boobooke user4
    # usradd  -G dep1,dep2,dep3,dep4,boobooke admin

    # passwd user1
    # passwd user2
    # passwd user3
    # passwd user4
    # passwd admin

    # mkdir /ftp/dep1
    # mkdir /ftp/dep2
    # mkdir /ftp/dep3
    # mkdir /ftp/dep4
    # mkdir /ftp/public

    # chown uesr1:dep1 /ftp/dep1
    # chown uesr2:dep2 /ftp/dep2
    # chown uesr3:dep3 /ftp/dep3
    # chown uesr4:dep4 /ftp/dep4
    # chown admin:boobooke /ftp/public

    # chmod 770 /ftp/dep1
    # chmod 770 /ftp/dep2
    # chmod 770 /ftp/dep3
    # chmod 770 /ftp/dep4
    # chmod 770 /ftp/pubic


    最终结果如下

    -rw------- 1 root  root      8192 Jul 26 11:46 aquota.group
    -rw------- 1 root  root      7168 Jul 26 11:46 aquota.user
    drwxrwx--- 2 user1 dep1      4096 Jul 25 20:47 dep1
    drwxrwx--- 2 user2 dep2      4096 Jul 25 20:47 dep2
    drwxrwx--- 2 user3 dep3      4096 Jul 25 20:47 dep3
    drwxrwx--- 2 user4 dep4      4096 Jul 25 20:47 dep4
    drwx------ 2 root  root     16384 Jul 25 20:44 lost+found
    drwxrwx--- 2 admin boobooke  4096 Jul 25 20:48 public

    第三、创建quota,配置磁盘配额

    #mount /dev/hdb1 /ftp -o usrquota,grpquota
    # quotacheck -cuvg /dev/sdb1
    # quotaon -a
    # edquota -g dep1

    Disk quotas for group dep1 (gid 503):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/hdb1                         0    1024000    2048000          0      500     1000

    # edquota -g -p dep1 dep2 dep3 dep4(-u -g将源用户组和群组的quota设置套用至其他用户或群组。)


    第四、编辑VSFTPD.CONF

    # vim /etc/vsftpd/vsftpd.conf

    anonymous_enable=NO

    加入
    local_root=/ftp
    user_config_dir=/etc/vsftpd/ftp_config_dir 


    开启chroot

    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list


    第五、建立用户的独立文件

    # mkdir /etc/vsftpd/ftp_config_dir
    # vim /etc/vsftpd/ftp_config_dir/user1

    cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,HELP,LIST,MODE,MDTM,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER


    # cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user2
    # cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user3
    # cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user4

  • 相关阅读:
    正则表达式
    python最新版mplfinance中文乱码解决方法
    Python学习笔记:pandas.read_csv分块读取大文件(chunksize、iterator=True)
    pandas,读取或存储DataFrames的数据到mysql中
    BaoStock:使用python的baostock接口,查询季频盈利能力
    win10解决Mysql net start mysql启动,提示发生系统错误 5 拒绝访问
    mysql5.7 本地计算机上的mysql 服务启动后停止 的问题
    获取A股所有的股票代码
    phpcms <= v9.15 任意文件读取漏洞的分析和利用
    ubuntu系统安装搜狗法并设置不能切换的问题解决
  • 原文地址:https://www.cnblogs.com/ivantang/p/4682483.html
Copyright © 2011-2022 走看看