Alex_P97
@Alex_P97
Программист любитель

Как сделать фиксированный список комманд для пользователя в SSH?

Есть CentOS7. SSH сервер. Несколько пользователей. Одному из них надо ограничить доступ к файловой системе(sftp уже отключён) и стандартным командам путём разрешения определённых комманд, которые являются или bash функциями или исполняемыми программами.
В итоге человек должен зайти через ssh и увидеть(или при вводе команды help) список доступных команд (преимущественно/все без аргумент), мочь их выполнить, а также невозможность выполнять стандартные команды. Конечно все запускаемые программы/скрипты выполняются от имени пользователя, зашедшего через ssh, или через sudo, если надо запустить от имени другого пользователя.

Была идея создать свой шелл и через chsh сменить пользователю дефолтный шелл на мой кстомный, который будет делать что описано выше.

Есть ли готовый софт с вышеуказанной функциональностью? Как сделать java программу доступной в списке chsh
  • Вопрос задан
  • 1074 просмотра
Решения вопроса 3
dummyman
@dummyman
диссидент-схизматик
Есть стандартная для большинства дистрибутивов тулза chroot. Ее использует для собитвенных изоляций куча системного софта. Она есть везде и ее не придется устанавливать.
Создаешь пользователя. Создаешь новую директорию.
В ней создаешь основные системные папки. Одну из папок (например, /home) делаешь пользовательской, то есть меняешь хозяина chown на этого пользователя.
Потом ссылками (команда ln) добавляешь в эти папки все то, к чему хочешь чтобы пользователь и программы запущенные под ним имели доступ.
Все его сессии запускаешь через chroot.
Не забываем ограничить использование hdd (группа команд quota).
А потом ему можно дать возможность пользоваться хоть менеджером пакетов, даже устанавливая свой софт, юзер ничего не испортит.
Классика хостинга, ёмн.
$ man chroot
Ответ написан
Комментировать
@Erelecano
Админю сервера, починяю примуса.
https://github.com/ghantoos/lshell
Но учитывать его проблемы и недавние уязвимости с возможностью выхода за его пределы.
Ответ написан
Alex_P97
@Alex_P97 Автор вопроса
Программист любитель
а для создания кастомного шелла надо можно для java юзать что-то типа spring shell, затем создать запускаемый файл с "java -jar ...." в /bin/ и в конце добавить путь до запускаемого файла в /etc/shells. после этого он будет в списке chsh
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
Ответ написан
Комментировать
athacker
@athacker
Не знаю, как насчёт линуха, но во фре в chsh никакого списка нет. Можете указать в качестве оболочки что угодно.

Также есть команда usermod, которой тоже можно в качестве оболочки прописать что угодно. Хотя б даже и шельный скрипт. У меня сделан тупой терминал, чисто для подключения по SSH и проброса портов внутрь локалки. В качестве шелла для подключающегося пользователя указан скрипт следующего содержания:

#!/bin/sh

main() {
echo
echo
echo
echo
echo
echo
echo
echo
echo "Dumb terminal enabled"
while true; do
sleep 5
done
}

# Assign noop for Ctrl+C and run main
trap true INT
main $@

Соответственно, этот скрипт просто крутится со sleep 5 и не даёт выйти по Ctrl-C. Но точно также в цикл ожидания можно повесить ожидание какого-либо ввода от пользователя, с последующей обработкой этого ввода по case на предмет -- нужные это команды или нет. Если ненужные, то слать, если нужные -- выполнять с необходимыми параметрами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы