我正在研究运行 asusware 的华硕路由器。它是一个嵌入式Linux 实现,并且或多或少是busybox 实现。当我使用 telnet 以管理员(root)身份登录路由器时,更多和更少的分页工作完美(例如,在页面末尾停止滚动到 24 行)。但是,当我使用缺乏根权限的帐户登录时,无论文件有多大,滚动都不会停止,直到文件末尾。我已验证我的环境变量 (TERM=xterm,LINES=24,COLUMNS=80) 已设置且正常。 vi 在编辑文件时也可以正常工作,我可以正常移动光标。所以终端控制一般来说似乎是有效的。我还检查了普通用户是否具有共享/terminfo 文件的完全权限。
按照我的逻辑,这似乎是某种权限问题,因为如果我将用户组分配移动到 /etc/passwd 中的组 root (0),滚动就会立即开始按预期工作。但当移动到组 500(该系统上的用户)时,它会停止工作。但这对我来说没有意义。
所以问题是下一步该往哪里看。控制这些东西还涉及哪些其他文件?
答案1
的所有权和权限是什么/dev/tty
?
某些工具可能会重新打开,/dev/tty
而不是使用现有的文件描述符来检查终端大小。在 busybox 中,这可能是由于代码大小的极大减少。
某些发行版可能会提供/dev/tty
超出应有保护的保护。我怀疑这可能只是粗心的设置,保护/dev/tty*
在这种情况下,OP 报道:
crw-rw---- 1 admin root 5, 0 Jan 1 1970 tty
事实证明这就是问题所在。
值得注意的是,根据文件系统的不同,每次设备重新启动时可能都需要重置。这可能在/etc/mdev.conf
、/etc/udev/rules.d/
、/etc/rc.local
或其他地方完成, 具体取决于您的发行版。或者,如果没有持久的可修改存储,则可能必须远程完成。
(为检查添加了答案。)