vsftpd调度
首先扯一下ftp的概念:
FTP服务在对外提供服务时需要维护两个连接:
(1)一个是控制连接,监听TCP 21号端口,用来传输控制命令;
(2)另一个是数据连接,(在主动传输方式下)监听TCP 20端口,用来传输数据。
使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当 授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要 求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。
匿名FTP 是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册 用户。系统管理员建立了一个特殊的用户ID,名为anonymous, Internet上的任何人在任何地方都可使用该用户ID。
当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。
即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个 公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上载有问题的文件,如带病毒的文件。
local_umask=022
设置创建文件权限的反掩码,如此处为022,则新建目录的权限为666-022=644
(rw-r--r--);新建文件的权限为777-022=755(drwxr-xr-x
)
重启vsftpd, /etc/init.d/vsftpd restart
创建匿名的ftp服务器
1、首先,你要确定你的给匿名用户使用的目录是什么,你可以修改ftp用户的主目录为/var/ftp/public作为匿名用户的目录。
2、创建一个用户,叫做ftpanon。为什么要设这个账户呢,因为匿名的话,客户端是用的anonymous账号登录的,但是用户列表中并没有叫anonymous的,服务器会把anonymous映射给ftpanon(至于怎么映射的稍后再说)。凡是anonymous的身份都会映射给ftpanon。这样用户只要是上传了文件(如果可以匿名上传的话,会将上传文件的属主变为ftpanon)
3、运行 chown root:root /var/ftp 这个不知道为什么
4、修改 /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftp
anon
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
然后重启ftp服务就可以了。
直接在浏览器里写 ftp://maosuhan.westhost.cn,就可以直接跳到/var/ftp/public文件夹中
你也可以这样,新建一个名为html的用户,将其主目录设为/var/www/html。设置密码为1234,然后就用这个账号登陆,就不要改配置文件了。
客户端ftp
用flashfxp
关于曾经的一个网站的经验
我想把我本地的网站和服务器上的空间挂上勾,用他自定义的文件管理器巨挫无比,于是下了一个ubuntu下的ftp客户端,crossftp。原来一直用的是ftpanon进行登录,是vstfpd的chownuser,其实我也不知道这个代表什么。我新建了一个用户叫html,设其主目录为/var/www/html,这样用html连接ftp就可以自动上传到网站空间里了。
ubuntu10。04下搭建vsftpd实例
首先安装sudo apt-get install vsftpf,安装完后系统会生成一个ftp的帐号和group
接着sudo gedit /etc/vsftpd.conf
你可以根据你的需求设置。因为我在机房,要当这个机房的服务器,所以将匿名设为可用。将里面的anonymous_enable=YES打开,并且设置成只是可读。
这里如果你打开ftp://localhost的话会自动跳到ftp这个用户的帐户文件里(/srv/ftp),刚开始是空的。
如果你不想用这个文件的话,也可以换。我首先创了一个/var/ftp/public,将其属主设为root,群为ftp,sudo chown -R root:ftp /var/ftp/public。再sudo chmod 755 /vat/ftp/public -R。好像这里改成其他模式会错误,貌似vsftpd不允许你将ftp的根目录的权限设成太高。再sudo usermod -d /var/ftp/public ftp将ftp的主目录改道public目录。
然后就可以访问了。
关于挂载
我的电脑是杀双系统,所以有些文件在ntfs的d盘e盘那里,我又不想拷贝。于是尝试用ln -s的方法,但是没用,说是什么550 Failed to change directory.去网上看也说是不行的。后来有人说用mount的方法,于是我试了一下,发现也没用,这是为什么呢?原来每次我让我的硬盘挂载的时候都是手动在Places菜单点击盘符才挂载,这样子的话被挂载的文件里的属主就是当前用户,且权限是700。当然ftp访问不到了,权限不够嘛!而且那个权限你又改不了,因为那个是ntfs的,跟ext4还不一样,反正一旦挂载了你就改不了权限了,貌似穷途末路了。后来我摸索出了一套办法,首先
sudo gedit /etc/fstab 这里是你的系统加载时自动会mount的设备,看看有没有你的ntfs的硬盘,如果有看看umask是否为0222或者是数值更小,如果是的话,就对了。我的fstab默认只有一个主分区ext4和一个swap,所以每次要手动点盘符才能挂载。
现在是关键的几步了
sudo gedit /etc/rc2.d/S66mount
输入
#! /bin/sh
mount "/dev/sda1" "/media/9886F41286F3EF1E/"
mount "/dev/sda2" "/media/302AE2E12AE2A2D8/"
mount "/dev/sda3" "/media/EC66ECE366ECB00E/"
mount --bind "/media/302AE2E12AE2A2D8/my music/" "/var/ftp/public/music"
mount --bind "/media/302AE2E12AE2A2D8/my picture/" "/var/ftp/public/picture"
mount --bind "/media/302AE2E12AE2A2D8/my video/" "/var/ftp/public/video"
mount --bind "/media/302AE2E12AE2A2D8/movie/" "/var/ftp/public/movie"
mount --bind "/media/EC66ECE366ECB00E/movie/" "/var/ftp/public/movie2"
mount --bind "/media/EC66ECE366ECB00E/software/" "/var/ftp/public/software"
当然这里你需要改成你的系统的情况。
你要确保你的ftp目录下存在那些文件夹如music、picture、movie2等
保存。这样的话你每次启动都会自动执行这一段脚本,不需要你手动挂载了,很方便的。而且那些挂载的文件的属主应该是root了,并且权限是777。ftp访问也一切正常。
关于权限限制
如果你默认用一些系统的用户来登录ftp的话,它可以在系统间随意游荡。如果你想限制其用户只能在自己的主目录下活动可以设定chroot,具体更改如下。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
再sudo gedit /etc/vsftpd.chroot_list
如果你想为哪些用户设置例外,也就是允许他们可以随意游荡,那么就把他们的名字写下,一行写一个。我这里面是空的,也就是说没有例外。
如果你想指定说哪些用户可以ftp登录哪些用户不可以,你可以设置
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
再sudo gedit /etc/vsftpd.user_list
我写的是
maosuhan
ftp
只有匿名ftp用户和当前用户可以登录ftp
如果你想设置哪些ip不能访问哪些能访问或者是哪些网段可访问哪些不可,这一这么做。
首先
sudo gedit /etc/hosts.allow
添加这样一些信息
vsftpd:172.25.72.251
vsftpd:172.25.72.0/24:DENY
设置除了172.25.72.251外所有在172.25.72.0/24网段上的人都不可以访问