vsftpd FTP服务器安装与配置

本文节选自《Netkiller Linux 手札》

3.4. vsftpd - The Very Secure FTP Daemon

3.4.1. 安装 vsftpd

3.4.1.1. Ubuntu 环境安装

$ sudo apt-get install vsftpd				

test

				[08:25:37 jobs:0] $ ncftp ftp://127.0.0.1
NcFTP 3.2.1 (Jul 29, 2007) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.7)
Logging in...
Login successful.
Logged in to 127.0.0.1.
Current remote directory is /.
ncftp / >				

enable local user

$ sudo vim /etc/vsftpd.conf

# Uncomment this to allow local users to log in.
local_enable=YES
chroot_local_user=YES

$ sudo /etc/init.d/vsftpd reload				

testing for local user

				$ ncftp ftp://neo@127.0.0.1/
NcFTP 3.2.1 (Jul 29, 2007) by Mike Gleason (http://www.NcFTP.com/contact/).
Connecting to 127.0.0.1...
(vsFTPd 2.0.7)
Logging in...
Password requested by 127.0.0.1 for user "neo".

    Please specify the password.

Password: *******

Login successful.
Logged in to 127.0.0.1.
Current remote directory is /home/neo.
ncftp /home/neo >				

3.4.1.2. CentOS 7 环境安装

				yum install -y vsftpd

systemctl enable vsftpd

cp /etc/vsftpd/vsftpd.conf{,.original}

sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf
sed -i 's/#chroot_local_user=YES/chroot_local_user=YES/' /etc/vsftpd/vsftpd.conf
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf
sed -i 's/listen_ipv6=YES/listen_ipv6=NO/' /etc/vsftpd/vsftpd.conf

echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf

systemctl start vsftpd				

firewalld 防火墙

# firewall-cmd --permanent --add-port=21/tcp				

iptables

sed -i 's/IPTABLES_MODULES=""/IPTABLES_MODULES="ip_conntrack_ftp"/' /etc/sysconfig/iptables-config

# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT				

3.4.2. ftp 帐号的shell权限

我们不想让FTP用户通过shell登录系统, 可以将用户的Shell改为/sbin/nologin

neo:x:1000:1000:neo,,,:/home/neo:/sbin/nologin			

3.4.3. vsftpd 认证模块

3.4.3.1. pam_shells.so

# cat /etc/pam.d/vsftpd
#%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	system-auth
account    include	system-auth
session    include	system-auth
session    required     pam_loginuid.so				

/etc/vsftpd/ftpusers 列表中的用户将不能登录ftp服务器

3.4.3.2. virtual user

创建明文密码文件,一行用户名后回车跟一行密码

# cat virtual-users.txt
user
password
neo
123456
jam
654321				

转为数据库文件

# sudo apt-get install db-util
# db_load -T -t hash -f virtual-users.txt /etc/vsftpd/virtual-users.db				

创建插件认证配置文件 /etc/pam.d/vsftpd-virtual

auth required pam_userdb.so db=/etc/vsftpd/virtual-users
account required pam_userdb.so db=/etc/vsftpd/virtual-users				
/etc/vsftpd/vsftpd.conf:

# virtual users to use local privs, not anon privs
virtual_use_local_privs=YES

# the PAM file used by authentication of virtual uses
pam_service_name=vsftpd-virtual

# in conjunction with 'local_root',
# specifies a home directory for each virtual user
user_sub_token=$USER
local_root=/var/www/virtual/$USER
# the virtual user is restricted to the virtual FTP area

chroot_local_user=YES
# hides the FTP server user IDs and just display "ftp" in directory listings
hide_ids=YES

guest_enable=YES
guest_username=nobody

# the umask for file creation
local_umask=022				

guest_username=nobody 虚拟用户将使用nobody用户作为他的uid,gid.

# mkdir /var/www/virtual/mary
# chown ftp:ftp /var/www/virtual/mary				

3.4.3.3. 虚拟用户权限

vim /etc/vsftpd.conf

user_config_dir=/etc/vsftpd/conf.d

mkdir /etc/vsftpd/conf.d				

neo 只能下载不能上传

				echo "anon_world_readable_only=NO" > /etc/vsftpd/conf.d/neo				

jam 可以下上传跟下载

				echo "anon_world_readable_only=NO" > /etc/vsftpd/conf.d/jam
echo "anon_upload_enable=YES" >> /etc/vsftpd/conf.d/jam
echo "write_enable=YES" >> /etc/vsftpd/conf.d/jam				

3.4.4. chroot

3.4.4.1. local user

chroot 所有本地用户

chroot_local_user=YES				

3.4.4.2. /etc/vsftpd/chroot_list

受限用户用户添加到文件vsftpd.chroot_list

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list				

注意:每行一个用户名

3.4.4.3. test

adduser -o --home /www --shell /sbin/nologin --uid 99 --gid 99 --group nobody www
echo "www:chen" | chpasswd
echo www > /etc/vsftpd/chroot_list
ncftp ftp://www:chen@172.16.0.1				

3.4.5. FAT

3.4.5.1. vsftpd: refusing to run with writable root inside chroot()

添加 allow_writeable_chroot=YES 项到 /etc/vsftpd/vsftpd.conf 配置文件

echo "allow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf				
重启 vsftpd 

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2016-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哈雷彗星撞地球

SDWebImageV3.7.5源码解析

SDWebImage更新到如今这个版本,过程做了许多改进,性能已经非常的好了。以前就粗略的看过SDWebImage的源码,但是未做记录整理。再次阅读还是受益良多...

833
来自专栏iOS技术杂谈

iOS网络——SDWebImage SDImageDownloader源码解析你要知道的NSURLSession都在这里

你要知道的NSURLSession都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本...

4965
来自专栏ios 技术积累

iOS AFNetworking 源码阅读二

当解析错误,我们直接调用传进来的fauler的Block失败返回了,这里有一个self.completionQueue,这个是我们自定义的,这个是一个GCD的Q...

762
来自专栏Alice

kvo深入浅出举例

一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对...

1875
来自专栏小蠢驴iOS专题

手把手教你使用Bugly收集线上崩溃信息

6343
来自专栏谈补锅

控制器和应用数据存储

1、UINavigationController, 继承UIViewController,UINavigationController以栈的形式保存子控制器

933
来自专栏DannyHoo的专栏

解决“真机上不能读取本地路径”的问题d

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1412
来自专栏『不羁阁』行走的少年专栏

iOS网络--『文件下载、断点下载』的实现(三):AFNetworking

2784
来自专栏Jacklin攻城狮

iOS开发中的这些权限,你搞懂了吗?

![Uploading 144446-b8aca7ba38c5f8c0_695906.png . . .]获取相册权限

1784
来自专栏清墨_iOS分享

iOS多个网络请求完成后执行下一步

在开发中,我们很容易遇到这样的需求,需要我们同时做多个网络请求,所有网络请求都完成后才能进行下一步的操作。如下载多个图片,下载完了才能展示。 今天我们就来研究一...

5047

扫码关注云+社区