@a246_K

Как реализовать запуск собственной программы перед выполнением команды в линукс?

У меня появилась необходимость настроить систему так, чтобы PATH содержал папки sbin, но запуск программ из под ней был невозможен обычному пользователю. Отчасти у меня это получилось реализовать с помощью простого скрипта. Вот как он выглядит:
#!/bin/bash

if [[ $UID -eq 0 ]]; then
    exec "$@"
    exit 0
fi

cmd=$(readlink -f "$1")

if [[ $cmd == /usr/sbin/* ]]; then
    echo "Запуск программ из /usr/sbin запрещен для обычных пользователей."
    exit 1
fi

exec "$@"

Но возникла проблема с "вшитием" этого в систему. Мне нужно чтобы независимо от оболочки перед каждой командой выполнялся этот скрипт, и в случае чего, "отклонял" выполнение команды.
  • Вопрос задан
  • 302 просмотра
Решения вопроса 1
@SunTechnik
По-моему, это типичная проблема X-Y.
Окружение каждого пользователя настраивается индивидуально. Кому надо - включайте в поиск sbin, кому не надо - не включайте.

Можно правами на каталог /sbin запретить доступ к файлами не пользователю root.
Только надо помнить что многие процессы запускаются из под своих пользователей и не факт что им ничего не потребуется из этого каталога.

Если очень хочется идти по выбранному Вами пути, то с каждым shell придётся разбираться отдельно. В zsh это вроде встроено, для bash вот тут есть проект:
https://github.com/rcaloras/bash-preexec
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Добавление /usr/sbin в PATH не даёт никаких новых привелегий - как определённые бинарники не выполнялись из-под обычного пользователя, так и не начнут. Фактически, любой пользователь может напрямую обратиться к программе из /usr/sbin по полному пути и без PATH.
Ответ написан
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
чтобы PATH содержал папки sbin

Зачем? Если запуск в sbin для юзера не нужен - просто закройте туда доступ, если конечо не боитесь, что что-то сломается (а вполне может)
Судя по чрезвычайной корявости решения, Вы взялись решать проблему неправильно. Озвучьте изначальную проблему - может быть есть другой способ ее решения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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