Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1426118
  • 博文数量: 188
  • 博客积分: 1784
  • 博客等级: 上尉
  • 技术积分: 2772
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-05 22:20
个人简介

发上等愿,结中等缘,享下等福;择高处立,就平处坐,向宽处行。

文章分类

全部博文(188)

文章存档

2020年(12)

2019年(11)

2018年(4)

2017年(3)

2016年(11)

2015年(22)

2014年(19)

2013年(25)

2012年(32)

2011年(49)

分类: LINUX

2016-09-27 16:39:37

在安装前查看是否已安装vsftpd

[root@localhost ~]# rpm -q vsftpd
vsftpd-3.0.2-9.el7.x86_64 

关闭SELINUX
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出

setenforce 0 #使配置立即生效
  
如果有显示类似以上的信息,说明已经安装vsftpd,如果没有,用yum安装:

[root@localhost ~]# yum -y install vsftpd 

  查看一下vsftpd安装在哪:

[root@localhost ~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz 

  启动vsftpd服务:

[root@localhost ~]# systemctl start vsftpd.service 

配置

  对于从未使用过vsftpd的Linux菜鸟来说,在配置之前,简单了解一下vsftpd服务的过程相当有必要的。安装完默认情况下是开启匿名登录的,对应的是 /var/ftp 目录,这时只要服务启动了,就可以直接连上FTP了。

pcvcdeiMac:~ pcvc$ ftp 192.168.0.117
Connected to 192.168.0.117.
220 (vsFTPd 3.0.2)
Name (192.168.0.117:pcvc): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||37296|).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Jun 10  2014 pub
226 Directory send OK. 

  然而,一般情况下我们都是按分配的用户去访问各自的目录,vsftpd的用户分为系统用户和虚拟用户,系统用户也就是系统实际存在的Linux用户,而虚拟用户则是存在于配置文件里面的。系统用户方式比较简单,创建系统用户,确保用户能对FTP目录进行读写就可以了。以下是创建普通Linux用户,详见 useradd 命令。其实,从以上连接ftp信息可以看出,有的系统已默认创建了名为ftp的用户了。

[root@localhost ~]# useradd -g root -M -d /var/www/html -s /sbin/nologin ftpuser
[root@localhost ~]# passwd ftpuser
[root@localhost ~]# 输入密码 

  把 /var/www/html 的所有权给ftpuser.root

[root@localhost ~]# chown -R ftpuser.root /var/www/html 

  这样就可以通过ftpuser用户连接FTP了。至于虚拟用户需要做的步骤就比较多了。首先虚拟用户的用户认证是通过pam方式去认证的,pam文件里面指定了认证的db文件,db文件又是通过明文用户名和密码文件生成而来,为何要这么绕我也不大清楚。那么首先我们要指定pam文件,这个在 /etc/vsftpd/vsftpd.conf 配置文件是通过pam_service_name=vsftpd 配置指定的,其位置是 /etc/pam.d/vsftpd,编辑该文件,把文件内容全部注释掉,加上以下两行:

   64位系统:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
  32位系统:
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

  db=/etc/vsftpd/vuser_passwd 指定了db文件的位置,接下来就是生成db文件,由于db文件是通过明文用户名和密码文件生成而来,所以先创建一个保存明文用户名和密码的文件 vuser_passwd.txt

[root@localhost ~]# vi /etc/vsftpd/vuser_passwd.txt 

  该文件奇行为用户名,偶行为密码:
pcvc
iampasswd

  然后通过以下命令生成db文件:

[root@localhost ~]# cd /etc/vsftpd
[root@localhost vsftpd]# db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db 

  至此用户的认证就知道怎么一回事了,如果要添加新的用户,在编辑 vuser_passwd.txt 后要再次生成一下db文件。然后现在每个用户的具体配置,如指向目录、可读写权限等又是在哪配置的呢,原来它是通过一个用户对应一个配置文件来实现的,且这个文件必须用FTP用户名去做文件名,建一个目录专门存放这些文件:

[root@localhost vsftpd]# mkdir vuser_conf
[root@localhost vsftpd]# vi vuser_conf/pcvc 

  文件内容大致如下:
local_root=/var/www/pcvcnet
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

  接下来就是根据需要和以上各文件信息来修改配置文件 /etc/vsftpd/vsftpd.conf 了,启用或更改以下配置的值:
anonymous_enable=NO  # 禁用匿名登录
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES  # 启用限定用户在其主目录下

 以下配置是需要自己手工添加:
guest_enable=YES  # 设定启用虚拟用户功能
guest_username=ftpuser  # 指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
user_config_dir=/etc/vsftpd/vuser_conf  # 虚拟用户配置文件存放的路径
allow_writeable_chroot=YES  # 如果启用了限定用户在其主目录下需要添加这个配置

  用 systemctl restart vsftpd.service 重新启动服务即可用虚拟用户登录FTP了。

  如果系统启用了防火墙和SELinux,那么还要做以下配置。

  防火墙添加FTP服务:

[root@localhost vsftpd]# firewall-cmd --permanent --zone=public --add-service=ftp
[root@localhost vsftpd]# firewall-cmd --reload 

  设置SELinux:

[root@localhost vsftpd]# getsebool -a | grep ftp
[root@localhost vsftpd]# setsebool -P ftpd_full_access on 

添加新 ftp 用户

  1. 编辑 vuser_passwd.txt 文件,添加用户名和密码:

# cd /etc/vsftpd
# vi vuser_passwd.txt

new_ftp_user
new_ftp_user_password 

  2. 重新生成 vuser_passwd.db 文件:

# db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db 

  3. 创建用户配置文件:

# cd vuser_conf
# vi new_ftp_user 

  配置文件内容:

local_root=/new/ftp/directory
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES 

  3. 重启服务:
# systemctl restart vsftpd.service

4、公网端口映射连接

那麼什麼是被動式連線呢?我們可以使用底下的圖示來作個簡略的介紹喔:

FTP 的被動式資料流連線流程
圖 21.1-3、FTP 的被動式資料流連線流程
  1. 用戶與伺服器建立命令通道:
    同樣的需要建立命令通道,透過三向交握就可以建立起這個通道了。

  2. 用戶端發出 PASV 的連線要求:
    當有使用資料通道的指令時,用戶端可透過命令通道發出 PASV 的被動式連線要求 (Passive 的縮寫), 並等待伺服器的回應;

  3. FTP 伺服器啟動資料埠口,並通知用戶端連線:
    如果你的 FTP 伺服器是能夠處理被動式連線的,此時 FTP 伺服器會先啟動一個埠口在監聽。 這個埠口號碼可能是隨機的,也可以自訂某一範圍的埠口,端看你的 FTP 伺服器軟體而定。 然後你的 FTP 伺服器會透過命令通道告知用戶端該已經啟動的埠口 (圖中的 port PASV), 並等待用戶端的連線。

  4. 用戶端隨機取用大於 1024 的埠口進行連接:
    然後你的用戶端會隨機取用一個大於 1024 的埠號來對主機的 port PASV 連線。 如果一切都順利的話,那麼你的 FTP 資料就可以透過 port BB 及 port PASV 來傳送了。

發現上面的不同點了嗎?被動式 FTP 資料通道的連線方向是由用戶端向伺服器端連線的喔! 如此一來,在 NAT 內部的用戶端主機就可以順利的連接上 FTP Server 了!但是,萬一 FTP 主機也是在 NAT 後端那怎麼辦...呵呵!那可就糗了吧~ @_@這裡就牽涉到更深入的 DMZ 技巧了,我們這裡暫不介紹這些深入的技巧,先理解一下這些特殊的連線方向, 這將有助於你未來伺服器架設時候的考慮因素喔!

此外,不曉得你有無發現,透過 PASV 模式,伺服器在沒有特別設定的情況下,會隨機選取大於 1024 的埠口來提供用戶端連接之用。那麼萬一伺服器啟用的埠口被搞鬼怎麼辦?而且, 如此一來也很難追蹤來自入侵者攻擊的登錄資訊啊!所以,這個時候我們可以透過 passive ports 的功能來『限定』伺服器啟用的 port number 喔!

思路: 要确定FTP数据端口使用固定的。

配置 /etc/vsftpd/vsftpd.conf

pasv_enable=yes (Default: YES )  设置是否允许pasv模式
pasv_promiscuous=no (Default: NO ) 是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
pasv_max_port=10240  (Default: 0 (use any port) ) pasv使用的最大端口
pasv_min_port=1024  (Default: 0 (use any port) ) pasv使用的最小端口
pasv_address (Default: (none - the address is taken from the incoming connected socket) ) pasv模式中服务器传回的ip地址
例如:
pasv_enable=YES
pasv_min_port=5378
pasv_max_port=5379
pasv_promiscuous=YES
pasv_address=218.9.54.61

5、出现浏览器和客户端连接正常,资源管理器连接不上,出现227、、、(0,0,0,0,21,3)时,检查ipv4与ipv6监听是否正常:
修改ipv4:listen=YES
修改ipv6:listen_ipv6=NO



. 常见问题:
1 553 Could not create file
一般都是SELinux的问题,设置SELinux的一个值,重启服务器即可。
setsebool -P ftpd_disable_trans 1 
service vsftpd restart
2 500 OOPS: bad bool value in config file for: write_enable
注意你的CentOS FTP服务文件中保证每一行最后没有任何空格,一般出错就是在多余的空格上。
3 虚拟用户上传后默认权限为:600,用户无法下载文件
在配置文件中添加或修改anon_umask项的值。如anon_umask=022或000
550错误的解决办法
# setsebool -P ftp_home_dir 1
5 mount共享文件夹给ftp用户使用

例如:[root@MKB ~]# cat /etc/passwd

 执行结果:root:x:0:0:root,chfn,xiaomage,sdad:/root:/bin/bash

 格式:(用户名:密码:UID:GID:主组,附加组:家目录:用户默认的shell)
如果把读写权限分配给指定linux用户,需要添加两个参数
 mount -t cifs //pc机器名/Templates /mnt/Templates/ -o username=jack,password=****,gid=501,uid=501 



使用命令添加ftp用户
1 添加ftp用户,命令格式:
#adduser -d /目录路径 -g ftp -s /sbin/nologin 用户名
如使用:#adduser -d /opt/dongge -g ftp -s /sbin/nologin dongge
增加了一个名为dongge的用户,它的目录属于/opt/dongge下面,属于ftp用户组。此用户是不可以登陆我们终端服务器的。
2 添加密码:
#passwd dongge
设置用户名为FTPUSER的用户在目录下可以读写的权限
#chown -R dongge:ftp /opt/dongge/
3 目录挂载:
如果我们想把/opt/dongge目录挂到我们的ftp目录下面,可以使用mount命令
#mount –-bind /opt/dongge /var/ftp/dongge
这样我们就完成了添加用户与挂载目录的配置。
 支持http下载
编辑/etc/httpd/conf/httpd.conf文件:
#vi /etc/httpd/conf/httpd.conf
添加如下代码:
Alias /fileshare "/var/ftp/ftpuser1"
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
重启httpd服务,即可使用来访问并下载所需要文件:)
偷懒vsftp的配置方法
完成步骤1,2,3.1后,直接将如下代码添加到/etc/vsftpd/vsftpd.conf文件中:
write_enable=YES 可写
anon_umask=022 掩码
anon_world_readable_only=NO 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

重启vsftpd服务即可



阅读(6087) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~