Não estou perguntando sobre a montagem do ponto de montagem SSHFS, que é o tópico de todas as perguntas semelhantes que encontrei.
Meu ponto de montagem ( /path/to/sshfs/mount/
) está montado corretamente e posso listar, ler, gravar todos os arquivos esperados como meu usuário.
Eu tenho permissões para copiar o script para um diretório local. No entanto, como o script requer vários subdiretórios contendo arquivos e recursos de biblioteca, prefiro executar o script onde ele reside em vez de copiá-lo localmente. Além disso, ele não precisa ser copiado para a máquina local para realizar o trabalho pretendido.
Infelizmente para a montagem SSHFS, o script requer permissões de root para muitas operações porque deve instalar alguns arquivos em diretórios do sistema e atualizar arquivos de diferentes usuários existentes no sistema.
Aqui está o meu erro:
$ cd /path/to/sshfs/mount/
$ sudo ./myscript.sh
sudo: unable to execute ./myscript.sh: Permission denied
Aqui estão as verificações que realizei:
$ ls -la
-rwxr-x--- 1 myuser team 8173 Dec 15 06:33 myscript.sh
$ sudo -i
[sudo] password for myuser:
#
$ cat /etc/fstab
myuser@myserver:/path/to/sshfs/mount/ /path/to/sshfs/mount/ fuse.sshfs x-systemd.automount,_netdev,user,follow_symlinks,identityfile=/path/to/.ssh/key_file,allow_other,default_permissions 0 2
Isso mostra que a opção fuse.conf necessária está habilitada:
$ cat /etc/fuse.conf
user_allow_other
Qual configuração SSHFS me permitirá executar:
$ sudo /path/to/sshfs/mount/myscript.sh
o comando mount suporta
exec
enoexec
opções de montagem:exec: Permite a execução de binários.
noexec: Não permite a execução direta de nenhum binário no sistema de arquivos montado.
Mesmo que você não especifique nenhuma dessas opções de montagem, a
noexec
opção de montagem será aplicada se você especificar ausers
opção de montagem.A opção users implica as opções noexec, nosuid e nodev (a menos que substituídas por opções subsequentes, como na linha de opções users,exec,dev,suid).
Este comando mostra que
noexec
estava sendo aplicado implicitamente:Portanto, a solução para esta questão foi simplesmente adicionar a
exec
opção de montagem.Eu suspeito que você está um pouco confuso sobre permissões.
Seu acesso sshfs só pode acessar arquivos como o usuário que autenticou a sessão ssh. Enquanto, como diz o MountainX, o sistema de arquivos provavelmente está montado como noexec, isso é trivial para contornar:
No entanto, esteja ciente de que, embora o script seja executado como root na máquina local com privilégios de root, ele terá apenas as permissões do usuário de autenticação ssh no sistema de arquivos remoto. Outros scripts de shell geralmente apenas encadeiam outros comandos - alguns deles podem ser caminhos relativos que mapeiam corretamente para o ponto de montagem sshfs. Outros podem apontar para outro lugar; isso parece um acidente esperando para acontecer.