root não pode se conectar ao soquete com link simbólico de outro usuário

4

Eu uso o plugin ssh-agent do oh-my-zsh para ter um symlink estático no meu atual SSH_AUTH_SOCK criado. Ao se conectar por meio do SSH com o encaminhamento de agente, o arquivo /tmp/ssh-agent-$USER-screen é vinculado a /tmp/ssh-<whatever>/agent.<some numbers> :

agross@router ~
$ ls -la /tmp/ssh-agent*
lrwxrwxrwx. 1 agross agross 30 Jan  7 21:35 /tmp/ssh-agent-agross-screen -> /tmp/ssh-uoof1WiDSw/agent.7745

agross@router ~
$ ls -la /tmp/ssh-uoof1WiDSw/
srwxr-xr-x. 1 agross agross  0 Jan  7 21:35 agent.7745

Eu testei o symlink com sucesso com ssh-add -l :

agross@router ~
$ ssh-add -l
2048 15:5a:dd... /home/agross/.ssh/id_rsa (RSA)

agross@router ~
$ echo $SSH_AUTH_SOCK
/tmp/ssh-agent-agross-screen

Assim que eu su não consigo mais acessar o link simbólico, mas o destino do link simbólico funciona bem.

[root@router ~]# socat -v - UNIX-CONNECT:/tmp/ssh-agent-agross-screen
2016/01/07 21:51:04 socat[16054] E connect(3, AF=1 "/tmp/ssh-agent-agross-screen", 30): Permission denied

[root@router ~]# socat - UNIX-CONNECT:/tmp/ssh-uoof1WiDSw/agent.7745
<empty line is printed so I guess I'm connected>

[root@router ~]# echo $SSH_AUTH_SOCK
/tmp/ssh-agent-agross-screen

[root@router ~]# ssh-add -l
Could not open a connection to your authentication agent.

[root@router ~]# SSH_AUTH_SOCK=/tmp/ssh-uoof1WiDSw/agent.7745 ssh-add -l
2048 15:5a:dd... /home/agross/.ssh/id_rsa (RSA)

Eu pesquisei que as permissões no symlink não são avaliadas, ao invés disso, as permissões no symlink target são relevantes para decidir se um usuário (root?) pode acessar um arquivo. E acessar o alvo do symlink funciona perfeitamente.

Qual poderia ser o problema aqui?

Eu estou rodando o CentOS 7, caso isso seja importante. Obrigada!

Atualizado após perguntas:

SSH_AUTH_SOCK é exportado

Eu não acho que isso importe não sendo capaz de se conectar ao symlink com socat , embora.

[root@router ~]# export | grep SSH
declare -x SSH_AUTH_SOCK="/tmp/ssh-agent-agross-screen"

SELinux

Parece que isso também não importa.

[root@router ~]# getenforce
Enforcing
[root@router ~]# setenforce 0
[root@router ~]# socat - UNIX-CONNECT:/tmp/ssh-agent-agross-screen
2016/01/08 09:54:09 socat[21673] E connect(3, AF=1 "/tmp/ssh-agent-agross-screen", 30): Permission denied
[root@router ~]# setenforce 1
[root@router ~]# socat - UNIX-CONNECT:/tmp/ssh-agent-agross-screen
2016/01/08 09:54:45 socat[21675] E connect(3, AF=1 "/tmp/ssh-agent-agross-screen", 30): Permission denied

Symlink em ~ vs symlink em / tmp

Obrigado ao @masm pelo ponteiro. Um symlink no meu diretório home funciona, enquanto o link simbólico em / tmp não funciona.

[root@router ~]# ls -lZ /home/agross
lrwxrwxrwx. agross agross unconfined_u:object_r:user_home_t:s0 foo -> /tmp/ssh-QlnhyjUQDp/agent.15895

[root@router ~]# socat -v - UNIX-CONNECT:/home/agross/foo
<empty line>

[root@router ~]# ls -lZ /tmp
lrwxrwxrwx. agross agross unconfined_u:object_r:user_tmp_t:s0 ssh-agent-agross-screen -> /tmp/ssh-QlnhyjUQDp/agent.15895

[root@router ~]# socat -v - UNIX-CONNECT:/tmp/ssh-agent-agross-screen
2016/01/08 18:14:48 socat[15989] E connect(3, AF=1 "/tmp/ssh-agent-agross-screen", 30): Permission denied
    
por Alexander Groß 07.01.2016 / 22:02

1 resposta

2

fs.protected_symlinks=1 foi o culpado:

[root@router ~]# sysctl fs.protected_symlinks
fs.protected_symlinks = 1
[root@router ~]# sysctl -w fs.protected_symlinks=0
fs.protected_symlinks = 0

[root@router ~]# socat -v - UNIX-CONNECT:/tmp/ssh-agent-agross-screen

[root@router ~]# sysctl -w fs.protected_symlinks=1
fs.protected_symlinks = 1

[root@router ~]# socat -v - UNIX-CONNECT:/tmp/ssh-agent-agross-screen
2016/01/09 01:46:21 socat[20591] E connect(3, AF=1 "/tmp/ssh-agent-agross-screen", 30): Permission denied

Kudos: link

    
por 09.01.2016 / 01:48