在 Ubuntu 22.04 上,我使用 TigerVNC(通过软件包tigervnc-standalone-server
)提供对无头服务器的远程桌面访问。
对于一名用户,tigervncserver
服务退出且没有诊断消息:
$ sudo systemctl restart tigervncserver@:2
$ sudo systemctl status tigervncserver@:2
○ tigervncserver@:2.service - Remote desktop service (VNC)
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: inactive (dead)
Jul 14 18:31:53 myserver systemd[1]: Starting Remote desktop service (VNC)...
Jul 14 18:31:53 myserver tigervncsession[14835]: pam_unix(tigervnc:session): session opened for user user2(uid=1002) by (uid=0)
Jul 14 18:31:53 myserver systemd[1]: Started Remote desktop service (VNC).
Jul 14 18:31:53 myserver tigervncsession[14835]: tigervncsession: tigervncserver exited with status=1
Jul 14 18:31:53 myserver tigervncsession[14835]: pam_unix(tigervnc:session): session closed for user user2
Jul 14 18:31:53 myserver systemd[1]: tigervncserver@:2.service: Deactivated successfully.
即使tigervncserver
以状态 1 退出,整体服务也不会显示为失败。
在 中~user2/.vnc/hostname:2.log
,它看起来像是要求输入密码,但由于它作为服务运行且无法接收输入而失败:
You will require a password to access your desktops.
getpassword error: Inappropriate ioctl for device
Password:
我确实有一个~user2/.vnc/passwd
文件,但奇怪的是,当服务尝试启动时它被删除了:
[pid 15789] unlink("/home/user2/.vnc/passwd") = 0
[pid 15789] write(1, "\nYou will require a password to "..., 55) = 55
该行为是在以下位置实现的
/usr/share/perl5/TigerVNC/Wrapper.pm
:罪魁祸首是
$st->mode & 077
测试密码文件是否为所有者以外的任何人设置了任何权限位的检查,即密码不安全地存储在磁盘上。因为我正在使用以下命令创建密码文件:
该文件的默认权限是
-rw-rw-r--
. 我们可以创建具有权限的文件-rw------
:或者只是
chmod 600 ~/.vnc/passwd
。