相关疑难解决方法(0)

Debian chroot 阻止主机上的 PTTY

debootstrap在 Arch Linux 下创建了一个基于 Debian 的 chroot 环境,并用这样的方式填充它:

#!/bin/sh

mount -t proc proc $CHROOT/proc
mount -t devpts devpts $CHROOT/dev/pts

chroot $CHROOT /bin/bash --login -c "/etc/init.d/ssh start"
Run Code Online (Sandbox Code Playgroud)

问题是,在执行上述脚本后,我无法再在主机系统上打开新终端:

urxvt: can't initialize pseudo-tty, aborting.
Run Code Online (Sandbox Code Playgroud)

关闭chroot(停止sshd、卸载 proc 和 dev/pts)不会在主机上带回新终端。

我在这里缺少什么?

chroot tty urxvt

9
推荐指数
1
解决办法
3373
查看次数

伪终端( unlockpt / TIOCSPTLCK )是安全功能吗?

打开伪终端的主部分后

int fd_pseudo_term_master = open("/dev/ptmx",O_RDWR);

/dev/pts/[NUMBER]创建的文件,代表slave他伪终端的部分。

像我这样无知的人可能会想象,做完ptsname(fd_pseudo_term_master,filename_pseudo_term_slave,buflen);一个人就应该简单地int fd_pseudo_term_slave = open(filename_pseudo_term_slave,O_RDWR);和做好。

但是,必须有一个非常重要的“锁定”伪终端从属用例,因为为了使事情简单,在进行open调用之前,必须使用man 3 unlockpt来“解锁”。

我无法找出这个用例是什么?伪终端初始锁定需要什么?代码实现了什么(取自 libc)

/* Unlock the slave pseudo terminal associated with the master pseudo
   terminal specified by FD.  */
int
unlockpt (int fd)
{
#ifdef TIOCSPTLCK
  int save_errno = errno;
  int unlock = 0;

  if (ioctl (fd, TIOCSPTLCK, &unlock))
    {
      if (errno == EINVAL)
        {
          errno = save_errno;
          return 0;
        }
      else
        return -1; …
Run Code Online (Sandbox Code Playgroud)

lock pseudoterminal

4
推荐指数
1
解决办法
520
查看次数

`/dev/pts/ptmx` 来自哪里?

在我的 Archlinux 上,/dev/pts是由 devpts 挂载的,那么谁创建了 /dev/pts/ptmx设备节点?这个节点的目的是什么?它与 相同(Major=5 Minor=2)设备节点/dev/ptmx/,但访问模式不同,这是为了什么?

linux pty

4
推荐指数
1
解决办法
1466
查看次数

标签 统计

chroot ×1

linux ×1

lock ×1

pseudoterminal ×1

pty ×1

tty ×1

urxvt ×1