一、ftp架设
vsftp
ftp
端口:20,21
tcp协议
ftp两种工作模式: 被动模式,主动模式
ftp的传输内容分:控制指令,文件数据
主动模式:
ftp服务器在21端口去监听,接受客户端的控制指令;
如果客户端读取某个文件,读取的指令会发到服务器端21端口,指令当中还告诉了服务器端,客户端打开了某个大于1024端口等待服务器的数据连接。服务器端收到这个情况之后,就会主动发起一个新数据发送连接,这些数据包的原端口使用20,进行发送数据。
特点:客户端不能是在私有网络里
被动模式:
ftp服务器在21端口去监听,接受客户端的控制指令;
如果客户端读取某个文件,读取的指令会发到服务器端21端口,同时,指令当中会告诉服务器端,让服务器端打开某个大于1024端口,等待客户端主动连接上去进行数据传输。
特点:客户端可以在私有网络里
软件: vsftpd
被动模式
src port : > 1024
dst port : > 1024
src ip : 10.1.1.20 <---经过路由之后,被修改为一个公网IP:61.1.1.1
dst ip : 210.38.224.86
主动模式:
server:
scr port : 20
dst port : > 1024
scr ip : 210.38.224.86
dst ip : 61.1.1.1
============================
配置文件: /etc/vsftpd/vsftpd.conf
例子1:实现匿名帐号访问资源
安装完软件包,启动服务
匿名登录之后,资源的路径是在服务器的/var/ftp(ftp帐号的家目录)
权限:只读
anonymous_enable=YES
例子2:实现匿名可以上传文件
anon_upload_enable=YES
mkdir /var/ftp/pub
chmod 777 /var/ftp/pub
例子3: 用两种方法,分别修改匿名帐号登录之后的资源所在路径/ftp
man vsftpd.conf
方法一、修改配置文件
anon_root=/ftp
方法二、修改匿名帐号的家目录为/ftp
例子4:实现允许匿名帐号下载自己上传的文件
为什么默认不允许下载自己上传的文件?
文件上传之后权限自动改为600,而ftp帐号对于600权限文件是没有权限下载
-rw------- 1 14 50 845 Jul 19 06:12 fstab 不可以
-rw-r--r-- 1 0 0 1666 Jul 19 06:13 inittab 可以
方法一:让匿名帐号上传的文件权限自动更改为644的权限
man vsftpd.conf
anon_umask=022
如果文件的权限是444 ,umask怎么设定?
anon_umask=0222
方法二:允许匿名帐号下载不是所有人都可以读的文件
anon_world_readable_only=NO <---默认是yes,只允许下载所有人都可以读的文件
练习:实现匿名可以创建文件夹,删除文件,删除文件夹
例子5:实现普通帐号访问匿名资源
资源路径: 帐号的家目录
可以随便切换到该帐号可以访问任意路径,可以下载该帐号可以读取的任意文件(/etc/passwd)
local_enable=YES #允许本地帐号登录
write_enable=YES #允许本地帐号可以有写的权限
local_umask=022
例子6:实现锁定普通帐号登录之后的路径
chroot_local_user=YES
例子7、限制某个用户登录ftp
方法1:通过修改用户默认shell
/bin/false <--只对普通帐号生效,对匿名帐号不生效
方法2、修改配置文件
userlist_enable=YES
在参数userlist_file指定的/etc/vsftpd/user_list文件里添加tom的名字
在这种情况下,user_list是黑名单,所有里面存在的用户都不允许登录ftp
怎么样才能把user_list更改为白名单,所有里面存在的用户都才允许登录ftp
userlist_deny=NO
例子8、实现只是锁定某些帐号的资源路径,别的帐号不锁定
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list <---不锁定家目录的名单
如果想/etc/vsftpd/chroot_list黑名单,里面存在的用户就锁定
chroot_local_user=NO
在上面的所有关于普通帐号的ftp使用,都可以实现磁盘配额进行空间限制,前提:这些帐号都是服务器上存在的真实的本地帐号
例子9、使用虚拟帐号
1、建立所有虚拟帐号对应的一个真实帐号
useradd -s /sbin/nologin vuser
2、建立虚拟帐号文件
# yum install db4-utils -y
# vim /etc/vsftpd/vusers
vuser1 《--用户名
123 《--密码
vuser2
321
vuser3
456
# db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/vusers.db
# chmod 640 /etc/vsftpd/vusers*
3、修改配置文件
guest_enable=YES
guest_username=vuser
pam_service_name=vuser
#pam_service_name=vsftpd
4、创建帐号验证的pam模块文件
# vim /etc/pam.d/vuser
#%PAM-1.0
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vusers
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vusers
上面实现的所有的虚拟帐号都是同一个家目录,怎么样才可以实现虚拟帐号具有独立的家目录,而且具有独立的权限控制:
1、添加额外参数
user_sub_token=$USER
user_config_dir=/etc/vsftpd/vuser_config #用来存放虚拟帐号的配置文件
2、更改虚拟帐号对应的真是帐号的家目录
# usermod -d '/home/vuser/$USER' vuser
# finger vuser
Login: vuser Name: (null)
Directory: /home/vuser/$USER Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
3、在/home/vuser下分别为各个虚拟帐号建立独立的家目录
# mkdir /home/vuser/vuser{1,2,3}
# chown vuser:vuser /home/vuser/vuser1
# chown vuser:vuser /home/vuser/vuser2
# chown vuser:vuser /home/vuser/vuser3
4、分别建立独立的配置文件
# vim /etc/vsftpd/vuser_config/vuser1
write_enable=NO
这种方案的缺点:不能实现磁盘配额。
二、架设yum服务器
1、 vim /etc/yum.repos.d/rhel-debuginfo.repo
[Server]
name=Server
baseurl=ftp://10.1.1.101/rhel_source/Server
enabled=1
gpgcheck=0
[VT]
name=VT
baseurl=ftp://10.1.1.101/rhel_source/VT
enabled=1
gpgcheck=0
[Cluster]
name=Cluster
baseurl=ftp://10.1.1.101/rhel_source/Cluster
enabled=1
gpgcheck=0
[ClusterStorage]
name=ClusterStorage
baseurl=ftp://10.1.1.101/rhel_source/ClusterStorage
enabled=1
gpgcheck=0
[wych]
name=wych
baseurl=ftp://10.1.1.101/rhel_source/wych
enabled=1
gpgcheck=0
2、createrepo /share/rhel_source/
3、yum clean all
4、yum list
5、客户端机器
vim /etc/yum.repos.d/rhel-debuginfo.repo
rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever - $basearch - Debug
baseurl=ftp://10.1.1.101/rhel_source/Server
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release