Como posso acessar um diretório fora de um chroot?

33

Eu tenho um usuário que está chrootado no diretório inicial, mas quero que ele também possa gerenciar arquivos /var/www. Como tal, fiz o seguinte:

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

No entanto, quando tento abrir /wwwcom o FileZilla, ele retorna "esse arquivo ou diretório". Eu posso ver o diretório vinculado, mas não consigo acessá-lo. O que estou fazendo errado?

Doc
fonte

Respostas:

52

Os links simbólicos são essencialmente apenas ponteiros para outro arquivo, você não pode apontar para algo fora do chroot porque ele está procurando um arquivo com esse nome ( /var/wwwque não existe dentro do chroot). Os hardlinks, por outro lado, são ponteiros para o inode. Como tal, se você quiser fazer isso, precisará usar um link físico omitindo -s. No entanto, você não pode vincular um diretório (diferente de .e ..) no Linux por vários motivos (o principal é que esses sistemas de arquivos são um DAG ).

Talvez a melhor maneira seja usar uma montagem de ligação. Tente o seguinte:

mount --bind /var/www /home/username/www
Chris Down
fonte
ln: '/var/www': hard link not allowed for directory
Doc
7
@Doc - Diretórios não podem ser vinculados no Linux. Uma montagem de ligação deve funcionar.
Chris Baixo
1
Posso adicionar isso ao fstab para torná-lo persistente?
Kornel
Você poderia recursar através de diretórios e replicar a árvore com links físicos? Por exemplo, se o pai tem /foo/a.txte /foo/bar/b.txtentão você poderia fazer mkdir -p ./chroot/foo/; mkdir -p ./chroot/foo/bar; ln /foo/a.txt ./chroot/foo/a.txt; ln /foo/bar/b.txt ./chroot/foo/bar/b.txt? Ou isso ainda não funcionaria por algum motivo? (Obviamente, é algo que você escreveria um script para fazer, em vez de fazer manualmente).
precisa saber é o seguinte
1
@Kornel, você pode usar o nonemodo junto com a bindopção: serverfault.com/questions/613179/…
Yvan