![Pure-FTPd 符号链接不起作用](https://linux22.com/image/842237/Pure-FTPd%20%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
好的,我使用的是 Ubuntu 12.04 LTS,并且安装了 Pure-FTPd,我为其创建了一个用户和组,当我使用 FTP 客户端登录时,它会将我放在 /home/group/user 中
我想从那里访问我的存储驱动器,因此我在指向 /media/Store 的文件夹中放置了一个符号链接,它会显示在 FTP 上,但是,它不允许我跟踪它。
/media/Store 驱动器采用 NTFS 格式化,因此我无法更改它的权限。
etc/pure-ftpd/conf 有:
AltLog clf:/
ChrootEveryone yes
Daemonize yes
FSCharset UTF-8
MaxClientsNumber 50
MaxClientsPerIP 2
MinUID 1000
NoAnonymous yes
PAMAuthentication no
PureDB /etc/pure-ftpd/pureftpd.pdb
TrustedGID 1001
UnixAuthentication no
我的 pureftpd.passwd 文件看起来几乎像
user:x:1001:1001:://usr/group/user/::::::::::::
我的 etc/default/pure-ftpd-common 看起来像
# Configuration for pure-ftpd
# (this file is sourced by /bin/sh, edit accordingly)
# STANDALONE_OR_INETD
# valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD=standalone
# VIRTUALCHROOT:
# whether to use binary with virtualchroot support
# valid values are "true" or "false"
# Any change here overrides the setting in debconf.
VIRTUALCHROOT=true
# UPLOADSCRIPT: if this is set and the daemon is run in standalone mode,
# pure-uploadscript will also be run to spawn the program given below
# for handling uploads. see /usr/share/doc/pure-ftpd/README.gz or
# pure-uploadscript(8)
# example: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl
UPLOADSCRIPT=
# if set, pure-uploadscript will spawn $UPLOADSCRIPT running as the
# given uid and gid
UPLOADUID=
UPLOADGID=
我尝试了不同的配置,但无法退出登录文件夹并进入存储驱动器,我可能只是缺少一些简单的东西。
答案1
好的,我启动了一个 VirtualBox 客户机来尝试一下:
- 8GB VDI,512MB 内存
- 从 ubuntu-12.04-desktop-i386.iso 安装
- /dev/sda1,7000MB,ext4,挂载/
- /dev/sda5, 999MB,fat32,mount /media/Store(安装程序中没有 NTFS 选项)
- /dev/sda6, 587MB, 交换
- 除时区外,其他所有设置均默认。
哎呀,我忘了 Unity 有多糟糕。:) 我添加了 Virtual Guest Additions,运行update-manager
,等待... 618 更新,重新启动。然后我按照以下社区文档操作:
https://help.ubuntu.com/community/PureFTP
sudo apt-get install pure-ftpd
# already installed?
gksudo gedit /etc/inetd.conf
# no changes required?
gksudo gedit /etc/default/pure-ftpd-common
# already: STANDALONE_OR_INETD=standalone
# changed: VIRTUALCHROOT=true
sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser
注意:此时id ftpuser
返回。uid=1001(ftpuser) gid=1001(ftpgroup) groups=1001(ftpgroup)
sudo mkdir /home/ftpusers
sudo mkdir /home/ftpusers/joe
sudo pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe
sudo pure-pw mkdb
sudo ln -s /etc/pure-ftpd/pureftpd.passwd /etc/pureftpd.passwd
sudo ln -s /etc/pure-ftpd/pureftpd.pdb /etc/pureftpd.pdb
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/PureDB
sudo sh -c 'echo "no" > /etc/pure-ftpd/conf/UnixAuthentication'
sudo chown ftpuser:ftpgroup -R /home/ftpusers
gksudo pureadmin
确认/etc/pure-ftpd/pureftpd.passwd
包含:
joe:...:1001:1001::/home/ftpusers/joe/./::::::::::::
sudo /etc/init.d/pure-ftpd restart
# Restarting ftp server: Running: /usr/sbin/pure-ftpd-virtualchroot -l pam -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -8 UTF-8 -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -B
现在我可以ftp localhost
像乔一样了。
第一次尝试:我创建了一个到 /media/Store 的符号链接,joe 可以在他的 中看到它ls /
,但无法cd
进入(550 无法将目录更改为 Store:权限被拒绝):
sudo ln -s /media/Store /home/ftpusers/joe/Store
sudo chown ftpuser:ftpgroup -R /home/ftpusers/joe
# sudo rm /home/ftpusers/joe/Store
第二次尝试:我创建了一个到 /dev/sda5 的符号链接,joe 可以在他的 中看到它ls /
,但无法cd
进入(550 无法将目录更改为存储:不是目录):
sudo ln -s /dev/sda5 /home/ftpusers/joe/Store
sudo chown ftpuser:ftpgroup -R /home/ftpusers/joe
# sudo rm /home/ftpusers/joe/Store
这并不奇怪,因为 /dev/sda5 是一个块存储而不是文件系统,但我还是尝试了一下。
第三次尝试:作为我在第一个答案中给出的替代方案,它有效:
sudo mkdir /home/ftpusers/joe/Store
sudo chown ftpuser:ftpgroup -R /home/ftpusers/joe
sudo mount -t vfat -o noexec,ro,uid=1001,gid=1001 /dev/sda5 /home/ftpusers/joe/Store
注意:我必须sudo umount /media/Store
先将其安装到 /home/ftpusers/joe/Store。
为了确保这也适用于 NTFS,我sudo umount /home/ftpusers/joe/Store
运行了磁盘实用程序,将分区重新格式化为 NTFS,挂载了卷(在 Nautilus 中打开它),添加了一个 HelloNtfsWorld.txt 文件,在磁盘实用程序中卸载它,然后使用稍微修改过的命令进行上述测试mount
:
sudo mount -t ntfs -o noexec,ro,uid=1001,gid=1001 /dev/sda5 /home/ftpusers/joe/Store
完美的!
ftp> ls -la
200 PORT command successful
150 Connecting to port 53727
drwxr-xr-x 3 1001 ftpgroup 4096 Sep 15 22:12 .
drwxr-xr-x 3 1001 ftpgroup 4096 Sep 15 22:12 ..
drwxrwxrwx 1 1001 ftpgroup 4096 Sep 15 22:36 Store
226-Options: -a -l
226 3 matches total
ftp> cd Store
250 OK. Current directory is /Store
ftp> ls -la
200 PORT command successful
150 Connecting to port 57505
drwxrwxrwx 1 1001 ftpgroup 4096 Sep 15 22:36 .
drwxr-xr-x 3 1001 ftpgroup 4096 Sep 15 22:12 ..
-rwxrwxrwx 1 1001 ftpgroup 0 Sep 15 22:36 HelloNtfsWorld.txt
226-Options: -a -l
226 3 matches total
ftp>
希望这可以帮助!
答案2
您已经阅读过 Pure-FTPd 常见问题解答了吗?http://download.pureftpd.org/pub/pure-ftpd/doc/FAQ
不幸的是,除非您使用 --with-virtualchroot 开关从源代码构建,否则不支持符号链接(指向 FTP 用户的 chroot 文件夹之外)。
或者,您可以将存储驱动器的挂载点从 /media/Store 更改为 FTP 文件夹层次结构内的某个位置,但这会导致它从 Nautilus 的驱动器列表中消失。
答案3
我解决了
我使用 gksu PureAdmin 编辑用户和组 ID。用户 ID 现在与我的 Ubuntu 管理员登录名相匹配,组 ID 现在是 adm
uid=1000 gid=4
现在我可以跟踪符号链接了
答案4
一个非常简单的方法是从软件中心安装 PureAdmin(Pure-FTPd 的 GUI),但重要的是您阅读以下内容:http://helloinfinity.com/pure-ftpd-authentication-failed-in-ubuntu/
因此随后要运行的命令是:
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
sudo vi /etc/pure-ftpd/conf/MinUID
(将值更改为 1000 以下的数字,例如 100)
sudo service pure-ftpd restart