112010

VSFTPD是一种在 UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器 中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器 所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理 性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极 好的解决方案。本文介绍在RedHat Linux 9上如何将VSFTPD的虚拟用户名和密码保存在MySQL数据库服务器中。

一、VSFTPD的安装

目前,VSFTPD的最新版本是1.2.0版。官方下载地址为ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz。在安装前,需要先做以下准备工作:

VSFTPD默认配置中需要“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。

[root@hpe45 root]# useradd nobody

useradd: user nobody exists

VSFTPD默认配置中需要“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。

[root@hpe45 root]# mkdir /usr/share/empty/

mkdir: cannot create directory ‘/usr/share/empty’: File exists

VSFTPD提供匿名FTP服务时,需要“ftp”用户和一个有效的匿名目录。

[root@hpe45 root]# mkdir /var/ftp/

[root@hpe45 root]# useradd -d /var/ftp ftp

接下来的操作对于ftp用户是否已经存在都是有用的。

[root@hpe45 root]# chown root.root /var/ftp

[root@hpe45 root]# chmod og-w /var/ftp

以上准备工作完成后,我们就可以开始编译源代码了。假定我们下载的vsftpd-1.2.0.tar.gz在/root目录,执行以下命令:

[root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz

[root@hpe45 root]# cd vsftpd-1.2.0

[root@hpe45 vsftpd-1.2.0]# make

[root@hpe45 vsftpd-1.2.0]# make install

上面的“make install”命令将编译好的二进制文件、手册等复制到相应目录。在RHL9上,可能需要手动执行以下复制:

[root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd

[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5

[root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8

接下来,我们复制一个简单的配置文件作为基础供后面修改。

[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc

[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp

复制PAM验证文件,以允许本地用户登录VSFTPD。

[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp

二、创建guest用户

VSFTPD采用PAM方式验证虚拟 用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是 VSFTPD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。当然,我们也可以把guest用户看成是虚拟用户在系统中的代表。下面 在系统中添加vsftpdguest用户,作为VSFTPD的guest。

[root@hpe45 vsftpd-1.2.0]# useradd vsftpdguest

当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的自家目录即可。

三、设置VSFTPD配置文件

在/etc/vsftpd.conf文件中,加入以下选项:

guest_enable=YES

guest_username=vsftpdguest

然后执行以下命令,让VSFTPD在后台运行:

[root@hpe45 vsftpd-1.2.0]# /usr/local/sbin/vsftpd &

四、将虚拟用户保存在MySQL数据库服务器中

我们建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,同时增加两个虚拟用户xiaotong和xiaowang。

[root@hpe45 vsftpd-1.2.0]# mysql -p

mysql>create database vsftpdvu;

mysql>use vsftpdvu;

mysql>create table users(name char(16) binary,passwd char(16) binary);

mysql>insert into users (name,passwd) values (‘xiaotong’,password(‘qqmywife’));

mysql>insert into users (name,passwd) values (‘xiaowang’,password(‘ttmywife’));

mysql>quit

然后,授权vsftpdguest可以读vsftpdvu数据库的users表。执行以下命令:

[root@hpe45 vsftpd-1.2.0]# mysql -u root mysql -p

mysql>grant select on vsftpdvu.users to vsftpdguest@localhost identified by ‘i52serial0′;

mysql>quit

如果要验证刚才的操作是否成功可以执行下面命令:

[root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu

mysql>select * from users;

如果成功,将会列出xiaotong、xiaowang和加密后的密码

五、设置MySQL的PAM验证

这里我们要用到一个利用mysql进行pam验证的开源项目(sourceforge.net/projects/pam- mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz,复制到/root目录中。在编译安装之前,要确保mysql- devel的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:

[root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz

[root@hpe45 root]#cd pam_mysql

[root@hpe45 pam_mysql]#make

[root@hpe45 pam_mysql]#make install

make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.o复制到/lib/security目录下。

接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/ftp文件,加入以下内容:

auth required pam_mysql.o user=vsftpdguest passwd=i52serial0 host= localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2

account required pam_mysql.o user=vsftpdguest passwd=i52serial0 host= localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2

上面涉及到的参数,只要对应前面数据 库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式: crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt= 2,口令经过MySQL的password()函数加密后保存。

六、进一步的虚拟用户设置

经过以上的步骤,虚拟用户就可以正常使用了。这里介绍进一步的虚拟用户设置。首先,介绍虚拟用户的权限设置。

VSFTPD-1.2.0新添了 virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户 使用与匿名用户相同的权限,这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相比,后者更加严格一些,特别是在有写访问 的情形下。默认情况下此参数是关闭的(NO)。

当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限。而virtual_use_local_privs=NO时,对虚拟用户权限的设置就更多一些更严格一些。

控制虚拟用户浏览目录:如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:一,配置文件中,anon_world_readable_only=YES。二,虚拟用户目录的权限改为只能由vsftpdguest操作:

[root@hpe45 root]# chown vsftpdguest.vsftpdguest /home/vsftpdguest

[root@hpe45 root]# chmod 700 /home/vsftpdguest

允许虚拟用户上传文件:

write_enable=YES

anon_upload_enable=YES

允许虚拟用户修改文件名和删除文件:

anon_other_write_enable=YES

由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。

其次,由于虚拟用户在系统中是vsftpdguest身份,所以可以访问到系统的其他目录。为了更加安全,我们可以将虚拟用户限制在自家目录下。有两种做法:一,在配置文件中增加以下选项

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list

然后,在/etc/vsftpd.chroot_list文件中加入虚拟用户名xiaotong和xiaowang。

第二种做法,在配置文件中修改chroot_local_user=YES。

经过修改后,虚拟用户登录后其根目录就限制在/home/vsftpdguest下,无法访问其他目录。

七、虚拟用户的个人目录

大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。首先,在主配置文件中加入以下选项:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

然后,生成/etc/vsftpd/vsftpd_user_conf目录,并在该目录下建立与特定虚拟用户同名的文件:

[root@hpe45 root]# mkdir /etc/vsftpd/vsftpd_user_conf

[root@hpe45 root]# cd /etc/vsftpd/vsftpd_user_conf

[root@hpe45 vsftpd_user_conf]# touch xiaowang

以上的操作为虚拟用户xiaowang建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/xiaowang。接下来,在xiaowang的个人配置文件中将xiaowang的自家目录修改为/home/xiaowang,配置选项为:

local_root=/home/xiaowang

然后,新建xiaowang目录,并将权限设为vsftpdguest:

[root@hpe45 vsftpd_user_conf]# mkdir /home/xiaowang

[root@hpe45 vsftpd_user_conf]# chown vsftpdguest.vsftpdguest ./xiaowang

[root@hpe45 vsftpd_user_conf]# chmod 600 /home/xiaowang

经过以上设置,xiaowang登录VSFTPD后,用“pwd”指令就可以发现被自己被定位到自己的“/home/xiaowang”目录。

从文件系统层次来看,由于 “/home/xiaowang”目录的权限是属于vsftpdguest的,所以其他的虚拟用户同样也可以访问 xiaowang的自家目录。解决这个问题也很简单,我们只需要让VSFTPD负责将虚拟用户限制在其自家目录,就可以避免虚拟用户的互相访问。具体做法 参照前面第六步中所述,这里不再赘述。经过以上设置后,虚拟用户就可以拥有属于自己的目录了。

Telnet、FTP、SSH、SFTP、SCP

Posted by 冰河 at 21:14 No Responses » 34,599 Views
142010

【Telnet】著名的终端访问协议,传统的网络服务程序,如FTP、POP和Telnet,其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令。

【telnet命令】telnet host [port]

【SSH】Secure Shell 的缩写,是建立在传输层基础上的安全协议,它本身属于应用层,同时可以为应用层提供安全传输服务。

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。透过 SSH 可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。

SSH 之另一项优点为其传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。

【ssh命令】linux下,用ssh登录服务器,格式如下:
ssh -l 远程服务器用户名 远程服务器ip地址 -p 远程服务器ssh端口(默认22)

【SecureCRT使用SSH2协议登录示例】:在windows下,使用SecureCRT 6.2可方便Telnet到远端服务器,它支持SSH1、SSH2、Telnet/SSL等安全登录访问协议,在第一次使用SSH2协议向服务器建立连接 时,,SecureCRT首先会检查Server的公钥是否在本地数据库存放,如果没有,则不会把你的用户名、口令传输过去,它会将服务器端的公钥取回来 (可以直接从Server取,也可以从第三方获取),并提示:

The host key database does not contain an entry for the

hostname 172.16.200.244, which resolved to 172.16.200.244,

port 22. If you have received this message more

than once for 172.16.200.244, this may mean that 172.16.200.244

is an “alias” which resolves to different hosts.

It is recommended you verify your host key before accepting.

Server’s host key fingerprint (MD5 hash):

24:0f:36:5e:43:ad:f5:b8:1b:ae:ac:f7:9f:c2:c0:4c

当 你选择确认保存,则SecureCRT会把Server的公钥保存到本地公钥数据库,然后会重新让你输入用户名和密码,再次安全地登录服务器,因为这一次 会使用Server的公钥来加密用户名和口令。之后的登录和交互就会一直使用本地数据库保存的Server的公钥来加密传输。

【scp命令】

SCP(Secure Copy)——Linux文件传送命令

scp 命令是 SSH 中最方便有用的命令了,试想,在两台服务器之间直接传送文件,仅仅用 scp 一个命令就完全解决了。 你可以在一台服务器上以 root 身份运行 #scp servername:/home/ftp/pub/file1 . 这样就把另一台服务器上的文件 /home/ftp/pub/file1 直接传到本机器的当前目录下,当然你也可以用 #scp /tmp/file2 servername:/boot 把本机上的文件 /tmp/file2 送到另一台机器的 /boot 目录下。而且整个传送过程仍然是用 SSH 加密的。

scp 就是 secure copy, 是用来进行远程文件拷贝的 . 数据传输使用 ssh1, 并且和 ssh1 使用相同的认证方式 , 提供相同的安全保证。与 rcp 不同的是 ,scp 会要求你输入密码,如果需要的话。

最简单的应用如下 :

scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

-C 使能压缩选项 .

-P 选择端口 . 注意 -p 已经被 rcp 使用 .

-4 强行使用 IPV4 地址 .

-6 强行使用 IPV6 地址 .

-r Recursively copy entire directories.

如——

copy 本地的档案到远程的机器上

scp /etc/lilo.conf my@www.upsdn.net:/home/my

会将本地的 /etc/lilo.conf 这个档案 copy 到 www.upsdn.net,使用者my 的家目录下。

=====================================================

例如:

copy 本地的档案到远程的机器上

scp /etc/lilo.conf k@net67.ee.oit.edu.tw:/home/k

会将本地的 /etc/lilo.conf 这个档案 copy 到 net67.ee.oit.edu.tw,使用者 k 的家目录下。

copy远程机器上的档案到本地来

scp k@net67.ee.oit.edu.tw:/etc/lilo.conf /etc

会将 net67.ee.oitdu.tw 中 /etc/lilo.conf 档案 copy 到本地的 /etc 目录下。

保持从来源 host 档案的属性

scp –p k@net67.ee.tw:/etc/lilo.conf /etc

在此必须注意使用者的权限是否可读取远程上的档案,若想知道更多关于 scp 的使用方法,可去看看 scp 的使用手册。

ssh-keygen

产生公开钥 (pulib key) 和私人钥 (private key),以保障 ssh 联机的安性, 当 ssh 连 shd 服务器,会交换公开钥上,系统会检查 /etc/ssh_know_hosts 内储存的 key,如果找到客户端就用这个 key 产生一个随机产生的session key 传给服务器,两端都用这个 key 来继续完成 ssh 剩下来的阶段。

它会产生 identity.pub、identity 两个档案,私人钥存放于identity,公开钥 存放于 identity.pub 中,接下来使用 scp 将 identity.pub copy 到远程机器的家目录下.ssh下的authorized_keys。 .ssh/authorized_keys(这个 authorized_keys 档案相当于协议的 rhosts 档案), 之后使用者能够不用密码去登入。RSA的认证绝对是比 rhosts 认证更来的安全可靠。

执行:

scp identity.pub k@linux1.ee.oit.edu.tw:.ssh/authorized_keys

若在使用 ssh-keygen 产生钥匙对时没有输入密码,则如上所示不需输入密码即可从 net67.ee.oit.edu.tw 去登入 linux1.ee.oit.edu.tw。在此,这里输入的密码可以跟帐号的密码不同,也可以不输入密码。

【FTP】

文件传输协议英文File Transfer Protocol,简称为FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络协议组应用层

【ftp命令】ftp host

【SFTP】

SSH File Transfer Protocol ,有时也被称作 Secure File Transfer ProtocolSFTP。

它和SCP的区别是它允许用户中断传输,SCP拷贝速度稍快一些。

具体解释可参见http://en.wikipedia.org/wiki/SSH_file_transfer_protocol

【sftp命令】另外,小写字母sftp也是linux下的一个命令,遵从SFTP,示例:

sftp -oPort=22 oracle@162.10.0.6

© 2009 - 2024 冰河的博客