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