README
上传用户:ig0539
上传日期:2022-05-21
资源大小:181k
文件大小:5k
源码类别:

Ftp客户端

开发平台:

C/C++

  1. This example shows how to set up vsftpd / PAM with "virtual users".
  2. A virtual user is a user login which does not exist as a real login on the
  3. system. Virtual users can therefore be more secure than real users, beacuse
  4. a compromised account can only use the FTP server.
  5. Virtual users are often used to serve content that should be accessible to
  6. untrusted users, but not generally accessible to the public.
  7. Step 1) Create the virtual users database.
  8. We are going to use pam_userdb to authenticate the virtual users. This needs
  9. a username / password file in "db" format - a common database format.
  10. To create a "db" format file, first create a plain text files with the
  11. usernames and password on alternating lines.
  12. See example file "logins.txt" - this specifies "tom" with password "foo" and
  13. "fred" with password "bar".
  14. Whilst logged in as root, create the actual database file like this:
  15. db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
  16. (Requires the Berkeley db program installed).
  17. NOTE: Many systems have multiple versions of "db" installed, so you may
  18. need to use e.g. db3_load for correct operation. This is known to affect
  19. some Debian systems. The core issue is that pam_userdb expects its login
  20. database to be a specific db version (often db3, whereas db4 may be installed
  21. on your system).
  22. This will create /etc/vsftpd_login.db. Obviously, you may want to make sure
  23. the permissions are restricted:
  24. chmod 600 /etc/vsftpd_login.db
  25. For more information on maintaing your login database, look around for
  26. documentation on "Berkeley DB", e.g.
  27. http://www.sleepycat.com/docs/utility/index.html
  28. Step 2) Create a PAM file which uses your new database.
  29. See the example file vsftpd.pam. It contains two lines:
  30. auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
  31. account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
  32. This tells PAM to authenticate users using our new database. Copy this PAM
  33. file to the PAM directory - typically /etc/pam.d/
  34. cp vsftpd.pam /etc/pam.d/ftp
  35. (Note - if you set pam_service_name to e.g. vsftpd instead, you'll need to copy
  36. to /etc/pam.d/vsftpd).
  37. Step 3) Set up the location of the files for the virtual users.
  38. useradd -d /home/ftpsite virtual
  39. ls -ld /home/ftpsite
  40. (which should give):
  41. drwx------    3 virtual  virtual      4096 Jul 30 00:39 /home/ftpsite
  42. We have created a user called "virtual" with a home directory "/home/ftpsite".
  43. Let's add some content to this download area:
  44. cp /etc/hosts /home/ftpsite
  45. chown virtual.virtual /home/ftpsite/hosts
  46. Step 4) Create your vsftpd.conf config file.
  47. See the example in this directory. Let's go through it line by line:
  48. anonymous_enable=NO
  49. local_enable=YES
  50. This disables anonymous FTP for security, and enables non-anonymous FTP (which
  51. is what virtual users use).
  52. write_enable=NO
  53. anon_upload_enable=NO
  54. anon_mkdir_write_enable=NO
  55. anon_other_write_enable=NO
  56. These ensure that for security purposes, no write commands are allowed.
  57. chroot_local_user=YES
  58. This makes sure that the virtual user is restricted to the virtual FTP area
  59. /home/ftpsite we set up above.
  60. guest_enable=YES
  61. guest_username=virtual
  62. The guest_enable is very important - it activates virtual users! And
  63. guest_username says that all virtual users are mapped to the real user
  64. "virtual" that we set up above. This will also determine where on the
  65. filesystem the virtual users end up - the home directory of the user
  66. "virtual", /home/ftpsite.
  67. listen=YES
  68. listen_port=10021
  69. This puts vsftpd in "standalone" mode - i.e. not running from an inetd. This
  70. means you just run the vsftpd executable and it will start up. This also
  71. makes vsftpd listen for FTP requests on the non-standard port of 10021 (FTP
  72. is usually 21).
  73. pasv_min_port=30000
  74. pasv_max_port=30999
  75. These put a port range on passive FTP incoming requests - very useful if
  76. you are configuring a firewall.
  77. Copy the example vsftpd.conf file to /etc:
  78. cp vsftpd.conf /etc/
  79. Step 5) Start up vsftpd.
  80. Go to the directory with the vsftpd binary in it, and:
  81. ./vsftpd
  82. If all is well, the command will sit there. If all is not well, you will
  83. likely see some error message.
  84. Step 6) Test.
  85. Launch another shell session (or background vsftpd with CTRL-Z and then "bg").
  86. Here is an example of an FTP session:
  87. ftp localhost 10021
  88. Connected to localhost (127.0.0.1).
  89. 220 ready, dude (vsFTPd 1.1.0: beat me, break me)
  90. Name (localhost:chris): tom
  91. 331 Please specify the password.
  92. Password:
  93. 230 Login successful. Have fun.
  94. Remote system type is UNIX.
  95. Using binary mode to transfer files.
  96. ftp> pwd
  97. 257 "/"
  98. ftp> ls
  99. 227 Entering Passive Mode (127,0,0,1,117,135)
  100. 150 Here comes the directory listing.
  101. 226 Transfer done (but failed to open directory).
  102. ftp> size hosts
  103. 213 147
  104. ftp>
  105. Comments:
  106. The password we gave was "foo".
  107. Do not be alarmed by the "failed to open directory". That is because the
  108. directory /home/ftpsite is not world readable (we could change this
  109. behaviour if we wanted using anon_world_readable_only=NO but maybe we want
  110. it this way for security.
  111. We can see that we have access to the "hosts" file we copied into the virtual
  112. FTP area, via the size command.