CentOS下ftp服务器安装流程

2 篇文章 0 订阅
1 篇文章 0 订阅

#一、CentOS安装
1.查看是否安装vsftpd rpm -qa | grep vsftpd

2.安装服务器 yum -y install vsftpd

3.启动FTP服务service vsftpd start

4.将FTP服务加入自动启动systemctl enable vsftpd

5.查看ftp状态 service vsftpd status

(ps:未装yum请自行安装)

#二、建立本地虚拟用户,本机测试
若不是超级用户root,请使用 su 切换。区分root和普通用户,请看命令起始标志,若是# 则为超级用户root,若是$ 则为普通用户。

###1.匿名用户测试(本机测试,亦可用cmd测试,linux地址可用ifconfig查看)
若以下测试成功,则ftp服务器能够使用,如出错且无法在文档内搜索到解决方案,请自觉在网络上搜索并完善本文档。
(1)vsftpd的匿名用户默认只支持下载权限
[root@localhost /]# ftp 127.0.0.1 #测试ftp用匿名用户登陆到本地服务器
(ps:未安装ftp请自行安装)

Connected to 127.0.0.1.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): anonymous #匿名用户
331 Please specify the password.
Password: 直接回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

登陆成功(默认vsftp是开启匿名登录)
接下来测试匿名用户上传与下载

[root@localhost ~]# touch /var/ftp/pub/test.txt 先在匿名用户下载目录创建一个test.txt文件
[root@localhost /]# cd root(cd ~)
[root@localhost ~]# touch test1.txt 进入根目录创建一个test1.txt文件,作为上传测试
pub只能用来下载文件,所有者为root

ftp> cd pub
ftp> ls
227 Entering Passive Mode (127,0,0,12,92,5)
150 Here comes the directory listing.
-rw-r–r-- 1 0 0 6 Dec 28 14:59 test.txt
226 Directory send OK.
ftp> mget test.txt 下载text.txt
mget test.txt?
227 Entering Passive Mode (127,0,0,12,123,33)
150 Opening BINARY mode data connection for test.txt (6 bytes).
226 File send OK.
6 bytes received in 0.0047 seconds (1.2 Kbytes/s)
ftp> !ls 测试是否下载到本地
anaconda-ks.cfg install.log install.log.syslog test1.txt test.txt 下载成功
ftp> put test1.txt 上传test1.txt
local: test1.txt remote: test1.txt
200 PORT command successful. Consider using PASV.
550 Permission denied. 请求被拒绝,说明没有上传权限
ftp> delete test.txt
550 Permission denied. 请求被拒绝,说明没有删除权限

(2)让匿名用户支持上传功能,下载,创建目录文件的权限
要实现这个功能,必须做三件事情(测试环境是在关闭selinux情况下)
修改/etc/sysconfig/selinux(或 /etc/selinux/config)文件(用vi打开):
#SELINUX=enforcing 改成 permissive 或 disabled
•enforcing强制模式,只要SELinux不允许,就无法执行
•permissive警告模式,将该事件记录,依然允许执行
•disabled关闭SELinux
•停用、启用需要重启计算机servic
•使用setenforce切换enforcing与permissive模式不需要重启计算机
SELINUX=disabled
重启生效,如果不想重启,用命令
#setenforce 0
(ps:建议配置完config后重启Linux)
(1修改/etc/vsftpd/vsftpd.conf 去掉注释anon_upload_enable=YES
(2修改/etc/vsftpd/vsftpd.conf 去掉注释anon_mkdir_write_enable=YES
以上两个步骤如下:
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
(在修改主配置文件前,请一定记得!!!

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak)

25 # has an effect if the above global write enable is activated. Also, you will
26 # obviously need to create a directory writable by the FTP user.
27 anon_upload_enable=YES
28 #
29 # Uncomment this if you want the anonymous FTP user to be able to create
30 # new directories.
31 anon_mkdir_write_enable=YES
32 #
33 # Activate directory messages - messages given to remote users when they
34 # go into a certain directory.
35 dirmessage_enable=YES
(修改后可通过
#diff /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 比较
每行的值都不要有空格,否则启动时会出现错误
举个例子,假如在listen=YES后多了个空格,那我启动时就出现如下错误:500 OOPS: bad bool value in config file for: listen )
(3文件系统中FTP匿名用户对某个目录有写权限
[root@localhost ~]# cat /etc/passwd |grep ftp
ftp❌14:50:FTP User:/var/ftp:/sbin/nologin/var/ftp

#ftp用户的家目录 /sbin/nologin 不支持系统登录,只能作为虚拟用户用来登录vsftpd
#虚拟用户和本地用户的区别:虚拟用户限制了功能,即只能使用ftp协议,不能登录本机;本地用户是用来登陆linux的,和root类似,只是有权限上的区别
创建一个名为put目录,并定义这个文件的所有者为ftp

[root@localhost ftp]# mkdir put
[root@localhost ftp]# chown ftp put #修改文件所有者为ftp
[root@localhost ftp]# ll #L的小写字母,不是一!
总计 8
drwxr-xr-x 2 root root 4096 2007-12-13 pub
drwxr-xr-x 2 ftp root 4096 12-29 18:13 put
[root@localhost ftp]# service vsftpd restart 重启vsftpd服务

修改 /etc/vsftpd/vsftpd.conf 后须重启才能生效!
提示:要想让匿名用户支持删除和更名权限,必须在vsftpd.conf加入以下参数anon_other_write_enable=YES 允许匿名账号具有删除.更名权限

put只能用来下载文件,所有者为ftp
[root@uhome ~]# ftp 127.0.0.1 测试结果
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.0.5)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,116,27).
150 Here comes the directory listing.
drwxrwxrwx 2 0 0 4096 Mar 05 02:28 pub
drwxrwxrwx 2 14 0 4096 Mar 05 01:31 put
226 Directory send OK.
ftp> cd put
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (127,0,0,1,186,61).
150 Here comes the directory listing.
226 Directory send OK.
ftp> !ls
anaconda-ks.cfg install.log.syslog test.txt 模板 图片 下载 桌面
install.log test1.txt 公共的 视频 文档 音乐
ftp> put test1.txt
local: test1.txt remote: test1.txt
227 Entering Passive Mode (127,0,0,1,240,27).
150 Ok to send data.
226 File receive OK.
ftp> ls
227 Entering Passive Mode (127,0,0,1,238,74).
150 Here comes the directory listing.
-rw------- 1 14 50 0 Mar 05 02:30 test1.txt
226 Directory send OK.

###2.匿名用户测试(windos cmd测试,linux地址可用ifconfig查看)

在win端访问虚拟机端ftp服务器注意事项
首先,在shell下输入“service vsftpd start”来启动ftp。然后在shell下输入“setup”,进入图形界面的系统设置,点击firewall configuration,让它不阻止ftp,实在不行,就把firewall configuration给disable了。

①打开“cmd”命令窗口
②先用“ping”测试与服务器之间的连通性
这里写图片描述
③用“ftp”连接服务器,并登录账户
这里写图片描述
④下载文件 get (默认有下载权限)
查看客户端文件
这里写图片描述
下载
这里写图片描述
⑤上传文件 put (需修改配置文件)
这里写图片描述
报错vsFTPd的553 Could not create file错误
由于是匿名用户
(1检查主配置文件vsftpd.conf文件:
18 write_enable=YES
31 anon_mkdir_write_enable=YES
anon_other_write_enable=YES
取消前面的注释符 #
(2查看ftp目录:

cat /etc/passwd | grep ftp
ftp❌107:65534::/home/ftp:/bin/false

ftp目录为/home/ftp

chown root:root /home/ftp #/home/ftp的所有者是root用户
chmod -R 777 /home/ftp #修改/home/ftp的权限为777(最大权限)
但这样是不能上传文件的。因为这是匿名用户,当前目录所有者是root用户; 真的要上传文件在该目录下建立一个文件夹如名字是upload,
mkdir /home/ftp/upload
chown ftp:root /home/ftp/upload
然后切换到upload 文件内,再试一次。
这里写图片描述
⑥创建文件夹 mkdir
这里写图片描述
⑦查看目录及文件的权限 dir
这里写图片描述
⑧删除文件 del
这里写图片描述

3.添加ftp测试帐号和目录
(1)先检查一下nologin的位置,通常在/usr/sbin/nologin或者/sbin/nologin下。使用下面的命令创建帐户,该命令指定了 /home/ftp/www为用户username的家目录,可以自己定义帐户名和目录:
#useradd -d /home/ftp/www -s /sbin/nologin username
地址 账号性质 用户名
#虚拟用户和本地用户的区别:虚拟用户限制了功能,即只能使用ftp协议,不能登录本机;本地用户是用来登陆linux的,和root类似,只是有权限上的区别
账号性质: 虚拟用户 /sbin/nologin 本地用户 /bin/bash
修改该帐户密码:
#passwd username
查看ftp用户的家目录:
通过/etc/passwd

(2)建立虚拟账户访问FTP服务器
注意!!此方法为redhat下的编程,请改成fedora的表达方式
1.创建用户数据库
(1)创建用户文本文件先建立用户文本文件vsftpd_login.txt
[root@red-hat-5 ~]# touch /etc/vsftpd/vsftpd_login.txt #文件名可更改
[root@red-hat-5 ~]# echo username >>/etc/vsftpd/vsftpd_login.txt #生成登录账号,可生成多个账号,但是用户的家目录为对应的虚拟用户家目录
[root@red-hat-5 ~]# echo PASSWD >>/etc/vsftpd/vsftpd_login.txt #生成登录密码
[root@red-hat-5 ~]# cat /etc/vsftpd/vsftpd_login.txt #查看数据库文本内容
(2)生成数据库
db_load:安装 db4,db4-devel,db4-utils
#yum -y install db4*
#db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
保存虚拟帐号和密码的文本文件无法被系统帐号直接调用,我们需要使用db_load命令生成db口令数据库文件

db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
要使用db_load这个命令,需要安装三个文件,
db4-4.3.29-9.fc6.i386.rpm
db4-devel-4.3.29-9.fc6.i386.rpm
db4-utils-4.3.29-9.fc6.i386.rpm
[root@red-hat-5 ~]# rpm -qa|grep db4 #查看已有db4
db4-4.3.29-9.fc6
[root@red-hat-5 mnt]# mount /dev/cdrom /mnt/cdrom/ #挂载光驱,可不挂载
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@red-hat-5 cdrom]# cd Server/
[root@red-hat-5 Server]# rpm -ivh db4-devel-4.3.29-9.fc6.i386.rpm
warning: db4-devel-4.3.29-9.fc6.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:db4-devel ########################################### [100%]
[root@red-hat-5 Server]# rpm -ivh db4-utils-4.3.29-9.fc6.i386.rpm
warning: db4-utils-4.3.29-9.fc6.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:db4-utils ########################################### [100%]
[root@red-hat-5 Server]# cd /
[root@red-hat-5 /]# rpm -qa|grep db4
db4-4.3.29-9.fc6
db4-utils-4.3.29-9.fc6
db4-devel-4.3.29-9.fc6
[root@red-hat-5/]#db_load -T -t hash –f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db(建议与1.用户数据库尽量同名)
[root@red-hat-5 /]# ll /etc/vsftpd/
总计 48
-rw-r–r-- 1 root root 197 12-25 19:57 chroot_list
-rw------- 1 root root 126 12-25 20:06 ftpusers
-rw-r–r-- 1 root root 32 12-25 22:22 vsftpd_login.txt
-rw------- 1 root root 367 12-25 20:37 user_list
-rw------- 1 root root 4449 12-25 20:34 vsftpd.conf
-rwxr–r-- 1 root root 338 2007-12-13 vsftpd_conf_migrate.sh
-rw-r–r-- 1 root root 12288 12-25 23:12 vsftpd_login.db 生成数据库成功
-rw-r–r-- 1 root root 32 12-25 22:42 vsftpd_login.txt
-rw-r–r-- 1 root root 7 12-25 22:40 vtpd_login.txtsf
(3)修改数据库文件访问权限
数据库文件中保存着虚拟帐号的密码信息,为了防止非法用户盗取哈,我们可以修改该文件的访问权限。生成的认证文件的权限应设置为只对root用户可读可写,即600
[root@red-hat-5 /]# chmod 600 /etc/vsftpd/vsftpd_login.db
[root@red-hat-5 /]# ll /etc/vsftpd/vsftpd_login.db
-rw------- 1 root root 12288 12-25 23:12 /etc/vsftpd/vsftpd_login.db
2.配置PAM文件
#vi /etc/pam.d/vsftpd
将原来的全部注释掉,加入:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
注意:db=/etc/vsftpd/vsftpd_login 后面的.db必须去掉
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块.PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

[root@red-hat-5 /]# vi /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
修改vsftpd对应的PAM配置文件/etc/pam.d/vsftpd,将默认配置使用“#”全部注释,添加相应字段
[root@red-hat-5 /]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include system-auth
#account include system-auth
#session include system-auth
#session required pam_loginuid.so
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login(地址为数据库地址)
注意:db=/etc/vsftpd/vsftpd_login 格式是这样的,去掉.db后缀

(3)使用创建的本地虚拟用户测试
这里写图片描述
①打开“cmd”命令窗口
②先用“ping”测试与服务器之间的连通性linux的ftp服务器地址可用ifconfig查看
这里写图片描述
③用“ftp”连接服务器,并登录刚刚注册的账户
这里写图片描述
此时请检查防火墙 vi /etc/selinux/config ,若是以下状态
SELINUX=disabled
使用 iptables -F 清空防火墙规则
这里写图片描述
再次连接
这里写图片描述
④测试以下功能
cd 服务器端路径更改 lcd 本地路径更改 pwd 显示服务器端当前路径
dir 显示服务器端当前目录中内容(显示权限)
ls 显示服务器端当前目录中内容(在linux中使用时也显示权限)
put 上传 get 下载 mkdir 建文件夹 rmdir 删除文件夹
rename 重命名 delete 删除文件

在下载文件 get dh 时报错,原因是账号hhh在该文件夹下没有权限。一般来说,非超级用户都不会赋予虚拟用户删除权限,若想删除,尽量在虚拟机上使用超级用户删除,以免分配出去的虚拟用户误删重要文件。
这里写图片描述

这里写图片描述
举例测试部分功能,其他功能可自测。
注意:删除文件时须赋予用户权限(从主配置文件vsftpd.conf 中修改),以及文件夹的权限也会影响(chown user:root /home/ftp chmod -R 777 /home/ftp)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值