Ubutu/Debian使用 VSFTPD架设FTP服务器小结

Ubutu/Debian使用 VSFTPD架设FTP服务器小结架设FTP服务器有好几次了,以前搭建好以后,没有记录操作的详细步骤,过阵时间又忘记了。此次架设FTP服务的需求要点:vsftpdmysql虚拟用户虚拟目录 只读用户 只写用户读写用户。1.安装软件:sudoapt-getinstallvsftpdlibpam-mysqlmysql-server安装MySQL过程中会询问MYSQL的root密码,输入两遍,以

大家好,又见面了,我是你们的朋友全栈君。

架设FTP服务器有好几次了,以前搭建好以后,没有记录操作的详细步骤,过阵时间又忘记了。此次架设FTP服务的需求要点: vsftpd mysql 虚拟用户 虚拟目录   只读用户  只写用户 读写用户。

1.安装软件:

sudo apt-get install vsftpd libpam-mysql mysql-server

安装MySQL过程中会询问MYSQL的root密码,输入两遍,以后程序自动完成安装。

2.测试VSFTPD:

修改vsftpd.conf激活匿名用户。

sudo vim /etc/vsftpd.conf

编辑 anonymous_enable=YES , 保存; 执行:

sudo  /etc/init.d/vsftpd restart  &&  ps -e | grep vsftpd

重启服务,并确保程序已启动。如果命令有输出进程号,证明VSFTPD已启动。匿名用户地俄权限为系统本地用户ftp的权限。

此时使用匿名账户登录,检测vsftpd服务和局域网络配置是否正常。

3.建立目录结构:

sudo mkdir /ftp
sudo mkdir /ftp/upload
sudo mkdir /ftp/pub
sudo mkdir /ftp/test

其中/ftp 为FTP文件系统根目录,下面有存放只读数据的pub目录,存放上传数据的upload目录,用户test个人目录。

4.创建VSFTPD虚拟用户,用户名暂定为vsftpd

sudo useradd -d /ftp -s /bin/false vsftpd

5.创建用户数据库:

mysql -uroot -p

输入密码,进入,然后创建数据库和表,并赋予权限:

create database company_passwd;
use company_passwd;
create table vsftpd (
-> id int AUTO_INCREMENT NOT NULL,
-> name char(20)  NOT NULL,
-> passwd char(50)  NOT NULL,
-> primary key(id)
-> );
describe vsftpd;
insert into vsftpd (name,passwd) values ('test',password'123456');
insert into vsftpd (name,passwd) values ('pub',password'123456');
insert into vsftpd (name,passwd) values ('upload',password'123456');
grant select on company.vsftpd to vsftpd@localhost identified by 'aaa';
quit

6.测试vsftpd用户对数据库能否访问:

mysql -uvsftpd -paaa

use company_passwd;
select * from vsftpd;

如果看到test用户,表明正常。

7.打开vsftpd的pam认证:

sudo mv /etc/pam.d/vsftpd{,-bak}
sudo vim /etc/pam.d/vsftpd

先清空内容,然后输入下面代码:

auth required pam_mysql.so user=vsftpd passwd=aaa host=localhost db=company_passwd table=vsftpd usercolumn=name passwdcolumn=passwd crypt=2

account required pam_mysql.so user=vsftpd passwd=aaa host=localhost db=company_passwd table=vsftpd usercolumn=name passwdcolumn=passwd crypt=2

8.备份并更新VSFTPD配置文件:

sudo mv /etc/vsftpd.conf{,-bak}
sudo vim /etc/vsftpd.conf

清空所有内容,输入:

#

listen=YES

anonymous_enable=NO
local_enable=YES
write_enable=NO
guest_enable=YES
guest_username=vsftpd

local_umask=022
connect_from_port_20=YES

dirmessage_enable=YES
ftpd_banner=Welcome to Embedded Lab FTP Server!

nopriv_user=vsftpd
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
user_config_dir=/etc/vsftpd_user_conf
local_root=/ftp/$USER
user_sub_token=$USER
virtual_use_local_privs=YES

secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

data_connection_timeout=15

保存。

9.重启VSFTP服务,并确保程序已运行。

sudo /etc/init.d/vsftpd restart && ps -e | grep vsftpd

现在vsftpd+mysql已配置好。可以做些简单测试。

10.权限设定:

sudo chown vsftpd.nogroup /ftp

A. 只读用户pub,只有对/ftp/pub的读权限。

sudo chown root.root /ftp/pub

B.上传用户upload,只对upload目录有写权限,无读权限。

sudo chown root.root /ftp/upload

sudo vim /etc/vsftpd_user_conf/upload

输入:

#
write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
download_enable=NO

C.个人用户,对test目录有读写权限,对upload目录只读,对pub只读。

sudo mkdir /ftp/test/pub
sudo mkdir /ftp/test/upload
sudo cd /ftp/test
sudo mount --bind /ftp/pub  pub
sudo mount --bind /ftp/upload upload
sudo chown root.root pub
sudo chown root.root upload
sudo chown vsftpd.nogroup /ftp/test

编辑test用户私人vsftpd配置:

sudo vim /etc/vsftpd_user_conf/test

输入:

#
write_enable=YES

Interesting Tips:

1.使用local_enable=YES可以开启本地用户,权限亦为本地用户权限。

2.使用guest_enable=YES可以开启虚拟用户,之后所有虚拟用户(包括使用PAM机制允许的本地用户)的权限皆为虚拟用户的权限。故而,如果希望开启虚拟用户,同时保留本地用户仍有本地用户的权限,可以在各个本地用户的用户私有配置里面,添加guest_enable=NO,刷新主配置文件中得设置。

3.如果匿名用户开启,其权限为本地用户ftp的权限。同时匿名用户不受local_root和user_sub_token的影响。

4.虚拟用户默认是同匿名用户拥有一样的权限。若要改变这个,则virtual_use_local_privs=YES. 让虚拟用户拥有和本地用户一样的权限,即本地用户拥有读写权限的文件,虚拟用户也照样拥有。对于匿名的上传文件的属性(属主,属组)可以通过chown_uploads和chown_username重新赋予。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162591.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1000个微信小程序源码分享[通俗易懂]

    1000个微信小程序源码分享[通俗易懂]文章目录微信小程序源代码获取开发账号注册小程序部分源码展示程序展示微信小程序现在的微信小程序非常火爆,网上也有很多学习资源,但是源码资源还是很少的。其实在学习开发微信小程序的时候如果有源码可以供我们借鉴,学习效率也会成倍的增加。无论是前端开发,还是后端开发,时间长了,你总会能总结出它的一些规律的,对于前端开发主要就两条,页面展现,逻辑处理。如果是全流程开发的话,那就是,如何创建项目,页面如何实现,数据获取和逻辑处理如何实现,如何打包上线。移动端或者前端,基本开发流程就这个四个步骤。所以在在前端方面去学

    2022年9月17日
  • pycharm的控制台主题,Pycharm控制台

    pycharm的控制台主题,Pycharm控制台本篇文章帮大家学习Pycharm控制台,包含了Pycharm控制台使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。PyCharm有一个完整的代码完整的python控制台,可以在选项菜单:工具(Tools)->运行Python控制台(RunPythonConsole)中找到。使用上一章中的代码,如下所示-message=’GIEWIVrGMTLIVrH…

    2022年8月26日
  • python更新pip失败_findwindow函数

    python更新pip失败_findwindow函数我使用pywin32扩展来解决FindWindow问题.简单的C代码:intmain(){HWNDh=FindWindow(NULL,TEXT(“SomeApp”));if(h!=INVALID_HANDLE_VALUE)SetForegroundWindow(h);return0;}效果很好.与python相同:importwin32guih=win32gui.FindW…

    2022年8月13日
  • C# List去重的三种方法「建议收藏」

    C# List去重的三种方法「建议收藏」三种去重的方法1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。2、使用表达式users.Where((x,i)=>users.FindIndex(z=>z.name==x.name)==i)去重,这条语句是查找users中name等于x.name的第一个元素。经实验,这个方法效率最低。3、使用循环,判断每个元素是否重复

    2022年5月25日
  • SQLyog下载安装

    SQLyog下载安装下载地址:https://pan.baidu.com/s/1IwYCjPpiSC5Fuuqx2qyDNg提取码:v6eh

    2022年5月27日
  • VR全景图制作软件哪个最好?这3款App教你制作一张完美的VR全景照片「建议收藏」

    VR全景图制作软件哪个最好?制作360度全景效果图的软件现在市面上还是有很多的,不同的功能运用在不同的场景之中,生活中,装修设计的等等形式的全景图都有不同的软件可以帮助我们制作。AutodeskStitcher:点击左侧链接下载AutodeskStitcher是一款高品质专业级的全景图制作工具,与AdobePhotoshop无缝平滑对接,广泛用于图象编辑、3D网页、虚拟旅游和超大尺寸全景图印刷等。是专业摄影师、多媒体艺术家和摄影爱好者的必备利器。最新版本能够为业界很多领域提供优良的解决方案,

    2022年4月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号