ubuntu安装ftp服务器
1: 安装vsftpd
~$ sudo apt-get install vsftpd
2: 配置vsftpd
2.1 修改vsftpd的配置文件。此类配置文件通常位于 /etc 目录下。
~$ sudo gedit /etc/vsftpd.conf
原文件中不少指令被注释,只要启用部分即可,一下是启用的命令(配置文件中对每一条都有具体说明)
listen=YES # 服务器监听
anonymous_enable=YES # 匿名访问允许
local_enable=YES # 本地主机访问允许
write_enable=YES # 写允许
anon_upload_enable=YES
# 匿名上传允许,默认是NO,嫌麻烦的可以开起来。出了问题我不负责~
anon_mkdir_write_enable=YES # 匿名创建文件夹允许
dirmessage_enable=YES # 进入文件夹允许
xferlog_enable=YES # ftp 日志记录允许
connect_from_port_20=YES # 允许使用20号端口作为数据传送的端口
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
wq 保存。
2.2 设置ftp相关目录
安装完毕后,/srv下会增加一个ftp目录。同时系统会增加一个名为ftp的用户组,可以用~$ sudo cat /etc/shadow 查看, 如 ftp:*:14993:0:99999:7:::。我们在/srv/ftp目录下创建两个分别名为upload和download的目录,分别用于上传和下载。接下来我们为刚才创建的几个目录设置权限,如下:
权限 /srv/ftp /srv/ftp/upload /srv/ftp/download
用户组(ftp) 读 读写 读
其他用户 读 读写 读
执行命令:
~$ sudo chmod 755 /home/ftp
~$ sudo chmod 777 /home/ftp/upload
~$ sudo chmod 755 /home/ftp/download
如此,一方面我们允许了用户组ftp访问/home/ftp (匿名访问);一方面赋予了用户组ftp对/srv/ftp/upload的写权利,因此网络上的用户可以方便地上传文件,但注意,当他们上传后,上传的文件只有root对这些文件拥有权限,也就是说这个目录仅能用于上传,无法下载其中的文件;此外赋予了用户组ftp对 /home/ftp/download的读权利,同时我们拷贝进该目录下的文件对于用户组而言通常都有读权利,因此网络上的用户从此目录下能且仅能下载文件。从而满足了我们预先的要求。
3:启动vsftpd
~$ sudo service vsftpd start
查看当前所有进程: ~$ ps -e
2183 ? 00:00:00 vsftpd
至此服务器端vsftp的最基本配置已完成,vsftpd已开启。(注意你的防火墙配置,作为简单试验可以直接停用防火墙)
当然关闭vsftpd进程只需要执行~$ sudo service vsftpd stop,同时还可以使用命令~$ pgrep vsftpd 来查看进程vsftp是否存在。
4:vsftpd 设置用户目录,如果你设置了匿名用户也可以登录上传的话~这个可以省了~
(1) 增加组 sudo groupadd ftpgroup
(2 )修改vsftpd.conf
~$ sudo vi /etc/vsftpd.conf
打开下面配置
local_enable=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
(3) 增加用户ftpuser并设置其目录为/home/nation/ftp/upload
sudo useradd -g ftpgroup -d /home/nation/ftp/upload -m ftpuser
(4 )设置用户口令 passwd ftpuser
(5) 编辑chroot_list文件:
sudo vi /etc/vsftpd.chroot_list
内容为ftp用户名,每个用户占一行,如:
ftpuser
(6 )重新启动vsftpd:
sudo service vsftpd start
ftp用户锁定主目录的设定:
前面设置过/etc/vsftpd.chroot_list 里的用户是可以chroot的,就是说不锁定目录,
比较安全的方案是默认锁定所有账号的主目录,若不需要锁定主目录的才写在/etc/vsftpd.chroot_list里:
修改配置文件:
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
此时用户登陆会报500错误:vsftpd refusing to run with writable root inside chroot()
这是因为新版本的vsftp不允许主目录有写权限,但是主目录下面的目录可以读写,所以要去掉主目录的写权限:
sudo chmod a-w /home/ftpuser
这样才能正常登陆,但是没有任何权限,所以要预设几个目录:
/home/ftpuser/logfiles
/home/ftpuser/database
/home/ftpuser/webroot
这样用户登陆以后可以在这几个文件夹下上传下载了。
参考鸟哥教程:http://linux.vbird.org/linux_server/0410vsftpd.php
重點回顧
- FTP 是檔案傳輸協定 (File Transfer Protocol) 的簡寫,主要的功能是進行伺服器與用戶端的檔案管理、傳輸等事項;
- FTP 的伺服器軟體非常多,例如 Wu FTP, Proftpd, vsftpd 等等,各種 FTP 伺服器軟體的發展理念並不相同, 所以選擇時請依照你的需求來決定所需要的軟體;
- FTP 使用的是明碼傳輸,而過去一些 FTP 伺服器軟體也曾被發現安全漏洞,因此設定前請確定該軟體已是最新版本,避免安全議題的衍生;
- 由於 FTP 是明碼傳輸,其實可以使用 SSH 提供的 sftp 來取代 FTP ;
- 大多數的 FTP 伺服器軟體都提供 chroot 的功能,將實體用戶限制在他的家目錄內;
- FTP 這個 daemon 所開啟的正規埠口為 20 與 21 ,其中 21 為命令通道, 20 為主動連線的資料傳輸通道;
- FTP 的資料傳輸方式主要分為主動與被動(Passive, PASV),如果是主動的話,則 ftp-data 在伺服器端主動以 port 20 連接到用戶端,否則需開放被動式監聽的埠口等待用戶端來連接;
- 在 NAT 主機內的用戶端 FTP 軟體連線時可能發生困擾,這可以透過 iptables 的 nat 模組或利用被動式連線來克服;
- 一般來說, FTP 上面共有三個群組,分別是實體用戶、訪客與匿名登入者(real, guest, anonymous);
- 可以藉由修改 /etc/passwd 裡面的 Shell 欄位,來讓使用者僅能使用 FTP 而無法登入主機;
- FTP 的指令、與使用者活動所造成的登錄檔是放置在 /var/log/xferlog 裡面;
- vsftpd 為專注在安全議題上而發展的一套 FTP 伺服器軟體,他的設定檔在 /etc/vsftpd.conf