ftp服务
一、FTP 文件传输协议
1.FTP为系统提供了通过网络与远程服务器进行传输的简单方法,分主动和被动两种;
2.vsftpd:安全型服务器包,被动传输的接口是随机的,安全级别更高;
3.默认配置文件让anonymous用户只能下载位于chroot目录中的内容;
4./var/ftp:远程FTP客户端能以用户anonymous或ftp用户连接到服务器,无需密码;
二、设置FTP服务
1.配置yum源,安装vsftpd lftp
2.开启ftp服务,查看ftp接口,设置开机自启动
systemctl start vsftpd
netstat -antlupe | grep ftp
显示32498/vsftpd
systemctl enable vsftpd
3.在服务端修改配置文件,允许ftp连接
firewall-cmd --get-services
修改配置文件,允许ftp服务通过防火墙
firewall-cmd --permanent --add-service=ftp
防火墙服务重新加载配置文件
firewall-cmd --reload
查看防火墙允许服务 firewall-cmd --list-all
4.修改配置后,客户端连接ok 默认目录 /pub
$ lftp 172.25.254.108
lftp 172.25.254.108:~> ls
drwxr-xr-x 2 0 0 6 Mar 07 2014 pub
三、用户登陆设置
vim /etc/vsftpd/vsftpd.conf
1.匿名用户登陆
默认anonymous_enable=YES
修改12行anonymous_enable=NO 不允许登陆
不允许登陆状态如下:
$ lftp 172.25.254.108
lftp 172.25.254.108:~> ls
Interrupt
2.本地用户登陆
默认local_enable=YES
修改16行local_enable=No 不允许登陆
不允许登陆状态如下:
# lftp 172.25.254.221 -u student
Password:
lftp student@172.25.254.221:~> ls
ls: Login failed: 530 This FTP server is anonymous only.
3.本地用户读写
默认write_enable=YES
修改19行write_enable=NO 不允许写
注意:该实验必须修改内核级限制文件 vim /etc/sysconfig/selinux
SELINUX=disabled
允许读写
lftp 172.25.254.221 -u student
Password:
lftp student@172.25.254.221:~> ls
lftp student@172.25.254.221:~> put /etc/passwd
2133 bytes transferred
lftp student@172.25.254.221:~> ls
-rw-r--r-- 1 1000 1000 2133 May 11 13:18 passwd
lftp student@172.25.254.221:~> rm -fr passwd
rm ok, `passwd' removed
不允许读写
lftp 172.25.254.221 -u student
Password:
lftp student@172.25.254.221:~> put /etc/passwd
put: Login failed: 530 Login incorrect.
四、登陆用户的读写权限
注意:530报错为密码输入错误
550报错为没有设置匿名用户上传权限
553报错为文件权限不够
1.查看ftp可操作的命令 help
2.匿名用户上传文件权限 /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
修改组 chgrp ftp /var/ftp/pub/
修改权限 chmod 775 /var/ftp/pub/
实验效果如下:
$ lftp 172.25.254.108
lftp 172.25.254.108:~> cd pub
cd ok, cwd=/pub
lftp 172.25.254.108:/pub> put /etc/passwd
2381 bytes transferred
3.匿名用户删除文件权限 vim/etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES
实验效果如下:
lftp 172.25.254.108:/pub> rm -fr passwd
rm ok, `passwd' removed
4.匿名用户下载文件权限 /etc/vsftpd/vsftpd.conf
anon_world_readable_only=NO
实验效果如下:
lftp 172.25.254.221:/pub> get passwd
2133 bytes transferred
5.匿名用户新建目录权限 /etc/vsftpd/vsftpd.conf
anon_mkdir_write_enable=YES
实验效果如下:
lftp 172.25.254.221:/pub> mkdir hello
mkdir ok, `hello' created
lftp 172.25.254.221:/pub> ls
drwx------ 2 14 50 6 May 11 15:33 hello
-rw------- 1 14 50 2133 May 11 15:30 passwd
五、用户登陆的相关配置
1.修改默认用户,即以用户student的身份登陆
chown_uploads=YES
chown_username=student
lftp 172.25.254.221:/pub> put /etc/group
892 bytes transferred
lftp 172.25.254.221:/pub> ls
-rw------- 1 1000 50 892 May 11 15:43 group
-rw------- 1 14 50 2133 May 11 15:30 passwd
2.匿名用户的最大上传速度 ##单位byte
anon_max_rate=102400
lftp 172.25.254.221:~> cd pub
cd ok, cwd=/pub
lftp 172.25.254.221:/pub> put /iso/rhel-server-7.0-x86_64-dvd.iso
Interrupt
3.匿名用户登陆的默认目录修改
anon_root=/mnt
local_root=/mnt ##本地用户登陆的默认目录
4.最多同时在线人数设定
max_clients=3
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd.service
49 # recommended!
50 chown_uploads=YES
51 chown_username=student
52 anon_root=/mnt
53 local_root=/mnt
54 max_clients=3
55 anon_max_rate=102400
lftp 172.25.254.221:~> ls
-rw-r--r-- 1 0 0 0 May 11 16:05 hi1
-rw-r--r-- 1 0 0 0 May 11 16:05 hi2
-rw-r--r-- 1 0 0 0 May 11 16:05 hi3
-rw-r--r-- 1 0 0 0 May 11 16:05 hi4
-rw-r--r-- 1 0 0 0 May 11 16:05 hi5
5.修改本地用户登陆后,文件默认权限修改
local_umask=033 文件权限为644
lftp student@172.25.254.221:~> ls
-rw-r--r-- 1 1000 1000 2133 May 11 13:47 passwd
lftp student@172.25.254.221:~> put /etc/group
892 bytes transferred
lftp student@172.25.254.221:~> ls
-rw-r--r-- 1 1000 1000 892 May 11 16:15 group
-rw-r--r-- 1 1000 1000 2133 May 11 13:47 passwd
6.用户登陆,锁定在用户加目录
chroot_local_user=YES
lftp student@172.25.254.221:~> cd /
cd: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
注意:此时要取消家目录文件W权限,否则会500报错,权限太大
用户登陆,可切换目录,如切到根目录
chroot_local_user=NO
lftp student@172.25.254.221:~> cd /
cd ok, cwd=/
lftp student@172.25.254.221:/> ls
lrwxrwxrwx 1 0 0 7 May 07 2014 bin -> usr/bin
7.本地用户登陆黑/白名单
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
注意:当锁定用户家目录(YES)时,vim /etc/vsftpd/chroot_list是白名单
当不锁定用户家目录(NO)时,vim /etc/vsftpd/chroot_list是黑名单
以不锁定家目录为例,将tom用户加入白名单:
lftp student@172.25.254.221:~> ls
-rw-r--r-- 1 1000 1000 892 May 11 16:15 group
-rw-r--r-- 1 1000 1000 2133 May 11 13:47 passwd
lftp tom@172.25.254.221:~> cd /
cd ok, cwd=/
lftp tom@172.25.254.221:/> ls
lrwxrwxrwx 1 0 0 7 May 07 2014 bin -> usr/bin
以锁定家目录为例,将tom用户加入黑名单:
lftp tom@172.25.254.221:~> cd /
cd: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
8.黑名单配置文件
例子userlist_deny=NO
vim /etc/vsftpd/ftpusers
将student加入到ftpusers
lftp student@172.25.254.221:~> ls
ls: Login failed: 530 Permission denied.
vim user_list
将tom加入user_liset
[root@desktop yum.repos.d]# lftp 172.25.254.221 -u tom
Password:
lftp tom@172.25.254.221:~> ls
ftpusers ##永久黑名单,一旦加入,任何操作都不能洗白
user_list ##临时黑名单,可修改配置文件,变为白名单
userlist_enable=YES ##开启userlist列表
userlist_deny=NO ##默认所有用户加入黑名单,白名单用户可登陆
注意:若用户既在永久黑名单,也在白名单,此用户不能登陆!!
六、虚拟用户登陆
1.建立虚拟用户
vim /etc/vsftpd/users ##名字可自定义
hello
123 ##注意:不能有空格
2.对虚拟用户和密码加密
db_load -T -t hash -f users users.db
会生成 /etc/vsftpd/users.db文件
3.建立ftp验证文件
/etc/pam.d/usercheck
account required pam_userdb.so db=/etc/vsftpd/users ##用户认证
auth required pam_userdb.so db=/etc/vsftpd/users ##密码认证
4.修改配置文件,使虚拟用户登陆
pam_service_name=usercheck ##pam读取虚拟用户文件usercheck
guest_enable=YES ##开启虚拟用户登陆
guest_username=ftp ##使虚拟用户以ftp映射用户登陆,
5.配置虚拟用户具备独立的家目录
建立虚拟用户的家目录(例:两个用户)
mkdir /var/ftpdir/hello/hellodir -p
mkdir /var/ftpdir/nihao/nihaodir -p ##—p 表示上层目录不存在,自动建立
修改配置文件,使虚拟用户登陆到自己独立的家目录
local_root=/var/ftpdir/$USER
user_sub_token=$USER
实验效果如下:
[kiosk@foundation8 Desktop]$ lftp 172.25.254.108 -u hello
Password:
lftp hello@172.25.254.108:~> ls
drwxr-xr-x 2 0 0 6 Apr 18 08:12 hellodir
lftp hello@172.25.254.108:/> exit
[kiosk@foundation8 Desktop]$ lftp 172.25.254.108 -u nihao
Password:
lftp nihao@172.25.254.108:~> ls
drwxr-xr-x 2 0 0 6 Apr 18 08:12 nihaodir
131 pam_service_name=usercheck
132 guest_enable=YES
133 guest_username=student
134 local_root=/var/ftpdir/$USER
135 user_sub_token=$USER
136 userlist_enable=YES
137 use_config_dir=/etc/vsftpd/user_conf
6.虚拟用户分开管理(VIP)
将匿名用户所有的权限关闭
修改配置文件,给指定虚拟用户特殊权限
user_config_dir=/etc/vsftpd/user_conf
在/etc/vsftpd/user_conf目录下建立文件,以虚拟用户名命名
touch hello
[root@localhost user_conf]# cat hello
anon_upload_enable=YES
修改虚拟用户登陆家目录权限
chmod 755 /var/ftpdir/hello/hellodir/
更改虚拟用户登陆家目录组
chgrp student /var/ftpdir/hello/hellodir/