Назад | Перейти на главную страницу

Невозможно запустить 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, relatime, 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

Но все же я не могу запустить команду expect как обычный пользователь.
У меня есть несколько сценариев, которые нужно запускать от имени обычного пользователя с операторами ожидания.

Я сделал все возможные способы, которые только мог придумать. Пожалуйста помоги!!

После небольшого поиска я обнаружил, что мне нужно создать структуры / 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 Мне удалось создать политику, позволяющую моему сценарию работать.