Linux - vncaddrbook錯誤排查(Permission denied )

最近vncaddrbook在用戶[xxx]下突然不好用了,運行提示如下:


vncaddrbook[7323]: vncaddrbook: connect: Permission denied (13)


查看~/.vnc目錄下權限都是正確的,一時不知道該怎麼辦?今天突然靈光一現,找到了問題的原因,特記錄查找過程:


1) 結合錯誤提示,聯繫到在root用戶下可以正常運行,首先聯想到可能打開某個文件或者是建立socket連接出的問題。

2) root 啓動vncaddrbook,查看打開的文件描述符信息(假設進程ID爲7459):

   執行命令: ls -al /proc/7459/fd

   輸出:

        lrwx------ 1 root root 64 Oct 13 14:53 0 -> /dev/pts/1
lrwx------ 1 root root 64 Oct 13 14:53 1 -> /dev/pts/1
lrwx------ 1 root root 64 Oct 13 14:53 2 -> /dev/pts/1
lrwx------ 1 root root 64 Oct 13 14:53 3 -> socket:[1085120]
lrwx------ 1 root root 64 Oct 13 14:53 4 -> socket:[1085122]

   0,1,2是Linux標準的輸入輸出,不會有問題,出問題的可能是3和4

3) 繼續查找3,4對應的socket詳細信息

      執行命令: cat /proc/7458/net/unix

      找到3,4對應的socket連接的詳細信息:

      ffff880103646c80: 00000003 00000000 00000000 0001 03 1085120

      ffff880103641c00: 00000002 00000000 00010000 0001 01 1085122 /tmp/.vnc-root/vncaddrbook.save

     可以看到3對應的unix domain socket是匿名的,應該沒有權限問題,因此4的嫌疑最大

 4) 查看/tmp下面的.vnc文件,如下:

      drwx------   2  1000  1000      4096 Oct 13 14:45 .vnc-xxx

      可以看到.vnc-xxx所有者信息是錯誤的,更改其所有者爲[xxx],vncaddrbook在[xxx]用戶下可以正常運行

  PS: 在萬能的谷歌上查了一下,發現2和3可以合併成一條命令:

               lsof -a -p `pidof vncaddrbook`

                 ==> vncaddrbo 7458 root    3u  unix 0xffff8800a8ab8e00      0t0  1085120 socket
                         vncaddrbo 7458 root    4u  unix 0xffff8800a8abe900      0t0  1085122 /tmp/.vnc-root/vncaddrbook.save

               恩,好方便,Linux命令還是沒掌握好啊。  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章