Aqui, suponho que você consiga executar ssh / sftp no diretório pessoal do usuário e deseje editar (com seu usuário) arquivos e pastas em /var/www
, que são de propriedade de user
e :group
- www-data:www-data
(sem alterar a propriedade).
Aqui estou assumindo também o tópico Como evitar o uso do sudo ao trabalhar em / var / www? doesn ' cobrir suas necessidades. Por exemplo, você não deseja alterar as permissões em /var/www
.
Acho que a maneira mais fácil e clara de resolver essa tarefa é montar /var/www
(ou determinado diretório interno) no diretório pessoal do usuário e alterar o proprietário para seu usuário e: group. Isso pode ser conseguido pela ferramenta bindfs
:
sudo apt update && sudo apt install bindfs
Aqui, montaremos todo o diretório /var/www
em um diretório chamado também www/
e localizado no diretório inicial do usuário.
mkdir $HOME/www
sudo bindfs -u $(id -u) -g $(id -g) --create-for-user=www-data --create-for-group=www-data /var/www /home/<user>/www
-
As substituições de comando
$(id -u)
e$(id -g)
retornarão o UID e o GID do atual<user>
. Onde<user>
é um nome de usuário real. -
Se você quiser executar o comando acima para outro usuário, use
$(id -u <user>)
e$(id -g <user>)
. -
Para mais detalhes sobre os argumentos usados com
bindfs
rad sua página de manual -man bindfs
. -
Se você quiser desmontar
~/www
($HOME/www
) use o comando:sudo fusermount -u ~/www
Para montar /var/www
em ~/www
automaticamente durante a inicialização do sistema, adicione a seguinte linha na parte inferior de /etc/fstab
:
bindfs#/var/www /home/<user>/www fuse force-user=<uid>,force-group=<gid>,create-for-user=www-data,create-for-group=www-data 0 0
-
Nota: você deve substituir
<user>
pelo nome de usuário real; também deve substituir<uid>
e<gid>
pelo UID real e GID do<user>
, você pode encontrá-los pelos comandos:id -u <user>
eid -u <user>
. -
Para ver o resultado, reinicialize o sistema ou execute:
sudo mount -a # maybe you should execute 'sudo fusermount -u ~/www' first
Aqui está uma demonstração animada de como isso funciona:
Atualização:
A única limitação dessa abordagem que descobri é que, quando você altera a propriedade do diretório de ligação, isso altera a propriedade também para o diretório de origem. Por exemplo, o próximo comando não é uma boa ideia:
chown -R $(id -u):$(id -g) $HOME/www
Talvez exista uma opção adequada para o comando bindfs
que impedirá que isso aconteça, mas não posso dizer isso no momento.