เหตุใดฉันจึงได้รับข้อความนี้จาก xauth:“ หมดเวลาในการล็อคไฟล์ผู้มีอำนาจ / home / <user> /.Xauthority”?


32

ในขณะที่พยายาม SSH เป็นโฮสต์ฉันได้รับข้อความต่อไปนี้จากxauth:

/ usr / bin / xauth: หมดเวลาในการล็อกไฟล์ /home/sam/.Xauthority

หมายเหตุ:ฉันพยายามแสดง X11 GUI จากระยะไกลผ่านการเชื่อมต่อ SSH ดังนั้นฉันจึงจำเป็นxauthต้องสร้าง$HOME/.Xauthorityไฟล์ได้สำเร็จ แต่เมื่อข้อความดังกล่าวระบุว่าไม่ชัดเจน

ความพยายามในการเรียกใช้แอพที่ใช้ X11 เช่นxeyesได้รับการต้อนรับด้วยข้อความนี้:

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

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


1
ฉันพบว่าหน้านี้มีประโยชน์เนื่องจากปัญหาของฉันเกิดจากการที่ selinux อยู่ในโหมดบังคับใช้ซึ่งทำให้ไฟล์ถูกสร้างขึ้นตั้งแต่แรก: twiki.cern.ch/twiki/bin/view/CLIC/LCDTroubleShooting
Gav Reichel

คำตอบ:


39

ทำงานstraceบนระบบระยะไกลที่มีความล้มเหลวจะแสดงให้คุณเห็นสิ่งที่สะดุดขึ้นxauthxauth

ตัวอย่างเช่น

$ 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

ดังนั้นxauthพยายามเปิดไฟล์และมีอยู่แล้ว /home/sam/.Xauthority-cแฟ้มกระทำผิดคือ เราสามารถยืนยันการมีไฟล์นี้ในระบบระยะไกล:

$ 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

การแก้ไข

ตามที่ปรากฎ ไฟล์เหล่านั้นเป็นไฟล์ล็อค.Xauthorityดังนั้นเพียงแค่ลบออกเพื่อแก้ไขปัญหา

$ rm -fr .Xauthority-*

เมื่อไฟล์ถูกลบออกให้ออกจากการเชื่อมต่อ SSH แล้วเชื่อมต่อใหม่ สิ่งนี้จะช่วยให้xauthสามารถเรียกใช้ซ้ำได้สำเร็จ

$ 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
$

ตอนนี้เราสามารถรันxauth listและแอปพลิเคชั่น X11 ได้โดยไม่มีปัญหา

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

GUI

$ xeyes

                                              เอสเอส # 1

วิธีอื่นในการแก้ไขปัญหา

ฉันเจอโพสต์นี้ชื่อ: xauth: ข้อผิดพลาดในการล็อคไฟล์. Xauthority [linux, ssh, X11]ซึ่งกล่าวถึงการใช้งานxauth -bเพื่อทำลายไฟล์ล็อคใด ๆ ที่อาจติดอยู่ xauthดูเหมือนหน้าคนสำรองข้อมูลนี้:

 -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.

อ้างอิง


1
คุณรู้หรือไม่ว่าสาเหตุใดทำให้ไฟล์ล็อคเหล่านั้นถูกทิ้งไว้ข้างหลัง?
Gilles 'หยุดชั่วร้าย'

@Gilles - ไม่ฉันมีความคิดเดียวกัน lsofฉันลบพวกเขาแล้วคิดว่าฉันควรจะได้พยายามที่จะเจาะเข้าไปในสิ่งที่ถูกควบคุมพวกเขาใช้ ฉันเคยเห็นพวกเขามาก่อน แต่จำไม่ได้ว่าอยู่ที่ไหน ฉันคิดว่าคุณและฉันพูดคุยกับพวกเขาในจุดหนึ่งก่อนหน้านี้ แต่ไม่สามารถพูดถึงพวกเขาในเว็บไซต์
slm

1
คุณอาจต้องแก้ไขปัญหา SELinux ก่อนที่จะลบไฟล์สิทธิ ดูfroebe.net/blog/2015/01/20/…
MrMas

ในกรณีของฉันไฟล์และไดเรกทอรีมีเจ้าของที่ไม่ถูกต้อง (หลังจากคัดลอกโฮมไดเรกทอรีของผู้ใช้ไปยังคอมพิวเตอร์เครื่องอื่น)
Ken Sharp

ในกรณีของฉันสิทธิ์ที่จะ/ home / ผู้ใช้โฟลเดอร์เป็นแทนroot:root แก้ไขโดยuser:user chown user:user /home/user
0andriy

8

สาเหตุของปัญหาอาจเป็นไปได้ว่าคุณไม่มีสิทธิ์ในการเขียนในไดเรกทอรี $ HOME

นั่นเป็นเหตุผลที่ฉันได้รับข้อความนี้:

/ usr / bin / xauth: หมดเวลาในการล็อกไฟล์ /home/fooftp/.Xauthority

นี่คือวิธีที่ฉันตรวจสอบการอนุญาต:

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.

หากนี่เป็นปัญหาคุณต้องแน่ใจว่าคุณมีสิทธิ์เขียนไปที่ $ HOME:

chmod u+rwX $HOME

3

ฉันมีคำตอบสำหรับคำถามที่รบกวนฉันก่อนที่จะเข้าใจปัญหา ปัญหาคือข้อผิดพลาดใน Fedora OS และเป็นตราสารอนุพันธ์เนื่องจากฉันหาได้ในภายหลัง หากปัญหาไม่ตรงตามคำตอบที่ยอมรับและ / หรือคุณไม่ได้อยู่ใน Fedora, RedHat, Korora ฯลฯ สิ่งนี้จะไม่ช่วยคุณ

ปัญหา

ดังที่ผู้ใช้ slm กล่าวว่าการเรียกใช้ strace จะให้ข้อบ่งชี้ถึงปัญหา แต่ในกรณีของข้อบกพร่องนี้ผลลัพธ์จะแตกต่างกัน:

$ 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) 
  ...

เพื่อความชัดเจนนี่เป็นการระบุว่ารหัสส่งคืนของ EACCES ซึ่งเป็นการปฏิเสธการอนุญาต สิ่งนี้แตกต่างจากปัญหาของผู้ใช้ slm โดยที่เขามีรหัสส่งคืน EEXIST ซึ่งหมายความว่ามีไฟล์อยู่ ดังนั้นสำหรับรหัสส่งคืนของ EACCES แน่นอนว่าสิ่งแรกที่คุณตรวจสอบคือ: มีการตั้งค่าการอนุญาตภายในบ้านของฉันเพื่อให้ฉันสามารถเขียนไปยังโฮมไดเร็กตอรี่ของฉันได้หรือไม่? คุณควรตรวจสอบว่าคุณมีการตั้งค่าสถานะการเขียนในไดเรกทอรีบ้านของคุณสำหรับผู้ใช้ของคุณเองก่อน หากคุณทำเช่นนั้นคุณอาจตกเป็นเหยื่อของข้อผิดพลาดที่อธิบายไว้ด้านล่าง

บั๊ก

จากการค้นหา google สองครั้งในที่สุดฉันก็สามารถหาคนที่มีปัญหาคล้ายกันและในที่สุดก็นำฉันไปสู่รายงานข้อผิดพลาดของ Fedora สำหรับบรรดาของคุณที่สนใจที่จะอ่านเกี่ยวกับเรื่องนี้: https://bugzilla.redhat.com/show_bug.cgi?id=772992

วิธีแก้ปัญหา

วิธีแก้ไขปัญหา:

#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

เมื่อคุณกลับมาที่ SSH มันน่าจะดีในตอนนี้และคุณจะสามารถถ่ายโอน X-session ของคุณได้สำเร็จ


แก้ไข (และวิธีแก้ปัญหาอื่น ๆ ):

เพื่อให้เสร็จสมบูรณ์ที่สุดเท่าที่จะเป็นไปได้ผู้ใช้รายอื่นได้ระบุในรายงานข้อผิดพลาดว่าการแก้ไขข้างต้นไม่ได้ผลสำหรับพวกเขา - มันเกิดขึ้นกับฉัน ความพยายามอีกวิธีหนึ่งในการแก้ไขปัญหาคือ (ฉันไม่ได้ตรวจสอบวิธีแก้ปัญหานี้เป็นการส่วนตัว):

# setsebool -P use_nfs_home_dirs 1

อีกคนพูดถึงบางอย่างเกี่ยวกับ GDM ซึ่งฉันไม่มีความรู้ ถ้าเกี่ยวข้องกับคุณฉันขอแนะนำให้อ่านโพสต์ของเขาใน BugZilla และดูว่าความคิดเห็นของเขามีความหมายอะไรกับคุณหรือไม่


1
สำหรับความยาวทั้งหมดนี้ไม่ชัดเจน อะไรคือปัญหา? การแก้ปัญหา / วิธีแก้ปัญหาคืออะไร? มันทำอะไร? เราควรคาดหวังว่าโซลูชันอันดับที่ 1 จะไม่ทำงานเมื่อใด
สกอตต์

ฉันไม่เข้าใจสิ่งที่คุณถาม คำถามมีปัญหาชัดเจน โซลูชันที่ 1 มีวิธีแก้ไขปัญหาการเปลี่ยนแปลงของปัญหาที่ค่อนข้างชัดเจน โซลูชันที่ 1 มีวิธีที่ค่อนข้างชัดเจนในการระบุว่าปัญหานั้นอยู่ในคำตอบของเขาโดยเฉพาะ ปัญหาของฉันแตกต่างอย่างชัดเจนตามที่ระบุไว้ข้างต้นซึ่งเป็นสาเหตุที่โซลูชันของฉันในการแก้ไขปัญหานั้นแตกต่างกันอย่างชัดเจน คุณต้องการคำชี้แจงอะไรเกี่ยวกับเรื่องนี้ที่ทำให้ชัดเจนยิ่งขึ้นว่าฉันคิดว่าคำถามของคุณคืออะไร?
searchengine27

ฉันพยายามปรับปรุงคำตอบ แต่ฉันก็ไม่รู้วิธีที่จะทำให้ชัดเจนกว่านั้นโดยที่ไม่รู้ว่าคุณมีปัญหาอะไรเกี่ยวกับมัน
searchengine27

1
ยืนยันและวิธีแก้ปัญหาแก้ปัญหาสำหรับ CentOS 6.9
kap

0

การกำหนดค่า SELinux เป็นสิ่งแรกที่คุณควรรู้ ...

*/usr/sbin/sestatus*

หรือ

*/usr/sbin/sestatus -v*

หากการกำหนดค่า SELinux ถูกตั้งค่าเป็น"บังคับใช้"อาจเป็นสาเหตุของปัญหา"xauth"

 /usr/sbin/setenforce 0

คุณสามารถตั้งค่าแบบชั่วคราวเป็นโหมด"อนุญาต"ดังนี้(เพื่อให้สามารถแยกปัญหานี้เป็นสาเหตุของปัญหาได้) (จะสามารถยกเว้นปัญหานี้เป็นสาเหตุของปัญหา)

จากนั้นทำตามบทช่วยสอนของ SELinux เพื่อกำหนดค่าที่เหมาะสมหรือปิดใช้งานหากคุณต้องการวิธีการรักษาความปลอดภัยอื่น (f.ex.by แก้ไขไฟล์การกำหนดค่า/ etc / selinux / configใน RHEL v.6)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.