你好
我是你们的雨嘉叔

10-Linux中FTP服务的配置

一、创建匿名访问的FTP服务
1、使用场景
学校学生下载老师上传的文件,但是这个匿名账户只有下载权限没有删除写入修改权限。在本文章中我们要实现匿名访问,修改FTP默认目录,创建“download”目录要求只允许匿名下载,创建“upload”允许用户上传下载文件改名和文件删除。

2、实现目标
①匿名用户使用ftp服务启动账户的身份访问FTP,如果需要上传需要ftp账户能够在文件夹中有写入权限。
②更改FTP配置文件允许匿名用户登录ftp服务。
③运行匿名用户上传。
④更改匿名用户ftp根目录 /var/ftproot/。
⑤在FTP根目录下创建两个文件夹upload 允许匿名上传
⑥download只允许下载不允许上传
⑦匿名用户上传后的文件权限是644 权限掩码为022。

3、创建匿名FTP根目录
注意:为匿名用户创建新的ftp根目录,注意根目录权限不能更改,否则匿名用户不能登录。切记切记!
①创建ftproot文件夹
mkdir /var/ftproot
②查看ftproot的权限

ll /var/ | grep ftproot

得出以下结果

drwxr-xr-x   3 root root 4096 1月  23 20:41 ftproot

③创建允许用户上传的目录

mkdir /var/ftproot/upload

④更改upload文件夹的权限,才能允许匿名用户上传

chmod 777 /var/ftproot/upload/

⑤创建只允许用户下载的目录

mkdir /var/ftproot/download

⑥注意检查download文件夹权限匿名用户能不能上传(正常创建文件夹默认是不允许上传的)

ll /var/ftproot/

得出以下结果

总用量 8
drwxr-xr-x 2 root root 4096 1月  23 22:39 download
drwxrwxrwx 2 root root 4096 1月  23 22:41 upload

4、更改配置文件
①重命名配置文件

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup

②去掉注释行产生一个新的配置文件

grep -v ^# /etc/vsftpd/vsftpd.conf.backup >/etc/vsftpd/vsftpd.conf

③根据需求编辑配置文件

vi /etc/vsftpd/vsftpd.conf

[vsftpd.conf]

#控制匿名用户访问的部分
anonymous_enable=YES

#添加下列内容(具体属性在后边会有介绍)
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/var/ftproot
anon_umask=022
anon_other_write_enable=YES

#控制用户访问的部分
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

#Linux服务器相关设置
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

④保存后重启vsftp服务

service vsftpd restart

5、测试
在XP上访问ftp服务器,发现不需要输入账户密码直接登录,看到两个文件夹,打开upload,可以上传文件和文件夹,可以修改上传的文件名,删除上传的文件。但是download文件,不能上传,只能下载。

附:常见的匿名用户相关设置

anonymous_enable=YES(NO)
#设置匿名用户anonymous能否登入vsftp
anon_world_readable_only=YES (NO)
#设置匿名用户具有下载可读档案的权限
anon_other_write_enable=YES (NO)
#设置匿名用户是否具有写入的权限注意相关权限的修改要符合
anon_mkdir_write_enable=YES (NO)
#设置匿名用户是否能够建立目录
anon_upload_enable=YES (NO)
#设置匿名用户是否具有上传资料的权限
deny_email_enable=YES (NO)
#设置抵挡某些特殊的email_address
banned_email_file=/etc/vsftpd.banned_emails
#与上一个选项配合使用
no_anon_password=YES (NO)
#设置匿名用户登入时是否需要密码验证
anon_max_rate=0
#限制匿名用户的最大传输速率
anon_umask=077
#设置匿名用户的权限

二、通过修改配置文件来禁用FTP被动模式(跟据需要去设置)

vi /etc/vsftpd/vsftpd.conf

[vsftpd.conf]

anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/var/ftproot
anon_umask=000
anon_other_write_enable=YES

local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#添加一条
pasv_enable=NO

注释:
pasv_enable=yes (Default: YES )设置是否允许pasv模式
pasv_promiscuous=no (Default: NO )是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
pasv_max_port=10240 (Default: 0 (use any port) ) pasv使用的最大端
pasv_min_port=1024 (Default: 0 (use any port) ) pasv使用的最小端
pasv_address (Default: (none – the address is taken from the incoming connected socket) ) pasv模式中服务器传回的ip地址


三、配置启用了SELinux的服务器允许匿名访问FTP(跟据需要去设置)
1、编辑SELinux配置文件改成启用状态

vi /etc/selinux/config

[config]

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
#根据上篇文章把前边的注释去掉
#SELINUX=disabled
#可以将此条目删除或加注释禁用

2、重启Linux

reboot

3、设置SELinux打开匿名访问开关
①查看SELinux是否允许匿名上传

getsebool -a | grep ftp

可以看到是关闭off状态

allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off

②开启匿名上传功能

setsebool -P allow_ftpd_anon_write on

四、设置ftp目录文件类型
1、更改upload文件夹对所有人开放读写权限

chmod 777 /var/ftproot/upload/

2、设置FTP根目录文件类型,允许匿名能够打开

chcon -t public_content_r_t /var/ftproot/

3、设置upload文件类型,允许匿名能够读写。

chcon -t public_content_rw_t /var/ftproot/upload/

五、配置本地用户登录FTP
1、关闭SELinux(参见前边文章)
2、创建两个用户并设置密码

#创建用户
useradd zhang 
useradd wang
#添加密码
passwd zhang
passwd wang

3、在每个人的主目录下创建一个文件。用来测试登录ftp后默认被定位到自己的主目录。

touch /home/zhang/zhang.txt
touch /home/wang/wang.txt

4、修改配置文件使FTP支持本地用户登录

vi /etc/vsftpd/vsftpd.conf

[vsftpd.conf]

anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/var/ftproot
anon_umask=000
anon_other_write_enable=YES
#启用本地账户
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_enable=NO

5、保存重启vsFTP服务

service vsftpd restart

6、验证
在Windows客户端中,默认使用匿名登录,右击空白处,点击登录,可以切换访问FTP的用户身份。如果用zhang的账号密码登录,可以看到zhang.txt,能够说明,访问的是自己的主目录。如果用wang的账号密码登录,可以看到访问的是wang的主目录。


六、禁止Linux用户访问FTP
0、前言
vsFTP通过user_list控制哪些Linux用户能够访问ftp,哪些用户拒绝访问ftp。更改vsFTP配置文件,启用Linux用户列表user_list,并设置列表中的用户拒绝访问FTP。注意:如果userlist_deny=NO,则意味着只允许user_list列表中的用户能够访问FTP。
1、修改配置文件

vi /etc/vsftpd/vsftpd.conf

[vsftpd.conf]

#修改或配置文件
userlist_enable=YES
userlist_deny=YES

2、编辑user_list,在文件后边添加zhang

vi /etc/vsftpd/user_list

3、验证
在Windows客户端上登录zhang用户,看看能否登录,如果已经不能登录FTP了,说明配置正确

PS:还有一个文件,ftpusers,该文件中的用户拒绝登录ftp

#编辑文件
vi /etc/vsftpd/ftpusers
#在后边添加zhang即可

七、将FTP用户定位到同一个目录
1、创建目录

mkdir /zhangyujia

2、修改文件夹权限

chmod 777 /zhangyujia/

3、修改配置文件

vi /etc/vsftpd/vsftpd.conf

在文件上加一行

local_root=/zhangyujia

4、重启服务


八、配置启用了SELinux的服务器允许本地用户访问FTP(跟据需要去设置)
1、开启SELinux
2、重启服务器
3、重启服务器后进行如下设置

setsebool -P ftp_home_dir=1

九、配置虚拟用户登录FTP服务
1、检查SELinux和iptables是否关闭
2、查看是否已经安装了数据库

rpm -qa | grep db4

如果这两个有显示证明有

db4-4.7.25-22.el6.x86_64
db4-utils-4.7.25-22.el6.x86_64

如果没有安装运行以下命令

yum install db4-utils

3、创建用户列表(文件名可以随便给)

vi /etc/vsftpd/vusers.list

[vusers.list]

#奇数行为用户名,偶数行为密码,创建多少个用户都行
zhangyujia
123
zhangyj
123
4、将文本文件转换成ftp服务用户数据库并更改权限
cd /etc/vsftpd/
db_load -T -t hash -f ./vusers.list ftpusr.db
chmod 600 /etc/vsftpd/ftpusr.db

注释:
db_load应该是linux下创建虚拟账户:
选项-T允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。
指定了选项-T,那么一定要追加子选项-t;子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型。
-f 参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码
hash就是使用hash码加密


5、建立FTP访问的根目录及虚拟用户对应的系统帐户
①建立账户,该账户无需设置密码及登录shell 该账户的宿主目录作为所有虚拟用户登录后的共同FTP根目录。

useradd -d /var/ftproot -s /sbin/nologin virtual

②更改FTP根目录权限。

chmod 777 /var/ftproot/

③建立测试文件。

ll /etc/vsftpd/ >/var/ftproot/test.txt

6、建立PAM认证文件(PAM配置文件主要用户为程序提供用户认证控制)

vi /etc/pam.d/vsftpd.virtual

[vsftpd.virtual]

auth       required     /lib64/security/pam_userdb.so db=/etc/vsftpd/ftpusr
account    required     /lib64/security/pam_userdb.so db=/etc/vsftpd/ftpusr

注意:
64位系统要写

/lib64/security/pam_userdb.so

32位系统要写

/lib/security/pam_userdb.so

7、修改vsftpd配置文件

vi /etc/vsftpd/vsftpd.conf

[vsftpd.conf]

anonymous_enable=YES

local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

guest_enable=YES
#启用虚拟账户
guest_username=virtual
#虚拟用户的身份使用virtual用户
pam_service_name=vsftpd.virtual
#指明身份验证文件
virtual_use_local_privs=YES
#设置虚拟用户和本地用户一样的权限
#pam_service_name=vsftpd
#注释掉
userlist_enable=YES
tcp_wrappers=YES

8、重启服务

service vsftpd restart

补充:关于virtual_use_local_privs参数
当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。
当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。


9、验证
在Windows客户端中使用刚刚创建的账户登录进行增删改查操作


十、为虚拟用户设置不同的访问权限
1、实现目标
为FTP虚拟用户设置不同的FTP访问权限,具体要求如下:
zhangyuyjia /var/zhangyujia 上传下载
zhangyj /var/zhangyj 只能够下载
2、为每个虚拟用户创建独立的目录,改变所有的文件皆有其拥有者

mkdir /var/zhangyujia
mkdir /var/zhangyj
chown virtual /var/zhangyujia
chown virtual /var/zhangyj

3、为虚拟用户创建独立的配置文件

vi /etc/vsftpd/zhangyujia

添加

local_root=/var/zhangyujia
vi /etc/vsftpd/zhangyj

添加

local_root=/var/zhangyj
anon_upload_enable=NO

4、更改vsftp配置文件

vi /etc/vsftpd/vsftpd.conf

[vsftpd.conf]

anonymous_enable=YES
#检查此处是否添加或修改
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_root=/var/ftproot
anon_umask=022


local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES


guest_enable=YES
guest_username=virtual
#检查此处是否添加或修改
virtual_use_local_privs=NO
user_config_dir=/etc/vsftpd

pam_service_name=vsftpd.virtual
userlist_enable=YES
tcp_wrappers=YES

PS:切记,每次配置完vsftpd.conf后一定要重启服务!!!


欢迎关注
新浪微博:https://weibo.com/yougazhang0506
微信公众平台:张雨嘉

我的网站:https://www.zhangyujia.cn
51CTO博客:http://blog.51cto.com/11099293
CSDN博客:http://blog.csdn.net/u013260195

赞(0)
未经允许不得转载:嘉叔的博客 » 10-Linux中FTP服务的配置
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址