Невозможно запустить Expect " no more ptys. " От обычного пользователя
У меня есть контейнер LXC с запущенной CentOS 7.4.
При выполнении ожидания от обычного пользователя я получаю сообщение об ошибке ниже.
user@server ~> expect -c "spawn ls"
spawn ls
The system has no more ptys. Ask your system administrator to create more.
while executing
"spawn ls"
Но если мы выполняем то же самое от пользователя root, это работает.
[root@server]# expect -c "spawn ls"
spawn ls
Вывод mount также имеет их в точке монтирования. devpts для /dev/pts типа devpts (rw,relaytime,seclabel,mode=620,ptmxmode=000)
Я запустил следующие обновления на сервере.
mknod -m 600 /dev/console c 5 1 2>/dev/null
mknod -m 666 /dev/null c 1 3 2>/dev/null
mount -n -t tmpfs none /dev 2>/dev/null
mknod -m 622 /dev/console c 5 1 2>/dev/null
mknod -m 666 /dev/null c 1 3 2>/dev/null
mknod -m 666 /dev/zero c 1 5 2>/dev/null
mknod -m 666 /dev/ptmx c 5 2 2>/dev/null
mknod -m 666 /dev/tty c 5 0 2>/dev/null
mknod -m 444 /dev/random c 1 8 2>/dev/null
mknod -m 444 /dev/urandom c 1 9 2>/dev/null
chown root:tty /dev/{console,ptmx,tty} 2>/dev/null
ln -s /proc/self/fd /dev/fd 2>/dev/null
ln -s /proc/self/fd/0 /dev/stdin 2>/dev/null
ln -s /proc/self/fd/1 /dev/stdout 2>/dev/null
ln -s /proc/self/fd/2 /dev/stderr 2>/dev/null
ln -s /proc/kcore /dev/core 2>/dev/null
mkdir /dev/pts 2>/dev/null
mkdir /dev/shm 2>/dev/null
mount -t devpts -o gid=4,mode=620 none /dev/pts 2>/dev/null
mount -t tmpfs none /dev/shm 2>/dev/null
chmod 666 /dev/null
Но я все еще не могу запустить ожидаемую команду как обычный пользователь.
У меня есть несколько сценариев, которые нужно запускать как обычный пользователь с ожидаемыми заявлениями.
Я сделал все возможные способы, которые я могу придумать. Пожалуйста помоги!!
1 ответ
После долгих поисков я обнаружил, что мне нужно создать структуры / dev / ptmx и / dev / pts внутри chroot.
#!/bin/sh
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
mkdir /dev/pts
chmod 755 /dev/pts
mount -t devpts -o gid=5,mode=620 none /dev/pts
Благодаря веб-сайту https://mintcast.org/building-linux/ я процитировал сценарий и детали с вышеуказанного сайта.
После выполнения сценария я смог выполнить команду
[user@server]# expect -c "spawn ls"
spawn ls
Не относится к среде chroot, но для тех, кто сталкивается с этой проблемой, проверьте /var/log/audit/audit.log
что SELinux не блокирует доступ. У меня возникла эта проблема, хотя программа запускалась пользователем root, и обнаружил следующее:
type=AVC msg=audit(1560463619.636:16181): avc: denied { read write } for pid=32466
comm="myscript.exp" name="ptmx" dev="devtmpfs" ino=1149 scontext=system_u:system_r:fail2ban_t:s0
tcontext=system_u:object_r:ptmx_t:s0 tclass=chr_file permissive=0
С помощью audit2allow
Я смог сгенерировать политику, чтобы мой скрипт работал.