文档章节

在 CentOS 5 上通过 VSFTPD 及 MySQL 应用虚拟户口

不坏
 不坏
发布于 2014/06/12 21:03
字数 2587
阅读 17
收藏 0

采用虚拟用户对比本地用户的好处

  1. 在数据库内存储用户名称及口令,就算对 Unix 的安全性模式不熟识的管理员亦能作出管理。

  2. 除了为新用户初次创建子目录,你无须分享系统的 root 权限。通过 sudo 及一些脚本,你可以避免无限地将系统的 root 权限赋予那些看管系统的非管理级用户。没错,你甚至可以单单授权给 MySQL 外的 root 用户权限去修改 vsftpd 的 ACL 数据库,藉此提高安全性,纵使这种做法已经超越了本文章的范围。

  3. 你无须将拥有指令壳的本地户口给那些只需访问 FTP 的用户。正因如此,你减低了暴露於骇客前的机会,从而降低被入侵的风险。对於那些像 ftp 以纯文本作登录凭证的协议来说,这点尤其重要。

  4. 所有用户的数据都存储在同一目录树内,按需要选择性地采用个别用户的 ACL 设置。备份及恢复的目标便简化为目录树内的子集,而不像缺省的模式般把本地 FTP 户口及指令壳户口夹杂在/home/ 目录下。

MySQL 的安全性模式可以通过用户级的 ACL 权限保护它的数据库;根据惯例,MySQL 内的 root 用户是 ACL 数据库的超级用户,他被赋予权限读出、写入、及修改该数据库。我们亦会跟随这个惯例,在这个样例中采用 MySQL 的 root 用户。这个户口将会拥有自己的口令(有别於系统的 root 户口)。

这样做能防止 mysql 被入侵后,泄漏可用来入侵系统 root 户口的凭证,进而操控服务器。此外,这亦能防范口令从 MySQL 数据库备份中被解读出来,或者管理员错误地使用纯文本作为数据库的口令。一条简单的原则是:切勿在拥有特殊权限的户口「重用」口令。

先决条件 -> 函式库:pam_mysql.so

你会须要 VSFTPD 及 MySQL(假如它们仍未被安装)。以系统的 root 身份,执行以行指令来安装标准 CentOS 软件库内的组件:

# yum install vsftpd mysql-server

接著,引导仍未被执行的 mysqld:

# /sbin/service mysqld restart

请为 MySQL 数据库的 root 用户设置一个口令(假若你仍未如此做):

# mysqladmin -u root password 'yourrootsqlpassword'

请把你为 MySQL 的 root 用户所设的口令替换 'yourrootsqlpassword'(不需括号)。

为 vsftpd 创建 MySQL 数据库

从此起你已不再需要系统的 root 权限。请进入 MySQL 的指令壳:

$ mysql -u root -p

请输入 yourrootsqlpassword —— 请注意:你在 MySQL 中的 root 用户口令应该是别的,而不应该是 yourrootsqlpassword 。

现在於 MySQL 的指令壳内为虚拟的 vsftpd 用户创建一个数据库:

mysql> CREATE DATABASE vsftpd;mysql> GRANT SELECT ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY  'vsftpdpassword';mysql> FLUSH PRIVILEGES;

继续在 MySQL 的指令壳内,改用刚创建的数据库,然后创建所需的列表(当中只有一个列表,包含著用户名称及 MD5 加密的口令)。

mysql> USE vsftpd;mysql> CREATE TABLE `accounts` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR( 30 ) NOT NULL , `pass` VARCHAR( 50 ) NOT NULL , UNIQUE (`username`) ) ENGINE = MYISAM ;

现在你可以离开 MySQL 的指令壳:

mysql> exit;

设置 VSFTPD

创建一位名叫 vsftpd、隶属於 users 群组的非特殊用户(主目录位於 /home/vsftpd)。vsftpd 可以采用这位用户的身份来执行,进一步减低系统的风险。我们的虚拟用户的 FTP 目录将会在 /home/vsftp 目录之内(例如:/home/vsftpd/user1、/home/vsftpd/user2、等)或根据 VSFTPD个别用户配置文件 而定。

# useradd -G users -s /bin/false -d /home/vsftpd  vsftpd

接著修改 VSFTP 的设置。首先,将原先的 /etc/vsftpd.conf 文件备份:

# cp -v /etc/vsftpd/vsftpd.conf   /etc/vsftpd/vsftpd.conf-orig

然后作出修改:我们会先倒空现有的文件,然后打开它来编辑

# > /etc/vsftpd/vsftpd.conf# vi /etc/vsftpd/vsftpd.conf

vsftpd.conf 内的设置(将它们抄进文件内):

# 拒绝 ANONYMOUS 用户anonymous_enable=NO# 允许拥有写入权限(0755)的本地用户local_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YES# 如果你想记录 vsftpd 的动静,请除去 log_ftp_protocol 的注释# log_ftp_protocol=YESconnect_from_port_20=YES# 如果你没有采用以上的 log_ftp_protocol 行,请除去 xferlog_file 及# xferlog_std_format 的注释 —— 它们是互相排除的# 当 xferlog_enable=YES 及 xferlog_std_format=YES 时所采用的文件名称# 警告 —— 更改这个文件名影响 /etc/logrotate.d/vsftpd.log#xferlog_file=/var/log/xferlog## xferlog_std_format 切换记录是放进 vsftpd_log_file 还是 xferlog_file 文件内。# NO 写入 vsftpd_log_file,YES 写入 xferlog_file# xferlog_std_format=YES## 你可以更改工作阶段闲置时限的缺省值(以秒计算)。#idle_session_timeout=600## 你可以更改连接时限的缺省值(以秒计算)。#data_connection_timeout=120## 请为指定一个在系统上是完全被隔离、没有特权、及可供 ftp 服务器使用的用户。nopriv_user=vsftpdchroot_local_user=YESlisten=YES# 在这里我们采用 vsftpd 的凭证模块来检查用户名称及口令pam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES# 在这里 vsftpd 会允许 vsftpd 这个用户登录 /home/vsftpd/$USER 这个目录guest_enable=YESguest_username=vsftpdlocal_root=/home/vsftpd/$USERuser_sub_token=$USERvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/vsftpd_user_conf

借着 user_config_dir 这个选项,你可以为个别用户配置文件指定一个目录,用来交换区某些总体设置。这纯属选择性,你可决定是否应用该功能。

  • 无论如何,现在就创建这个目录

# mkdir /etc/vsftpd/vsftpd_user_conf

举个例说:你想 user1 的主目录位於 /home/vsftpd/user1 以外的地方,请创建 vsftpd 的个别用户配置文件

# vi /etc/vsftpd/vsftpd_user_conf/user1

并将设置放在其中:

dirlist_enable=YESdownload_enable=YES# user1 可访问的完整目录路径,请按你所需作出修改local_root=/home/users/user1write_enable=YES

要让这位用户登录,你必须创建 user1 这个目录!

# mkdir /home/users/user1

还有就是将读、写的权限赋予 user1:

# chmod 700 /home/users/user1# chown vsftpd.users /home/users/user1

於是 user1 的主目录便在 /home/users/users1 而不是 /home/vsftpd/user1,你更可以按需要在个别用户配置文件内作出修改。

现在你必须设置 PAM,使它利用 MySQL 数据库来验证你的虚拟 FTP 用户,而不是采用缺省的 /etc/password 及 /etc/shadow。

  • vsftpd 的 PAM 设置放置在 /etc/pam.d/vsftpd。请照以下方法将它备份并如下创建一个新文件:

# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd-orig# cat /dev/null > /etc/pam.d/vsftpd# vi /etc/pam.d/vsftpd

<!> 问题:为何在这里用 cat?之前便用了一个更简单的方法来倒空文件。是否有 SELinux、或权限方面的理由而不能以 mv 及 touch 取代?若假如此,为何不说清楚并描述所需的值?

/etc/pam.d/vsftpd 的内容(:当你复制它时应该只有 3 行):

#%PAM-1.0 session       optional        pam_keyinit.so       force revoke auth required pam_mysql.so user=vsftpd passwd=vsftpdpassword  host=localhost db=vsftpd table=accounts usercolumn=username   passwdcolumn=pass crypt=3 account required pam_mysql.so user=vsftpd passwd=vsftpdpassword  host=localhost db=vsftpd table=accounts usercolumn=username  passwdcolumn=pass crypt=3

请确定你已经将 MySQL 的 vsftpdpassword 口令改为你在「为 vsftpd 创建 MySQL 数据库」内所设置的那一个

现在是要令这一切在 CentOS 下运作的最微妙部份!

<!> 问题:这段编辑备注应该在这里出现吗?

你需要 pam_mysql.so 这个函式库,但它并不包含在 CentOS 的安装或 YUM 内,因此你需要用 RPM 安装它(或 EPEL 软件库 …… 或任何你喜欢的方法)。

rpm -Uvh pam_mysql-0.7-0.5.rc1.el5.kb.2.i386.rpm

它安装时应该不会导致警告或错误 …… 否则 …… 我推荐你利用 google 寻找器来找个方法安装它!

<!> 问题:这段编辑备注应该在这里出现吗?

安装完成后,你应该可以找到:

# ls -al /lib/security/pam_m*-rwxr-xr-x 1 root root  8024 Sep  4 00:51 /lib/security/pam_mail.so-rwxr-xr-x 1 root root 15848 Sep  4 00:51 /lib/security/pam_mkhomedir.so-rwxr-xr-x 1 root root  3892 Sep  4 00:51 /lib/security/pam_motd.so-rwxr-xr-x 1 root root 36920 Feb 28  2008 /lib/security/pam_mysql.so

它就在这个样例的最后一行!(可能会有更多文件,但上面的清单应该都存在)

以下步骤对於以 MySQL 数据库来验证虚拟用户是非常重要的

现在我们要创建首位虚拟用户

你可以用 MySQL 指令壳将用户加进数据库内:

$ mysql -u root -p

这输入口令 …… 然后在 SQL 指令壳内:

mysql> USE vsftpd;

采用 vsftpd 这个数据库

  • 现在创建 user1 这个虚拟用户,并设置 secret 这个口令(它会被 MySQL 的 MD5 函式来加密然后存储):

mysql> INSERT INTO accounts (username, pass) VALUES('user1', md5('secret'));

现在你应该有一位用户在数据库内:

mysql> select * from accounts; +----+-----------+----------------------------------+ | id | username  | pass                             | +----+-----------+----------------------------------+ |  1 | user1     | 5ebe2294ecd0e0f08eab7690d2a6ee69 | +----+-----------+----------------------------------+ 1 rows in set (0.00 sec)mysql> exit;

<!> 注:口令的散值只作说明之用,实际数值可能会有差别

现时 user1 的主目录位於 /home/vsftpd/user1。可惜 vsftpd 不会自动创建未存在的目录。因此现在你要以 root 身份创建它,并设置 vsftpd 及 users 这个群组为它的拥有人

# mkdir /home/vsftpd/user1# chown vsftpd:users /home/vsftpd/user1

现在重新引导 VSFTPD

# /sbin/service vsftpd restart

你应该可以通过任何乎合 RFC 规范的 FTP 客户端登录这个 FTP 服务器。

<!> 注:上面引述的配置文件同时用 21 及 20 号 FTP 端口(作操控及数据连接);有些网络设置(早期 Windows 有关静态 FTP 的 互联网选项;某些 NAT 的设计;某些代理服务器)不能通过第二个端口。若是如此,配置文件便须要有以下修订,而 FTP 服务器须要重新引导:

# connect_from_port_20=YESconnect_from_port_20=NO

如何在将来有需要时加入更多用户……只须简单的 2 步:

  1. 将新用户加进数据库:譬如 user12 与 secret12 这个口令(你亦可以创建电邮地址般的户口作登录之用,例如: user12@example.com ):

    进入数据库的指令壳;

    $ mysql -u root -p

    然后在 SQL 指令壳执行:

    mysql> USE vsftpd;mysql>INSERT INTO accounts (username, pass) VALUES('user12', md5('secret12'));mysql> exit;

  2. 新增 user12 的主目录,这个步骤需要系统的 root 权限:

    # mkdir /home/vsftpd/user12# chown vsftpd:users /home/vsftpd/user12

本文转载自:http://wiki.centos.org/zh/HowTos/VirtualVsFtpd

共有 人打赏支持
不坏
粉丝 6
博文 18
码字总数 1958
作品 0
长沙
技术主管
私信 提问
Linux服务及安全管理第十周作业【Linux微职位】

1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组...

akatsuki1023
06/29
0
0
samba服务及vsftp服务及nfs服务简单配置

1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组...

春天的金缕
2017/07/09
0
0
实验——基于文件验证和MYSQL验证的vsftpd虚拟用户

实验一、实现基于文件验证的vsftpd虚拟用户 1、创建用户数据库文件 vim /etc/vsftpd/vusers.txt wang wangpass mage magepass cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db ......

Ty_endless
2017/10/28
0
0
实现基于mysql验证的vsftpd虚拟用户

实验前说明:本实验需要在两台centos向主机上实现,一台作为ftp服务器,一台做数据库服务器 在这里我使用centos6做数据库服务器,centos7做ftp服务器 一:安装所需要的包和包组 在centos6上安...

雾中花1
2017/10/29
0
0
FTP服务器管理和配置

FTP服务的简介 FTP是Internet上使用非常广泛的一种通信协议,用于在不同的主机之间进行文件传输。Linux系统下常用的FTP服务器软件包括有wu-ftpd;vsftpd(Very Secure ftp Daemon);proftpd;...

孟东
2017/09/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SRE的含义及与 DevOps 如何关联?

虽然站点可靠性工程师(site reliability engineer SRE)角色在近几年变得流行起来,但是很多人 —— 甚至是软件行业里的 —— 还不知道 SRE 是什么或者 SRE 都干些什么。为了搞清楚这些问题...

linuxCool
1分钟前
0
0
月入3万之一个程序员的转行坎坷历程

陈年往事 “我月入3万,怎么会少少了你一个鸡蛋啊?” 这是2017年9月左右的一个新闻,一位煎饼摊大妈因和顾客争执时脱口而出这样一句话而走红。当时还上了各大新闻的头条。 互联网兴起今天,...

苏南-首席填坑官
23分钟前
1
1
OSChina 周一乱弹 —— 眼看着这颗陨石砸了下来

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Nachtblut的单曲《Antik》 《Antik》- Nachtblut 手机党少年们想听歌,请使劲儿戳(这里) @mr_chip :上海的初雪之后有点冷 ...

小小编辑
48分钟前
172
7
Confluence 6 修改导航显示选项

选择 子页面(Child pages)来在边栏中查看当前页面的子页面。 选择 页面树(Page tree)来查看整个空间的页面树,扩展当前的页面。 你也可以选择是否完全隐藏导航显示选项或者添加你希望可见...

honeymose
今天
2
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部