Eu encontrei um comportamento muito estranho que não sei como resolver: as permissões de ação dependem de onde o comando é executado.
Minha situação: configurei um servidor Nextcloud em um Raspberry Pi 4. O sistema funciona a partir de um cartão SD e a instância Nextcloud está em um SSD, executado via Docker (usando IOTstack). No que diz respeito ao Nextcloud, tudo funciona como esperado.
Quando quero listar o conteúdo da instância Nextcloud, posso usar a conta root como tal:
sudo ls -lh /media/pi/storage/IOTstack/volumes/nextcloud/html/data/solenoid/files
total 4.0K
drwxr-xr-x 3 www-data www-data 4K Nov 3 11:09 Documents
Claro, isso funciona por causa do root
. Quando tento a conta normal pi
, recebo o seguinte:
ls -lh /media/pi/storage/IOTstack/volumes/nextcloud/html/data/solenoid/files
ls: cannot access '/media/pi/storage/IOTstack/volumes/nextcloud/html/data/solenoid/files': Permission denied
Isso porque tudo pertence a www-data
, então eu tento como www-data
e recebo:
sudo -u www-data ls -lh /media/pi/storage/IOTstack/volumes/nextcloud/html/data/solenoid/files
ls: cannot access '/media/pi/storage/IOTstack/volumes/nextcloud/html/data/solenoid/files': Permission denied
Isso não é normal... Eu deveria conseguir ver os arquivos do usuário ao qual eles pertencem.
Tentei cd
no SSD montado ( storage
) e executei o comando novamente:
cd /media/pi/storage/
sudo -u www-data ls -lh ./IOTstack/volumes/nextcloud/html/data/solenoid/files
total 4.0K
drwxr-xr-x 3 www-data www-data 4K Nov 3 11:09 Documents
Por quê? Como as permissões dependem de onde o ls
comando é executado? Por que posso listar os arquivos de /media/pi/storage
e não de /home/pi
, como www-data
usuário? Deveria www-data
estar no pi
grupo?
Anteriormente eu tinha os dados armazenados no cartão SD, em /home/pi/IOTstack...
, mas queria armazenar meus arquivos em um local mais seguro, mantendo a opção de trocar o hardware. Eu não encontrei este problema.
A razão para acessar arquivos dessa maneira "bruta" é fazer backup deles pela rede para outra mídia de armazenamento.
Editar
Respondendo @kamil-maciorowski
namei -nom /media/pi/storage/IOTstack/volumes/nextcloud/html/data/solenoid/files
f: /media/pi/storage/IOTstack/volumes/nextcloud/html/data/solenoid/files
drwxr-xr-x root root /
drwxr-xr-x root root media
drwxr-x--- pi pi pi
drwxr-xr-x pi pi storage
drwxr-xr-x pi pi IOTstack
drwxr-xr-x pi pi volumes
drwxr-xr-x pi pi nextcloud
drwxrwx--- www-data root html
data - Permission denied
Links Úteis:
Eu realmente preciso de recursividade
chmod
para restringir o acesso a uma pasta?Resolução do nome do caminho
Quando você faz
como
pi
, o nome do caminho é resolvido,/
,media
,pi
,storage
,IOTstack
,volumes
enextcloud
pode ser acessado. Em seguida, o procedimento chega aohtml
componente. A propriedade e o modo dehtml
sãowww-data:root
edrwxrwx---
respectivamente. Quando você estápi
(que não estáwww-data
nem noroot
grupo), o último trio se aplica , é---
. Isso significa que você não pode acessarhtml
edata
outros componentes de nome de caminho.Quando você faz
as
www-data
, o nome do caminho é resolvido/
emedia
pode ser acessado. Em seguida, o procedimento chega aopi
componente. A propriedade e o modo depi
sãopi:pi
erwxr-x---
respectivamente. Quando você estáwww-data
(que não estápi
nem nopi
grupo), o último trio se aplica, é---
. Isso significa que você não pode acessarpi
estorage
outros componentes de nome de caminho.Você disse "isso não é normal", mas o mecanismo de negação de acesso é o mesmo da primeira tentativa; a única diferença é que o componente pathname é o culpado:
html
oupi
. Ambos os casos são igualmente normais.Quando você
cd /media/pi/storage/
comopi
, você pode fazer isso porque os modos de todos os diretórios relevantes permitem.Quando você então corre
as
www-data
, o modo de/media/pi
é irrelevante porque a resolução do nome do caminho começa em.
:.
,IOTstack
evolumes
assim por diante. Acontece quewww-data
pode acessar todos esses arquivos e, assim,ls
funciona.Em outras palavras
cd
, executado comopi
coloca você sob o próprio componentewww-data
não pode acessar. Entãopi
se tornawww-data
graças asudo
, mas o diretório de trabalho não muda. O caminho dado parals
começa de.
, não de/
, agora pode ser resolvido e acessado. Observe que se você usou o caminho completo (ou seja, começando de/
, como nas tentativas anteriores), ele ainda não pôde ser acessado, independentemente do diretório de trabalho atual.