最近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命令還是沒掌握好啊。