Estou encontrando um erro de "Permissão negada" ao tentar acessar o link de sÃmbolo de um processo de trabalho nginx em execução sob o adg
usuário.
Pergunta semelhante: o proprietário não consegue ler /proc/$pid/io , mas é um pouco diferente. Meu problema é que os links de sÃmbolos não podem ser acessados ​​e a saÃda ls -l
contém o erro "Permissão negada" (de stderr) e resultado normal (de stdout). A saÃda especÃfica é a seguinte:
- Imprima as informações do processo de trabalho nginx e seu fd:
root# ps -fp 2728114
UID PID PPID C STIME TTY TIME CMD
adg 2728114 2723696 0 21:11 ? 00:00:00 nginx: worker process
root# stat /proc/2728114/fd/0
File: /proc/2728114/fd/0 -> /dev/null
Size: 64 Blocks: 0 IO Block: 1024 symbolic link
Device: 0,21 Inode: 204114580 Links: 1
Access: (0700/lrwx------) Uid: ( 948/ adg) Gid: ( 948/ adg)
- Execute
ls -l
comadg
usuário eroot
usuário:
root# sudo -uadg ls -l /proc/2728114/fd/0
ls: cannot read symbolic link '/proc/2728114/fd/0': Permission denied
lrwx------ 1 adg adg 64 Aug 20 21:12 /proc/2728114/fd/0
root# sudo -uadg -gadg /bin/sh -c 'ls -l /proc/2728114/fd/0'
ls: cannot read symbolic link '/proc/2728114/fd/0': Permission denied
lrwx------ 1 adg adg 64 Aug 20 21:12 /proc/2728114/fd/0
root# ls -l /proc/2728114/fd/0
lrwx------ 1 adg adg 64 Aug 20 21:12 /proc/2728114/fd/0 -> /dev/null
- Verifique usuário e grupo:
root# grep adg /etc/passwd
adg:x:948:948::/home/adg:/sbin/nologin
root# id -nu 948; id -ng 948
adg
adg
- Verifique o status de
selinux
root# sestatus
SELinux status: disabled
root
o usuário pode acessar o fd normalmente, mas o proprietário não, alguém poderia me ajudar a solucionar isso?
Se um processo já foi executado com privilégios elevados, muitos arquivos abaixo
/proc/<pid>
ficam acessÃveis apenas para root. Este ainda é o caso mesmo que o processo abandone todos os privilégios elevados. Esta é uma medida de segurança: o processo pode ter acesso a informações extras à s quais seu usuário não deveria ter acesso.Por exemplo, o processo pode ter aberto um arquivo em um diretório que o usuário não consegue ler e mantido aberto enquanto abandonava privilégios elevados. O usuário não deve obter acesso ao nome do arquivo, pois isso violaria a falta de permissão de leitura no diretório.
Eu acho que no seu sistema, o nginx começa com privilégios elevados - presumivelmente
CAP_NET_BIND_SERVICE
para permitir que ele vincule uma porta inferior a 1024. Como o nginx começou com privilégios elevados, apenas o root pode acessar a maioria das interfaces de introspecção do processo, como/proc/<pid>/fd
listagens.(Você poderia argumentar que se o único privilégio concedido ao programa fosse
CAP_NET_BIND_SERVICE
, então ele não poderia ter obtido nenhum privilégio extra no sistema de arquivos, então é seguro expor seus caminhos de arquivos abertos. Mas manter o controle disso seria muito complicado. trabalho extra com regras de segurança sutis com poucos benefÃcios, para que o kernel não tente ser tão sofisticado.)