У меня есть контейнер 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
Мне удалось создать политику, позволяющую моему сценарию работать.