How can I access a directory outside a chroot from within it?

I have a user which is chrooted to her home directory, but I want her to also be able to manage files within /var/www. As such, I did the following:

root@server:/home/username# ln -s /var/www www
root@server:/home/username# cd www
root@server:/home/username/www# chown username:username *

However, when I try to open /www with FileZilla it returns “no such file or directory”. I can see the linked directory, but I can’t access it. What am I doing wrong?

Asked By: Doc


Symlinks are essentially just pointers to another file, you can’t point to something outside the chroot because it is looking for a file with that name (/var/www, which doesn’t exist inside the chroot). Hardlinks on the other hand are pointers to the inode. As such, if you want to do that, you need to use a hard link by omitting -s. However, you cannot hard link a directory (other than . and ..) in Linux for a variety of reasons (the main one being that those filesystems are a DAG).

Perhaps the best way would be to use a bind mount. Try this:

mount --bind /var/www /home/username/www
Answered By: Chris Down
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.