我正在运行 Ubuntu 10.04 i386。我使用 Cyberduck(FTP GUI 客户端)连接到我的服务器 mysub.domainname.com(在此处更改)。
这就是我想要做的事情:
1)将 apache2 根目录从 更改/var/www
为/home/myuser/webroot
以提供 index.html 等文件
2)允许FTP写入/home/myuser/webroot
3)允许myuser
使用其用户名/密码组合登录 FTP 并读取/写入myuser
文件夹内的任何位置
Apache2 根文件夹工作正常。转到 myserver.com/index.html 有效。但我无法让 FTP 写入,即使我更改了以下行etc/vsftpd.conf
:
listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
#local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
# chroot_list_enable below.
#chroot_local_user=YES
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
问题
每当我尝试在我的 FTP 程序 Cyberduck 中创建文件夹/home/myuser
或/home/myuser/webroot
出现错误时。Create directory operation failed.
也许有用的信息:
drwxrwsr-x 2 myuser www-data 4096 2011-04-18 03:04 webroot
我也在这里改变了权限:
-rw-rwSr-- 1 myuser root 69 2011-04-18 02:14 index.html
...但是没有运气。我仍然无法使用 FTP 上传或写入。任何建议或指示都很好,我对此很困惑。
更新:
我尝试启用 FTP 的匿名登录,但根本无法让它工作……我认为唯一的解决办法是彻底清除系统中的 vsftpd 和 apache2,然后重新开始
答案1
对于权限,您需要拥有该文件夹及其中的文件,myuser
以便可以从 myuser 帐户访问它们。
如果 Apache(或你的脚本)需要写到文件夹,那么最好的做法是使用chgrp
将应写入的特定位置分配给 www-data 组,然后分配给chmod g+w
该位置或文件。如果您授予文件夹的写访问权限,chmod g+sw
则将授予文件夹的写访问权限并确保在那里创建的文件也属于 www-data 组。
在这种情况下,文件和目录看起来像这样:
drwxrwxr-x 2 myuser www-data 4096 2011-04-18 03:04 webroot
-rw-rw-r-- 1 myuser www-data 1000 2011-04-18 03:04 index.html
drwxrwsr-x 2 myuser www-data 4096 2011-04-18 03:04 folderwithg+ws
不过,您需要非常小心地向 apache 授予文件和文件夹的写权限,否则攻击者可能会想出办法让您的脚本覆盖自身或替换 index.html 等。
否则,如果 apache 不需要写入您的文档目录,则只要所有子目录和文件都是全世界可读的(并且目录是全世界可访问的),权限就应该没问题。
对于 SSL/TLS,你缺少
ssl_enable=YES
您可以强制用户使用加密:
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_ciphers=
如果你想将其限制为 HIGH 或特定的密码列表,还有一个选项。如果你想要“隐式 SSL”(而不是AUTH SSL
或AUTH TLS
命令来启动加密,加密是在连接开始时协商的),那么implicit_ssl=YES