Linux(8.5)FTP
文章目录
- FTP(网络传输)
- 1)概念
- 2)作用
- 3)工作模式
- 4)工作原理
- 5)配置文件
- 6)禁锢目录
- 7)限制单目录实验
- 8)不同用户限制不同目录
- 9)部署FTP
- 10)创建FTP虚拟用户
- 11)YUM远程仓库部署(FTP源)(CentOS-7)
FTP(网络传输)
1)概念
FTP(File Transfer Protocol)即文件传输协议,是用于在网络上进行文件传输的标准协议。它采用客户端 / 服务器架构,(即C/S架构)允许用户从 FTP 服务器(服务端)上传或下载文件到本地计算机(客户端)。
端口号:21
2)作用
- 文件传输
- 文件管理
- 远程访问
- 匿名访问
3)工作模式
- 主动模式
- 客户端(FTP客户端)通过控制连接向服务器(FTP服务器)发送PORT命令,指定客户端用于传输的IP地址和端口号
- 服务器通过服务器到客户端的数据连接,并使用客户端指定的IP地址和端口号发送数据
- 在主动模式下,客户端主动打开数据连接,服务器被动接受连接。
- 被动模式
- 客户端(FTP客户端)通过控制连接向服务器(FTP服务器)发送PSAV命令,请求服务器进入被动模式
- 服务器在收到PASV命令后,打开一个随机的端口(被动端口)并通知客户端该端口号
- 客户端使用被动端口向服务器建立数据连接,并通过该连接发送数据
- 在被动模式下,服务器主动打开数据连接,客户端被动接受连接。
4)工作原理
5)配置文件
1、相关配置文件
/etc/logrotate.d/vsftpd #轮转日志
/etc/vsftpd #配置文件存放目录
/etc/vsftpd/vsftpd.conf #主配置文件
/usr/sbin/vsftpd
/var/ftp #共享目录
/var/ftp/pub #公共的共享目录
2、黑名单/白名单(黑名单权限>白名单权限)
[root@localhost vsftpd]# ll
总用量 36
-rw-------. 1 root root 125 8月 20 16:52 ftpusers #黑名单
-rw-------. 1 root root 361 8月 20 16:52 user_list #白名单
3、主配置文件
路径:/etc/vsftpd/vsftpd.conf
[root@localhost ftp]# grep -v "#" /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anonymous_enable=YES
这表示允许匿名用户访问 FTP 服务。匿名用户可以使用 “anonymous” 或 “ftp” 作为用户名,并且通常密码可以是任意的电子邮件地址格式(不过有些服务器可能不检查密码)。
local_enable=YES
允许本地用户(系统中真实存在的用户)访问 FTP 服务。这些用户可以使用自己在系统中的用户名和密码来登录 FTP 服务器。
write_enable=YES
启用写操作。这意味着无论是本地用户还是满足条件的匿名用户(由后面的anon_upload_enable和anon_mkdir_write_enable等参数决定)都有可能进行写操作,如上传文件或创建目录等。
local_umask=022
用于设置本地用户创建文件和目录时的默认权限掩码。这里022表示创建文件时,文件的权限默认是644(666减去022),创建目录时,目录的权限默认是755(777减去022)。
anon_upload_enable=YES
允许匿名用户上传文件。这在某些场景下可能会带来安全风险,因为匿名用户的身份难以追踪,如果恶意用户利用这个权限,可能会上传有害的文件,如包含恶意软件的文件等。
anon_mkdir_write_enable=YES
允许匿名用户创建目录。和匿名用户上传文件权限类似,这也需要谨慎使用,因为这增加了匿名用户对服务器目录结构的操作权限。
6)禁锢目录
1、原理
通过配置 vsftpd 的相关参数,利用 chroot(change root)机制,将用户的根目录切换到指定的目录,使得用户只能在该目录及其子目录下进行操作,无法访问系统的其他部分,从而实现禁锢效果。
2、修改配置文件vsftpd.conf
-
限制单个目录
chroot_local_user=YES #chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list ##在配置文件中没有,需要自己添加 allow_writeable_chroot=YES local_root=/var/www/html
chroot_local_user=YES
:表示将所有本地用户禁锢在其家目录中。chroot_list_enable=YES
:启用 chroot_list_file 指定的文件,该文件中列出的用户可以不受 chroot 限制。chroot_list_file=/etc/vsftpd/chroot_list
:指定禁锢列表文件的路径。allow_writeable_chroot=YES
:允许用户在被限制的主目录中有写入权限。local_root=/var/www/html
:指定了本地用户登录 FTP 后的根目录为 /var/www/html
-
不同用户限制不同目录
chroot_local_user=YES chroot_list_file=/etc/vsftpd/chroot_list allow_writeable_chroot=YES user_config_dir=/etc/vsftpd/user_config #这表示 vsftpd 会从 /etc/vsftpd/user_config 目录中读取每个用户的独立配置文件。
7)限制单目录实验
创建test用户并限制目录在/var/www/html下用来管理httpd服务
1、安装vsftpd
yum -y install vsftpd
2、修改配置文件vsftpd.conf
anonymous_enable=NO #不允许匿名用户登录
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
local_root=/var/www/html #限制本地用户目录为/var/www/html
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
3、创建chroot_list文件
[root@localhost vsftpd]# touch chroot_list
4、创建test用户及修改权限
useradd test
chown -R test:test /var/www/html/
创建文件a
touch /var/www/html/a
5、允许test用户登录ftp
[root@localhost vsftpd]# ll
总用量 20
-rw-r--r--. 1 root root 0 3月 24 15:49 chroot_list
-rw-------. 1 root root 125 8月 20 2024 ftpusers
drwxr-xr-x. 2 root root 31 3月 24 15:59 user_config
-rw-------. 1 root root 372 3月 24 16:00 user_list
-rw-------. 1 root root 5176 3月 24 15:56 vsftpd.conf
-rwxr--r--. 1 root root 352 8月 20 2024 vsftpd_conf_migrate.sh
在user_list末行添加test用户
6、在客户端测试
安装ftp
yum -y install ftp
登录ftp
[root@localhost ~]# ftp 192.168.146.140 #vsftpd服务器IP
Connected to 192.168.146.140 (192.168.146.140).
220 (vsFTPd 3.0.5)
Name (192.168.146.140:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls #在/var/www/html目录下
227 Entering Passive Mode (192,168,146,140,94,0).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Mar 24 07:45 a
226 Directory send OK.
ftp> pwd
257 "/" is the current directory
ftp> cd /var #已经限定,切换目录不可用
550 Failed to change directory.
ftp> exit
221 Goodbye.
8)不同用户限制不同目录
test用户限制在/var/www/html test1用户限制在/test下
1、修改配置文件vsftpd.conf
#local_root=/var/www/html #限制本地用户目录为/var/www/html
user_config_dir=/etc/vsftpd/user_config #修改为这个
#这表示 vsftpd 会从 /etc/vsftpd/user_config 目录中读取每个用户的独立配置文件。
2、在/etc/vsftpd
下创建添加用户特定的禁锢目录配置
mkdir user_config
3、创建用户test1
useradd test1
4、创建用户配置文件
-
为
test
用户创建配置文件:
创建文件/etc/vsftpd/user_config/test
,并添加以下内容:local_root=/var/www/html
-
为
test01
用户创建配置文件:
创建文件/etc/vsftpd/user_config/test01
,并添加以下内容:local_root=/test
5、在不同目录下创建文件并修改权限
chown -R test:test /var/www/html
touch var/www/html/a
chown -R test1:test1/test
touch /test/b
6、测试验证
[root@localhost ~]# ftp 192.168.146.140
Connected to 192.168.146.140 (192.168.146.140).
220 (vsFTPd 3.0.5)
Name (192.168.146.140:root): test
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 (192,168,146,140,94,0).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Mar 24 07:45 a
226 Directory send OK.
ftp> pwd
257 "/" is the current directory
ftp> cd /var
550 Failed to change directory.
ftp> exit
221 Goodbye.
[root@localhost ~]# ftp 192.168.146.140
Connected to 192.168.146.140 (192.168.146.140).
220 (vsFTPd 3.0.5)
Name (192.168.146.140:root): test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp>
ftp> pwd
257 "/" is the current directory
ftp> ls
227 Entering Passive Mode (192,168,146,140,113,56).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Mar 24 08:01 b
226 Directory send OK.
9)部署FTP
服务端
1、安装FTP服务
- 命令:
yum -y install vsftpd
[root@bogon ~]# yum -y install vsftpd
2.启动FTP服务(加入开机自启)
[root@bogon ~]# systemctl enable --now vsftpd.service
3.关闭防火墙
systemctl stop firewalld
setenforce 0
iptables -F
4、验证FPT服务
windows:ftp://IP地址
linux:客户端安装FPT服务
- 命令:yum -y install ftp ftp+ IP 地址
客户端
登录方式(ftp + IP 地址)
- 匿名用户(ftp或者anonymous)
- 本地用户(服务端的用户名和密码)
- 虚拟用户
10)创建FTP虚拟用户
一、安装VSFTPD
yum -y install vsftpd
二、创建虚拟账号和密码文件
[root@localhost vsftpd]# vim vuser.txt
三、使用db_load
命令转换为数据库文件
语法:db_load -T -t hash -f
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
[root@localhost vsftpd]# ll
总用量 36
-rw-------. 1 root root 125 8月 20 16:52 ftpusers
-rw-------. 1 root root 361 8月 20 16:52 user_list
-rw-------. 1 root root 5073 12月 30 21:14 vsftpd.conf
-rwxr--r--. 1 root root 352 8月 20 16:52 vsftpd_conf_migrate.sh
-rw-r--r--. 1 root root 12288 12月 30 21:22 vuser.db
-rw-r--r--. 1 root root 28 12月 30 21:21 vuser.txt
四、配置PAM认证(注意顺序)
路径:/etc/pam.d/vsftpd
[root@localhost vsftpd]# cat /etc/pam.d/vsftpd
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
###要添加内容
#%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 password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
五、配置主配置文件(/etc/vsftpd/vsftpd.conf
)
anonymous_enable = YES:允许匿名用户访问。
local_enable = YES:启用本地用户认证,这里的本地用户实际上是通过 PAM 认证的虚拟用户。
write_enable = YES:如果允许虚拟用户上传文件,设置为 “YES”。
guest_enable = YES:启用虚拟用户(以 guest 身份)。
guest_username = ftp:指定虚拟用户映射到的系统用户,这里一般是ftp这个低权限系统用户。
pam_service_name = vsftpd:指定 PAM 认证
11)YUM远程仓库部署(FTP源)(CentOS-7)
一、概述
二、服务端配置
1、构建FPT源
-
挂载光盘
[root@server ~]# mount /dev/sr0 /mnt ##以cetos7光盘作为软件仓库## mount: /dev/sr0 写保护,将以只读方式挂载
-
安装VSFTP服务
[root@server ~]# yum -y install vsftpd
2、复制软件源到FTP站点(也可以直接挂载到/var/ftp/centos7)
-
[root@server ~]# cd /var/ [root@server var]# ls account adm cache crash db empty ftp games gopher kerberos lib local lock log mail named nis opt preserve run spool tmp yp [root@server var]# cd ftp/ [root@server ftp]# ls pub [root@server ftp]# mkdir centos7 [root@server ftp]# ls centos7 pub [root@server ftp]# cp -rf /mnt/* ./centos7 & [1] 9924 [root@server ftp]#
3、建立yum索引文件
-
命令:
createrepo -g /mnt/repodata/repomd.xml ./other
[root@server ftp]# mkdir other [root@server ftp]# ls centos7 other pub [root@server ftp]# createrepo -g /mnt/repodata/repomd.xml ./other Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete [root@server ftp]# cd other [root@server other]# ls repodata [root@server other]# cd repodata/ [root@server repodata]# ls 01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2 12bbefc88e08f473cf860b4c150a9a8627f68eb256c9d54b80940e5dc224e85c-repomd.xml.gz 401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz 5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2 6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz 7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2 cdcb85c0e4daf1675d1ab6c42b0cacc6f9460d938296f7bf52678514a86a0554-repomd.xml dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz repomd.xml [root@server repodata]#
4、开启VSFTP服务
-
关闭防火墙
systemctl stop firewalld setenforce 0 iptables -F
-
加入开机自启
[root@server ~]# systemctl enable --now vsftpd.service
三、客户端配置
1、测试访问FTP服务
-
安装FTP服务:
yum -y install ftp
-
匿名用户登录:账户:ftp 密码:无
[root@bogon yum.repos.d]# ftp 192.168.146.132 Connected to 192.168.146.132 (192.168.146.132). 220 (vsFTPd 3.0.2) Name (192.168.146.132:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
2、配置yum仓库
baseurl=ftp://IP地址+文件夹目录
[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# mkdir bak
[root@client yum.repos.d]# move *.repo bak
[root@client yum.repos.d]# vim ftp.repo
[ftp]
name=centos7.packages
baseurl=ftp://192.168.209.134/centos7
enabled=1
gpgcheck=0
[other]
name=other.packages
baseurl=ftp://192.168.209.134/other
enabled=1
gpgcheck=0
3、清除缓存
[root@client yum.repos.d]# yum clean all
4、安装软件测试
[root@client yum.repos.d]# yum -y install httpd