快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

FTP相关内容

  FTP作为互联网上使用最多的协议之一,常常会使用到。实现这个协议的软件也非常多,今天我们基于Red Hat Enterprise Linux 5上默认vsftpd这个软件来讨论一下,ftp服务器某些肤浅的功能。

  一、基本配置

  /etc/vsftpd/vsftpd.conf为vsftp程序的主配置文件,其中默认添加了如下的参数:

  anonymous_enable=YES

  #打开这个选项可以支持用户匿名登录;

  local_enable=YES

  #这个选项等于YES,支持本地用户登录。如果没有这个选项,默认为NO。

  write_enable=YES

  #这个选项置为YES可以支持用户创建文件(注意:用户对要创建文件的目录必须有“w”和“x”权限。)

  local_umask=022

  #本地用户创建文件或目录时的umask(掩码)

  anon_upload_enable=YES

  #允许匿名用户上传文件

  anon_mkdir_write_enable=YES

  #允许匿名用户创建目录

  dirmessage_enable=YES

  #打开这个选项,当用户进入某个目录时,会在目录下搜索.message文件,并显示到#屏幕上。这个选项可以配合message_file选项。

  xferlog_enable=YES

  #如果这个选项为YES,则会记录上传和下载信息,默认记录到/var/log/vsftpd.log文

  #件中,但这个文件的位置可以由vsftpd_log_file选项来控制。

  #注意:当xferlog_std_format设置为NO的时候以上两个选项才能生效。

  xferlog_std_format=YES

  xferlog_file=/var/log/xferlog

  #以上两个参数是将传输的日志记录以xferlog的标准格式记录在xferlog_file选项指

  #定的日志文件中。

  connect_from_port_20=YES

  #指定主动模式的数据端口

  chown_uploads=YES

  chown_username=whoever

  #若chown_uploads=YES,并且chown_username=whoever,则上传的文件的所有者#会变成whoever。

  idle_session_timeout=600

  #在idle_session_timeout限定的时间内,如果客户端没有任何操作,服务器将断开#连接,单位为秒(s)。

  data_connection_timeout=120

  #数据连接超时时间,即如果发出数据连接经过data_connection_timeout后没有响

  #应,则断开连接,单位也为秒(s)。

  nopriv_user=ftpsecure

  #?????????

  userlist_enable=YES

  userlist_file = /etc/vsftpd/user_list

  #以上两个参数的作用是控制用户登录

  # vsftpd程序通过两种方式来限制用户登录:

  1)       通过userlist_enable与userlist_file共同确定某些用户是否可以通过验证,即在userlist_file指定的文件中出现的用户,不被允许登录。

  当一个用户只在userlist_file文件中出现时(即不再ftpusers文件中出现),登录提示信息如下:

  >Name (localhost:root): root

  >530 Permission denied.

  >Login failed.

  2)       通过/etc/vsftpd/ftpusers文件限制,当一个用户出现在ftpusers这个文件中,则这个用户不能通过密码验证。提示信息如下,好像是密码错误一样:

  >Name (localhost:root): root

  >331 Please specify the password.

  >Password:

  >530 Login incorrect.

  >Login failed.

  注:ftpusers文件名的制定在/etc/pam.d/vsftpd中,

  auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

  意思是从/etc/vsftpd/ftpusers取数据,把取出的每行当做一个用户名,如果某个用户名,则拒绝这个用户登录。

  ascii_upload_enable=YES

  ascii_download_enable=YES

  #允许客户端以ASCII的模式上传和下载文件。即把数据转换为ASCII码形式传输。

  ftpd_banner=Welcome to blah FTP service.

  #当客户端登录的时候,将后面的字符串显示在客户端。

  banner_file = /somefile

  #这个选项可以将somefile中的信息输出到客户端。

  deny_email_enable=YES

  banned_email_file = /somefile

  #开启deny_email_enable选项,可以阻止密码是出现在somefile中的Email地址的

  #匿名用户。

  chroot_local_user=YES

  chroot_list_enable=YES

  chroot_list_file=/etc/vsftpd/chroot_list

  #限定某些用户在登录时是否执行chroot,这三个选项需要配合使用,其关系如下:

  1)       chroot_local_user       no

  chroot_list_enable      no     任何系统账号不受chroot限制

  2)       yes

  no         所有系统帐号受chroot限制

  3)       no

  yes       只有chroot list文件中的用户受限制

  4)       yes

  yes       只有chroot文件中的用户不受限制

  ls_recurse_enable=YES

  #此选项为YES时,支持ls –R命令,即可以递归显示某个目录的内容。

  listen=YES

  #若listen=YES,则vsftpd服务以standalone模式启动,若listen=NO,则受到超级守

  #护进程xinetd管理。

  pam_service_name=vsftpd

  #指定vsftpd使用的pam配置文件

  tcp_wrappers=YES

  #是否支持tcp wrapper进行访问控制。

  二、两个实验

  1.       虚拟用户——映射到一个本地用户

  Step 1) 创建虚拟用户的数据库.

  通过pam_userdb这个模块来认证虚拟用户,这需要一个通用格式的”用户名/密码”格式的数据库文件。通过db_load这个命令来创建(注:需要安装db4-4.3.29-10.el5及db4-utils-4.3.29-10.el5.i386这两个包),步骤如下:

  1)       创建一个包含用户名和密码的文本文件,

  #vi logins.txt

  tom

  redhat

  jerry

  123456

  注意名字与密码之前不能有空格,这个文件表示用户tom密码是redhat,而用户jerry的密码是123456.

  2)       将文本转换为数据库文件,

  #db_load -T -t hash -f logins.txt /etc/vsftpd/login.db

  #chmod 600 /etc/vsftpd/login.db

  Step 2) 创建一个pam配置文件

  1)       #vi /etc/pam.d/ftp

  auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login

  account required /lib/security/pam_userdb.so db=/etc/vsftpd/login

  (一定要在主配置文件中修改相应的选项,pam_service_name=ftp)

  Step 3) 创建虚拟用户要映射到的用户,

  1)       添加用户

  [root@server1 Server]# useradd -d /home/ftpsite virtual

  [root@server1 Server]# ll -d /home/ftpsite/

  drwx------ 3 virtual virtual 4096 Nov 27 19:56 /home/ftpsite/

  2)       拷入一些文件,以便测试登录效果,

  cp /etc/hosts /home/ftpsite

  chown virtual.virtual /home/ftpsite/hosts

  Step 4) 修改主配置文件,

  1)       开启虚拟用户映射的功能,并制定映射到的用户。(其余具体配置请参考“一、基本配置”,)

  guest_enable=YES

  guest_username=virtual

  Step 5) 重启vsftpd服务,

  [root@server1 ~]# service vsftpd restart

  Shutting down vsftpd:                                      [  OK  ]

  Starting vsftpd for vsftpd:                                [  OK  ]

  Step 6) 测试

  Launch another shell session (or background vsftpd with CTRL-Z and then "bg").

  Here is an example of an FTP session:

  ftp localhost 10021

  Connected to localhost (127.0.0.1).

  220 (vsFTPd 2.0.5)

  Name (localhost:root): tom

  331 Please specify the password.

  Password:(redhat)

  230 Login successful.

  Remote system type is UNIX.

  Using binary mode to transfer files.

  ftp> pwd

  257 "/"

  ftp> ls

  227 Entering Passive Mode (127,0,0,1,117,135)

  150 Here comes the directory listing.

  226 Transfer done (but failed to open directory).

  ftp> size hosts

  213 147

  ftp>

  注意: 执行ls命令时,出现"failed to open directory". 这是因为目录/home/ftpsite 不是一个world_readable的目录。可以通过anon_world_readable_only=NO使用户可以看到目录中的内容。

  2.       分用户配置

  实验要求:有两个用户,tom和jerry,要求tom只能读取和下载,jerry可以读取、下载和上传。

  Step 1) 激活分用户配置支持

  修改/etc/vsftpd/vsftpd.conf文件,

  user_config_dir=/etc/vsftpd/vsftpd_user_conf

  这个选项是指定用户配置文件的位置。

  mkdir /etc/vsftpd/vsftpd_user_conf

  Step 2)授予tom“读”权限

  在vsftpd_user_conf目录下建立一个与tom同名的文件,加入对tom生效的参数,

  #echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/tom

  #echo "write_enable=NO" >>/etc/vsftpd/vsftpd_user_conf/tom

  Step 3) 授予jerry“读写”权限

  echo "anon_world_readable_only=NO">/etc/vsftpd/vsftpd_user_conf/jerry

  echo "write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/jerry

  echo "anon_upload_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/jerry

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论