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

Проблема: при организации сетевой связности между системами и сетевым элементами сетевики постоянно требуют пинги/трейсы по портам для анализа проблем.

Решение: создать для них учетную запись Linux, которая будет ограничена в правах и функционале — пусть сами всё проверяют.

Исходные данные: Ubuntu 20.04, нужен доступ к ping и traceroute.

В Ubuntu 20.04 утилита rbash уже есть. Но, если в системе её нет, то можно создать её копированием:

cp /bin/bash /bin/rbash

Создание пользователя:

useradd -s /bin/rbash username

Создадим для него домашнюю директорию c поддиректорией utils:

mkdir -p /home/username/utils

Пользователь может запускать только то, что будет найдено в директориях, указанных в переменной окружения PATH, которая прописана в /home/username/.bash_profile

Создадим и отредактируем этот файл:

# cat /home/username/.bash_profile  
# .bash_profile  

# Get the aliases and functions  
if [ -f ~/.bashrc ]; then  
. ~/.bashrc  
fi  
# User specific environment and startup programs  
PATH=$HOME/utils  
export PATH

Теперь, когда пользователь будет пытаться запускать команды — они будут запускаться не из /bin//usr/local/bin/ или /home/usename/bin/, а из /home/username/utils/

Создадим ссылки на утилиты:

ln -s /bin/ping /home/username/utils/
ln -s /usr/sbin/traceroute /home/username/utils/

В директории /home/username/utils/ появились ссылки на утилиты:

> ls -l /home/username/utils/
lrwxrwxrwx 1 root root  9 янв 16 17:19 ping -> /bin/ping
lrwxrwxrwx 1 root root 20 янв 16 17:22 traceroute -> /usr/sbin/traceroute

Проверяем работоспособность:

username@notebook:~$ top
-rbash: /usr/lib/command-not-found: ограниченный режим: в названиях команд нельзя использовать косую черту «/»
username@notebook:~$ ping ya.ru
PING ya.ru (87.250.250.242) 56(84) bytes of data.
64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=55 time=24.0 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=55 time=24.9 ms
...
username@notebook:~$ traceroute ya.ru
traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets
 1  _gateway (192.168.0.1)  1.360 ms  1.418 ms  1.506 ms
 2  95.55.64.1 (95.55.64.1)  8.333 ms  8.362 ms  8.407 ms
...

Готово!

Для защиты файла от перезаписи (сделать его immutable) и изменения переменной PATH — рекомендуется использовать chattr:

chattr +i /home/username/.bash_profile

Таким образом ни root, ни username не смогут его изменить, пока сам root не сделает этот файл снова изменяемым.

Убирается этот атрибут командой:

chattr -i /home/username/.bash_profile

Посмотреть атрибуты файла можно командой:

> lsattr /home/username/.bash_profile
----i---------e----- /home/localuser/.bash_profile

Подробнее про chattr и его атрибуты читаем тут: https://losst.ru/neizmenyaemye-fajly-v-linux

Оставьте комментарий