一、ftp搭建
1.安装ftp软件包
1.1挂载镜像
mount /dev/sr0 /mnt
1.2安装相应的rpm包
--vsftpd:
rpm -qa | grep vsftpd
yum -y install vsftpd
rpm -ivh vsftpd-2.2.2-21.el6.x86_64.rpm
--ftpd:
rpm -ivh ftp-0.17-54.el6.x86_64.rpm
2.开启ftp服务
--redhat6:
启动ftp命令:
service vsftpd start
停止ftp命令:
service vsftpd stop
重启ftp命令:
service vsftpd restart
--redhat7:
启动ftp命令:
systemctl start vsftpd.service
停止ftp命令:
systemctl stop vsftpd.service
重启ftp命令:
systemctl restart vsftpd.service
3.vsftpd配置
配置文件主要有三个,位于/etc/vsftpd/目录下,分别是:
(1)ftpusers 该文件用来指定那些用户不能访问ftp服务器。
(2)user_list 该文件用来指示的默认账户在默认情况下也不能访问ftp。
(3)vsftpd.conf vsftpd的主配置文件。
--vsftpd.conf 部分常用参数
listen=[YES|NO] 是否以独立运行的方式监听服务
listen_address=ip地址 设置要监听的ip地址
listen_port=21 设置FTP服务的监听端口
download_enable=[YES|NO] 是否允许下载文件
userlist_enable=[YES|NO]/userlist_deny=[YES|NO] 设置用户列表为允许还是禁止操作
max_clients=0 最大客户端连接数,0为不限制
max_per_ip=0 同一ip地址的最大连接数,0为不限制
anonymous_enable=[YES|NO] 是否允许匿名用户访问
anon_upload_enable=[YES|NO] 是否允许匿名用户上传文件
anon_umask=022 匿名用户上传文件的umask值
anon_root=/var/ftp 匿名用户的ftp根目录
anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO] 是否开放匿名用户的其他写入权限(重命名、删除等操作)
anon_max_rate=0 匿名用户的最大传输速率(字节/秒),0为不限制
local_enable=[YES|NO] 是否允许本地用户登录ftp
local_umask=022 本地用户上传文件的umask值
local_root=/var/ftp 本地用户的ftp根目录
chroot_local_user=[YES|NO] 是否将用户权限禁锢在ftp目录,以确保安全
local_max_rate=0 本地用户最大的传输速率,0为不限制
3.1以匿名用户为例,登录FTP
想要以匿名用户登录,需要修改/etc/vsftpd/vsftpd.conf的配置文件。
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
把这两个参数的注释去掉,就可以完成匿名用户的配置,此时匿名用户既可以登录上传,也可以下载文件。
修改完成后,记得重启该服务。
systemctl restart vsftpd.service
另一台机器使用匿名用户ftp进行登录,无密码。
ftp 192.168.80.238
Connected to 192.168.80.238 (192.168.80.238).
220 (vsFTPd 3.0.2)
Name (192.168.80.238:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
3.2添加test1和test2两个用户,并且可以身份验证访问ftp服务
--添加用户
useradd test1
echo "123" | passwd --stdin test1
useradd test2
echo "123"|passwd --stdin test2
用户可以随便切换到其他目录下,安全性较低。
--将普通用户禁锢在家目录中,使其不能随意切换目录
vi /etc/vsftpd/vsftpd.conf
#chroot_local_user=YES
去掉参数前面的注释并重启服务。
注意:rhel7中单纯的修改参数chroot_local_user=YES,会造成ftp登录失败的问题,需要在此参数chroot_local_user=YES的基础上添加参数allow_writeable_chroot=YES才可以。
--将test1加入user_list文件中,user_list默认为黑名单
echo "test1" >> user_list
test1登录失败:
ftp 192.168.88.5
Connected to 192.168.88.5 (192.168.88.5).
220 (vsFTPd 3.0.2)
Name (192.168.88.5:root): test1
530 Permission denied.
Login failed.
test2登录成功:
ftp 192.168.88.5
Connected to 192.168.88.5 (192.168.88.5).
220 (vsFTPd 3.0.2)
Name (192.168.88.5:root): test2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
注意:若想uesr_list变为白名单,则只需要在ftp配置文件末尾加入:userlist_deny=NO重启服务即可。
3.3建立test3虚拟用户账户使用ftp
vi /etc/vsftpd/vuser
test3
123
注意:奇数行为用户名,偶数行位密码。
3.3.1将vuser文件转换成数据库文件,并给vuser和转换后的vuser.db数据库文件设置权限
db_load -T -t hash -f vuser vuser.db
chmod 600 vuser
chmod 600 vuser.db
3.3.2创建一个用户为vuser,指定家目录/opt/vuser,并不使用shell登陆
useradd -d /opt/vuser -s /sbin/nologin vuser
3.3.3编辑pam认证模块支持虚拟用户的登陆
vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
3.3.4编辑ftp配置文件,开启虚拟用户,使用pam认证登陆
vi vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.vu
3.3.5重启服务
systemctl restart vsftpd.service
3.3.6使用test3验证登录
ftp 192.168.88.5
Connected to 192.168.88.5 (192.168.88.5).
220 (vsFTPd 3.0.2)
Name (192.168.88.5:root): test3
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
如果使用虚拟用户,出现登录失败的情况,可能为以下三方面原因:
(1)检查自己的虚拟用户数据库文件内容是否有误。
(2)可能是PAM模块有问题检查自己的 /etc/pam.d/vsftpd文件的内容。
(3)虚拟用户验证FTP服务因为需要用到PAM模块,所以本地用户有可能被PAM模块限制而导致无法登陆。
二、常用的ftp命令
2.1连接ftp
格式:ftp <ip地址>
如:ftp 192.168.88.5
输入相应的用户名密码登录即可。
2.2下载文件(get/mget)
2.2.1get命令
将远程主机上的文件传送到本地主机上。
格式:get <remote_file> <local_file>
如:
ftp 192.168.88.5
Connected to 192.168.88.5 (192.168.88.5).
220 (vsFTPd 3.0.2)
Name (192.168.88.5:root): test2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /tmp/
250 Directory successfully changed.
ftp> ls -lrt
227 Entering Passive Mode (192,168,88,5,115,103).
150 Here comes the directory listing.
drwx------ 3 0 0 17 Feb 09 06:04 systemd-private-7fb240dbba1e49af931a4499c959bba2-vmtoolsd.service-krWDjZ
drwx------ 3 0 0 17 Feb 09 06:04 systemd-private-7fb240dbba1e49af931a4499c959bba2-rtkit-daemon.service-itBl9T
drwx------ 3 0 0 17 Feb 09 06:04 systemd-private-7fb240dbba1e49af931a4499c959bba2-cups.service-U3Zwog
drwx------ 3 0 0 17 Feb 09 06:04 systemd-private-7fb240dbba1e49af931a4499c959bba2-colord.service-0FDRUo
-rw-r--r-- 1 0 0 14893 Feb 24 07:30 ashrpt_1_0223_1000.html
226 Directory send OK.
ftp> get ashrpt_1_0223_1000.html
ftp> get ashrpt_1_0223_1000.html C:\Users\Administrator_L\Desktop\ash.html
2.2.2mget命令
从远程主机接收一批文件到本地主机。
格式:mget <remote_files>
如:
ftp 192.168.88.5
Connected to 192.168.88.5 (192.168.88.5).
220 (vsFTPd 3.0.2)
Name (192.168.88.5:root): test2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /tmp/
ftp> mget *.*
mget adjtime? y
227 Entering Passive Mode (192,168,70,31,142,169).
150 Opening BINARY mode data connection for adjtime (5685 bytes).
226 Transfer complete.
注意:要去除提示需执行:prompt off
文件会下载到当前目录下,也就是执行ftp命令的所在目录。
2.3上传文件(put/mput)
2.3.1put命令
将本地主机上的文件传送到远程主机。
格式:put <local_file> <remote_file>
如:
ftp> put C:\Users\Administrator_L\Desktop\1.txt
ftp> put C:\Users\Administrator_L\Desktop\1.txt 2.txt
2.3.2mput命令
将本地主机上的一批文件传送到远程主机。
格式:mput local_file
如:
ftp> mput *.txt
3.其他常用ftp命令
pwd 显示远程Linux FTP服务器上的当前路径。
ls 列出远程Linux FTP服务器上当前路径下的目录和文件。
dir 列出远程Linux FTP服务器上当前路径下的目录和文件(同上)。
mkdir [foldname] 在远程Linux FTP服务器上当前路径下建立指定目录。
rmdir [foldname] 删除远程Linux FTP服务器上当前路径下的指定目录。
cd [foldname] 更改远程Linux FTP服务器上的工作目录。
delete [filename] 删除远程Linux FTP服务器上指定的文件。
rename [filename] [newfilename] 重命名远程Linux FTP服务器上指定的文件。
close 从远程Linux FTP服务器断开但保留FTP命令参数提示。
disconnect 从远程Linux FTP服务器断开但保留FTP命令参数提示(同上) 。
bye 结束和远程Linux FTP服务器的连接。
quit 结束和远程Linux FTP服务器的连接(同上)。
! 直接从远程Linux FTP服务器进入到本地shell中。
exit (接上步)从本地shell环境中返回到远程Linux FTP服务器环境下。
!ls 列出本地机器上当前路径下的目录和文件。
lcd [foldname] 更改本地机器的工作目录。
? 显示ftp命令说明。
help 显示ftp命令说明(同上)。