FTP服务器
FTP服务工作原理
FTP=File Transfer Protocal(RFC959)
专门用来上传(Upload)或者下载(Download)文件的协议,保用两个通信通道。
Client <--------message ----->server 21 Port
Client <--------data------------>server 20 Port
FTP客户端工具的使用
FTP服务器的访问
Dos:
c:/ftp ftp.chinaitlab.com
windows:
filezilla,IR,mozilla
Linux:
$ftp ftp.chinaitlab.com
gfip(text/X11)
dos :
ftp 202.67.216.119
dir列目录get下载 put 上传 help查看帮助bye 退出
linux也是一样的
配置vsftpd服务器
FTP服务器软件
Wu-ftpd http://www.wu-ftpd.org
Unix系统早期流行的匿名自由ftp服务器软件
Proftpd http://www.proftpd.org
使用类似apache配置文件的格式,在一个独立的配置文件中配置虚拟域以及配置目录的访问权限,也可以使用ftpaccess分别控制各个子目录
Vsftpd http://vsftpd.beasts.org
目前最安全,最高效的ftp服务器
安装vsftpd
1.下载源代码ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz
2.编译源代码,可参考帮助文件INSTALL
tar xvzf vsftpd-2.0.7.tar.gz
cd vsftpd-2.0.7
make
make install
3.安装配置文件
cp vsftpd.conf /etc/; cp RedHat/vsftpd.pam /etc/pam.d/ftp
4.编辑配置文件/etc/vsftpd.conf
5.启动服务器 /usr/local/sbin/vsftpd &
wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz
tar vxzf vsftpd-2.0.7.tar.gz
cd vsftpd-2.0.7
make
make install
which vsftpd查看安装在什么地方
/usr/local/sbin/vsftpd
cp vsftpd.conf /etc
cp RedHat/vsftpd.pam /etc/pam.d/ftp
vi /etc/vsftpd.conf
listen=YES
/usr/local/sbin/vsftpd &
netstat -tnl 查看端口是否有21号端口
ftp localhost 看看anonymous
finger ftp确认ftp用户是否存在
mkdir /var/ftp
chown root.root /var/ftp
chmod og-w /var/ftp
ftp localhost 现在anonymous可登陆了
为了让ftp开机运行可以将运行脚本写在
vi /etc/rc.local
/usr/local/sbin/vsftpd &
或默认的运行级别里
ls /etc/rc3.d
ls /etc/rc5.d
more /etc/init.d/sshd
more /etc/rc.local
ftp安装好后有两处启动脚本
ls /usr/local/sbin/vsftpd
ls /etc/xinetd.d/vsftpd
我们希望ftp独立运行
chkconfig vsftpd –list
vsftpd off我们确认它是关闭的,如果没有关闭用chkconfig vsftpd off
netstat -tnl确认重来没有启动过
用ftp进入本身看到的是 ls /var/ftp我们可以用finger ftp来查看ftp账号
它使用的匿名账号是ftp或者是anonymous
Vsftpd的配置文件
anonymous_enable=YES #允许匿名登陆
local_enable=YES #允许本地用户登陆
write_enable=YES #客户端写命令
local_umask=022 #本地用户新文件的umask值
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
dirmessage_enable=YES #允许使用目录消息
ftpd_banner=Welcome to chinaitlab #允许欢迎词
ls_recurse_enable=YES #允许客户端使用ls -R 命令
listen=YES #监听模式
设置让匿名用户可登陆并上传文件
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
dirmessage_enable=YES
ftpd_banner=Welcome to chinaitlab.
现在我们的ftp服务器是独立运行的需要用killall -9 vsftpd来杀ftp进程
killall -9 vsftpd这种方式是让服务器强制终止
killall -1 vsftpd我们也可以发送信号-1
id redhat查看本地用户是否可以登陆
ftp 192.168.0.101用redhat登陆
put /etc/services services上传客户端文件到服务器
权限码可读r 4 可写w 2 可执行 x 1
put /etc/hosts hosts 我们用匿名用户登陆并上传文件,但服务器553 Could not create file.
上面我们己打开anon_upload_enable=YES
这个原因是匿名用户对/var/ftp没有写权限
ls -ld /var/ftp
drwxr-xr-x 2 root root 4096 2008-11-07 18:02 /var/ftp
chmod g+w /var/ftp允许组来写
chgrp ftp /var/ftp把组属性给ftp因为ftp账号属于ftp组id ftp
uid=14(ftp) gid=50(ftp) groups=50(ftp)
现在我们用ftp来登陆,还是失败
vsftpd: refusing to run with writable anonymous root Login failed.
Vsftp为了安全性,不让我们在匿名用户的根目录上设置可写权限
我们把/var/ftp权限改回去
chgrp root /var/ftp
chmod g-w /var/ftp
ls -ld /var/ftp
mkdir in然后我们在/var/ftp下建一个目录用来用于匿名用户上传,并把可读写权限给ftp组
chgrp ftp in
chmod g+w in
ls -l
ftp 192.168.0.101用ftp登陆
cd in进入可上传目录
put /etc/hosts hosts
ls检查
但是我们用匿名账号上传,别人也可以看到为了让别的用户不能看到
chmod g-r in/ 这是让组没有可读权限这样客户机就只能上传不能看,并且用户访问的只能是/var/ftp目录及子目录,不能访问其它目录,这体现了vsftp的安全性
ls -ld in
Chroot环境
/etc/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
/etc/vsftpd.chroot_list
redhat
chinaitlab
vi /etc/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
vi /etc/vsftpd.chroot_list
tail /etc/vsftpd.chroot_list
redhat
chinaitlab
killall -HUP vsftpd然后重启vsftp
man vsftpd.conf可以查看帮助
用户控制
/etc/ftpusers
tom
jack
...
默认拒绝这里的用户登陆,但可以通过修改/etc/pam.d/ftp中的sence的值为allow,就表示只允许登陆的用户。
more /etc/pam.d/ftp 实际上它是通这个文件进行控制的,它里面有/lib/security/pam_listfile.so这个模块,它会检查登陆名是否列在file=/etc/ftpusers
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
echo "redhat">>/etc/ftpusers将redhat用户加进这个文件
这时我们用redhat来登陆ftp就不成功了
我们可以用这个方法,把所有敏感的用户加进这个文件
在redhat企业版里,一般都会帮我们自动建这个文件,所有vi /etc/passwd UID<500的人加进这个用户
当然我们可以更改more /etc/pam.d/ftp 将 sense=deny改成allow,这里只有里面的用户才能登陆
这时我们redhat就可以登陆了
默认的ftp账号以明文传输的,如果被人窃取就很危险,我们希望ftp支持虚拟账户
虚拟账号
1.建虚拟账号users.txt
tom
123
jack
123
#db_load -T -t hash -f users.txt /etc/vsftpd_login.db
#chmod 600 /etc/vsftpd_login.db
2.修改/etc/pam.d/ftp,增加
auth required pam_userdb.so db=/etc/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd_login
tail users.txt
tom
123
jack
123
[root@server in]# id tom
[root@server in]# id jack确认系统没有这两个用户
[root@server in]# rpm -q db4-utils
package db4-utils is not installed
[root@server in]# yum install db4-utils
db_load -T -t hash -f users.txt /etc/vsftpd_login.db
chmod 600 /etc/vsftpd_login.db
tail /etc/pam.d/ftp
#auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/ftpusers onerr=succeed
#auth required /lib/security/pam_unix.so shadow nullok
#auth required /lib/security/pam_shells.so
#account required /lib/security/pam_unix.so
#session required /lib/security/pam_unix.so
auth required pam_userdb.so db=/etc/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd_login
建好的tom,jack两个虚拟用户总是要映射成某个用户,所以我们需要给他增加一个虑拟用户的账号目录以及他们的映射身份
虚拟账号
3.建虚拟账号目录
useradd vuser
4.编辑/etc/vsftpd.conf,禁止匿名用户
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
guest_enable=YES
guest_username=vuser
killall -HUP vsftpd重启ftp
ftp 192.168.0.101用虚拟账号登陆jack ,tom
get .bashrc可以下载
但是不能让我们看目录
cd /root
cp install.log /home/vuser
ls -ld /home/vuser
drwx------ 2 vuser vuser 4096 2008-11-07 20:37 /home/vuser
先我们看不到,是因为没有vuser权限
为了让其它人看到这个目录时在内容chmod o+r /home/vuser
此时我们再次用虚拟账号来登陆,就可以看到目录列表了
man vsftpd.conf
其它常用ftp服务器介绍
Proftpd
proftpd – http://www.proftpd.org/
tar xvjf proftpd-XXX.tar.bz2
cd proftpd-XXX
./configure
make
make install
/usr/local/sbin/proftpd
配置文件 /usr/local/etc/proftpd.conf
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.bz2
tar xvjf proftpd-1.3.1.tar.bz2
cd proftpd-1.3.1
./configure 这是一般的服务器从源代码编译的过程,./configure进行配置,这个脚本会自动检查脚本中默认的环境。
make
make install
killall -9 vsftpd
netstat -tnl |grep 21
/usr/local/sbin/proftpd
netstat -tnlp |grep 21
ls /usr/lcoal/etc/proftpd.conf
wu-ftpd
wu-ftpd – http://www.wu-ftpd.org/
建议不要使用