Por que estou recebendo esta mensagem do xauth: "tempo limite no bloqueio do arquivo de autoridade / home / <user> /.Xauthority"?

32

Ao tentar fazer o SSH em um host, recebi a seguinte mensagem de xauth:

/ usr / bin / xauth: tempo limite no arquivo de autoridade de bloqueio /home/sam/.Xauthority

NOTA: Eu estava tentando exibir remotamente uma GUI do X11 por meio de uma conexão SSH, portanto, precisava xauthcriar um $HOME/.Xauthorityarquivo com êxito, mas, como essa mensagem indicava, claramente não era.

Tentativas de executar aplicativos baseados no X11, como xeyesforam recebidos com esta mensagem:

$ xeyes
X11 connection rejected because of wrong authentication.
Error: Can't open display: localhost:10.0

Como posso resolver esse problema?

slm
fonte
1
Achei esta página útil, pois meu problema era devido ao selinux estar no modo de imposição, o que impedia que o arquivo fosse criado em primeiro lugar: twiki.cern.ch/twiki/bin/view/CLIC/LCDTroubleShooting
Gav Reichel

Respostas:

39

A execução de um stracesistema remoto onde xauthestá falhando mostrará o que está ocorrendo xauth.

Por exemplo

$ strace xauth list
stat("/home/sam/.Xauthority-c", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
open("/home/sam/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EEXIST (File exists)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({2, 0}, 0x7fff6c4430e0)       = 0
open("/home/sam/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EEXIST (File exists)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({2, 0}, 0x7fff6c4430e0)       = 0
open("/home/sam/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EEXIST (File exists)
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0

Então, xauthestá tentando abrir um arquivo e ele já existe. O arquivo culpado é /home/sam/.Xauthority-c. Podemos confirmar a presença desse arquivo no sistema remoto:

$ ls -l .Xauthority*
-rw------- 1 sam sam 55 Jul 12 22:04 .Xauthority
-rw------- 1 sam sam  0 Jul 12 22:36 .Xauthority-c
-rw------- 1 sam sam  0 Jul 12 22:36 .Xauthority-l

O conserto

Como se vê. Esses arquivos são arquivos de bloqueio .Xauthority, portanto, simplesmente removê-los resolve o problema.

$ rm -fr .Xauthority-*

Com os arquivos excluídos, saia da conexão SSH e reconecte-se. Isso permitirá xauthexecutar novamente com êxito.

$ ssh -t skinner ssh sam@blackbird
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-44-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Sun Jul 12 22:37:54 2015 from skinner.bubba.net
$

Agora, podemos executar xauth listaplicativos X11 sem problemas.

$ xauth list
blackbird/unix:10  MIT-MAGIC-COOKIE-1  cf01f793d2a5ece0ea58196ab5a7977a

A GUI

$ xeyes

                                              ss # 1

Método alternativo para resolver o problema

Me deparei com este post intitulado: xauth: erro no arquivo de autoridade de bloqueio .Xauthority [linux, ssh, X11], que menciona o uso de xauth -bpara interromper qualquer arquivo de bloqueio que possa estar por aí. xauthA página do manual parece apoiar isso:

 -b      This option indicates that xauth should attempt to break any
         authority file locks before proceeding.  Use this option only to
         clean up stale locks.

Referências

slm
fonte
1
Você sabe o que fez com que esses arquivos de bloqueio fossem deixados para trás?
Gilles 'SO- stop be evil'
@ Gilles - não, eu tinha o mesmo pensamento. Eu os apaguei e pensei: eu deveria ter tentado me aprofundar no que estava controlando eles usando lsof. Eu já os tinha visto antes, mas não me lembro onde. Eu pensei que você e eu discutimos sobre eles em um ponto antes, mas não consegui encontrar nenhuma menção a eles no site.
Slm
1
Pode ser necessário corrigir os problemas do SELinux antes de excluir os arquivos de autoridade. Veja froebe.net/blog/2015/01/20/…
MrMas
No meu caso, o arquivo e o diretório tinham o proprietário incorreto (depois de copiar o diretório inicial do usuário para outro computador).
Ken afiada
No meu caso, as permissões para a pasta / home / user foram root:rootsubstituídas user:user. Corrigido por chown user:user /home/user.
precisa saber é o seguinte
8

A raiz do problema pode ser que você não tem permissão de gravação no diretório $ HOME.

Por isso recebi esta mensagem:

/ usr / bin / xauth: tempo limite no arquivo de autoridade de bloqueio /home/fooftp/.Xauthority

Aqui está como eu verifiquei a permissão:

fooftp@for-fun-work:~> ls -l .Xauthority 
-rw-r--r-- 1 fooftp fooftp 1 Sep 14  2015 .Xauthority
# Conlusion: I can write this file: ok

fooftp@for-fun-work:~> rm .Xauthority
rm: cannot remove '.Xauthority': Permission denied
# Conlusion: strange ... I can't delete it 

fooftp@for-fun-work:~> id
uid=1001(fooftp) gid=1000(fooftp) groups=1000(fooftp)
# Conlusion: Yes, I am user fooftp

fooftp@for-fun-work:~> ls -ld .
dr-xr-xr-x 14 fooftp fooftp 4096 Sep 14  2015 .
# Conlusion: Bug found :-)
# The permissions should be "rwx" for you.

Se este for o problema, você precisará ter permissões de gravação para $ HOME:

chmod u+rwX $HOME
guettli
fonte
3

Tenho outra resposta para a pergunta que me atormentou antes de descobrir o problema. O problema é um bug no sistema operacional Fedora e seus derivados, como descobri mais tarde. Se o problema não for o indicado pela resposta aceita e / ou você não estiver no Fedora, RedHat, Korora, etc., isso não ajudará.

O problema

Como o usuário slm disse, o strace em execução fornecerá uma indicação do problema, mas neste caso de bug específico, a saída é diferente:

$ strace xauth list
  ...
  stat64("/home/USER/.Xauthority-c", 0xbff23280) = -1 ENOENT (No such file or directory)
  open("/home/USER/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
  rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
  rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
  rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
  nanosleep({2, 0}, 0xbff232c8)           = 0
  open("/home/USER/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
  rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
  rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
  rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
  nanosleep({2, 0}, 0xbff232c8)           = 0
  open("/home/USER/.Xauthority-c", O_WRONLY|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
  ...

Para ficar claro, isso está afirmando que o código de retorno EACCES, que é permissão negada. Isso é diferente do problema do usuário slm, onde ele tinha o código de retorno EEXIST, o que significa que o arquivo existe. Portanto, para o código de retorno EACCES, obviamente, a primeira coisa que você verifica é: minhas permissões pessoais estão configuradas para que eu possa gravar no meu diretório pessoal? Você deve verificar se possui o sinalizador de gravação em seu diretório pessoal para o seu próprio usuário primeiro. Se você o fizer, poderá ser vítima do bug descrito abaixo.

O inseto

Através de algumas pesquisas no google, finalmente consegui encontrar alguém com um problema semelhante, e isso me levou ao relatório de erros do Fedora. Para aqueles que desejam ler sobre isso: https://bugzilla.redhat.com/show_bug.cgi?id=772992

A solução alternativa

A solução alternativa para o problema:

#verify you're not crazy
$ xauth list
  /usr/bin/xauth:  timeout in locking authority file /home/USER/.Xauthority
#use restorecon to reset it all
$ /sbin/restorecon -v -v /home/USER/.Xauthority 
$ /sbin/restorecon -v -v -R /home/USER/
#log out of the remote system
$ exit

Quando você fizer o SSH de volta, tudo ficará bem nesse momento e você poderá transferir com êxito sua sessão X novamente.


EDIT (e outras soluções alternativas):

Para ser o mais completo possível, outros usuários declararam no relatório de erro que a correção acima não funcionou para eles - aconteceu para mim. Outra tentativa de solucionar o problema foi (não verifiquei essa solução pessoalmente):

# setsebool -P use_nfs_home_dirs 1

Outra pessoa menciona algo sobre o GDM, do qual tenho zero conhecimento. Se isso lhe pertence, recomendo ler o post dele no BugZilla e ver se o comentário dele significa alguma coisa para você.

searchengine27
fonte
1
Por todo o seu comprimento, isso não está claro. Qual é o problema? Qual é a solução / solução alternativa? O que isso faz? Quando devemos esperar que a solução 1 não funcione?
Scott Scott
Eu não entendo o que você está perguntando. A pergunta tinha um problema bastante claro. A solução 1 tinha uma solução bastante clara para uma variação desse problema. A solução 1 tinha uma maneira bastante clara de indicar qual era o problema especificamente em sua resposta. Meu problema era claramente diferente, como indicado acima, e é por isso que minha solução para resolver esse problema também era claramente diferente. O que você precisa esclarecer sobre isso tornaria isso mais óbvio, acho que é a minha pergunta para você?
searchengine27
Tentei fazer algumas atualizações na resposta, mas sinceramente não sei como deixar isso mais claro do que isso sem saber o que especificamente o incomoda.
usar o seguinte código
1
Confirmado e solução alternativa resolve o problema para o CentOS 6.9
kap
0

A configuração do SELinux é a primeira coisa a ser conferida, com ...

*/usr/sbin/sestatus*

ou

*/usr/sbin/sestatus -v*

Se a configuração do SELinux estiver definida como "Executando" , pode estar causando o problema "xauth" .

 /usr/sbin/setenforce 0

Você pode configurá-lo provisoriamente para o modo "permissivo" da seguinte maneira (para poder excluir esse problema como causa raiz do problema) .

Em seguida, siga um tutorial do SELinux para implementar uma configuração adequada ou desative-a se você preferir outro método de segurança (por exemplo, editando o arquivo de configuração / etc / selinux / config no RHEL v.6)

fjcobas
fonte