- PVSM.RU - https://www.pvsm.ru -
Как то раз появилась следующая задача: создать локального пользователя в ОС Linux, с ограниченным доступом к папкам и файлам, включая не только редактирование, но и просмотр, а также возможность использовать только разрешенные утилиты.
Что бы не изобретать велосипед, первым делом начал копать интернет, в результате чего были найдены следующие варианты:
В результате поиска, был найден встроенный механизм ограничения возможностей пользователя внутри оболочки bash, он называется Restricted Shell или rbash [1].
В нем реализованы следующие ограничения:
Есть минус, это безопасность, поэтому необходимо в обязательном порядке добавить alias на команды в файл поведения оболочки .bashrc (информация будет далее).
Конечно rbash из коробки, всех задач не решает, поэтому на примере рассмотрим создание пользователя и настройка его окружения для полного решения нашей задачи.
Далее все операции выполняются от суперпользователя (root).
1. Создаем ограниченную оболочку
echo '/bin/bash -r' > /bin/zbash
chmod +x /bin/zbash
2. Создаем пользователя
adduser --home /home/zuser --shell /bin/zbash zuser
3. Изменяем права директории
chown root.zuser /home/zuser
chmod 750 /home/zuser
4. Переходим в директорию и очищаем ее
cd ~zuser
ls -a
rm .bash*
rm .profile
ls -a
5. Настраиваем оболочку и права
echo "PATH=:/home/zuser/bin" > .bashrc
echo "alias help='echo access is limited'" >> .bashrc # alias на команду help
echo "bind 'set disable-completion on'" >> .bashrc # Отключает автодополнение на tab
mkdir -p bin
chmod 750 bin
chown -R root.zuser /home/zuser
chmod 640 .bash*
Файл .bashrc определяет поведение командной оболочки, в данный файл можно добавить alias для команд или дополнительные опции [2].
Для обеспечения безопасности выполните следующие команды:
echo "alias echo=':'" >> .bashrc
echo "alias cat=':'" >> .bashrc
echo "alias bash=':'" >> .bashrc
echo "alias sh=':'" >> .bashrc
echo "alias ln=':'" >> .bashrc
echo "alias set=':'" >> .bashrc
echo "alias typeset=':'" >> .bashrc
echo "alias declare=':'" >> .bashrc
echo "alias alias=':'" >> .bashrc
Данный список можно продолжать…
6. Проверяем работу
root@host: su zuser
zuser@host: help
access is limited
zuser@host: pwd
/home/zuser
zuser@host: ls /tmp/
bash: ls: команда не найдена
zuser@host: /bin/ls
bash: /bin/ls: ограниченный режим в команде нельзя использовать косую черту {/}
zuser@host: echo $PATH
:/home/zuser/bin
zuser@host: PATH=/bin/
bash: PATH: переменная только для чтения
zuser@host: exit
7. Добавляем допустимые команды
ln -s /bin/ping /home/zuser/ping
Важно, пути в команде ln необходимо указывать полностью.
8. Для ограничения опций команды можно использовать обертки
mkdir /var/scripts
echo "/usr/sbin/useradd -D" > /var/scripts/user-info
chmod +x /var/scripts/user-info
ln -s /var/scripts/user-info /home/zuser/bin/user-info
9. Для работы с файлами и папками можно также создать обертку
с черным списком (разрешить все, кроме):
— создаем файл
nano /var/scripts/ls
— содержимое файла
blacklist="../ /etc /bin /boot /var"
for var in $blacklist
do
if [[ $* == *$var* ]]; then
echo 'Access is denied:' $*
exit
fi
done
/bin/ls $*
blacklist — переменная содержащая черный список директорий или файлов (через пробел)
— добавляем команду для пользователя zuser
chmod +x /var/scripts/ls
ln -s /var/scripts/ls /home/zuser/bin/ls
Данный скрипт разрешает выполнять команду ls с любыми ключами для каталогов и файлов не совпадающих с черным списком
с белым списком (запретить все, кроме):
— создаем файл
nano /var/scripts/cat
— содержимое файла
whitelist="./ /tmp/" # белый список
for var in $whitelist
do
if [[ $* == *$var* ]]; then
/bin/cat $* # запуск утилиты cat с заданными параметрами
exit
fi
done
echo 'Access is denied:' $*
whitelist — переменная содержащая белый список директорий или файлов (через пробел)
— добавляем команду для пользователя zuser
chmod +x /var/scripts/cat
ln -s /var/scripts/cat /home/zuser/bin/cat
Данный скрипт разрешает выполнять команду cat с указанными файлами в белом списке
Готово, в итоге получили следующий результат:
Надеюсь данная информация будет полезной.
Автор: Игорь
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/306692
Ссылки в тексте:
[1] Restricted Shell или rbash: https://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html
[2] опции: http://xgu.ru/wiki/shopt
[3] Источник: https://habr.com/ru/post/437710/?utm_source=habrahabr&utm_medium=rss&utm_campaign=437710
Нажмите здесь для печати.