У нас есть сервер-бастион. У нас должно быть несколько пользователей, которым нужно SSH из локальной сети через бастион на C, используя proxyCammand и закрытый ключ.
Я хочу создать пользователей и группу, которые должны иметь доступ ТОЛЬКО к ssh с хоста Bastion (это происходит через proxyCommand). Им также не нужно читать файлы.
Как это сделать? Есть ли способ?
Другой альтернативой, если вышеизложенное невозможно, является предоставление доступа на чтение только для разрешенных файлов, за исключением ограниченных файлов (установленных ОС по умолчанию), которые имеют доступ на чтение только для своих групп.
решение1
Вот как разрешить определенному пользователю использовать только некоторые указанные команды:
Измените оболочку пользователя на ограниченную bash:
chsh -s /bin/rbash <username>
Создайте каталог bin в домашнем каталоге пользователя:
sudo mkdir /home/<username>/bin sudo chmod 755 /home/<username>/bin
Измените PATH пользователя по умолчанию на этот каталог bin:
echo "PATH=$HOME/bin" >> /home/<username>/.bashrc echo "export PATH >> /home/<username>/.bashrc
Создайте символические ссылки для команд, которые требуются пользователю:
sudo ln -s /bin/<command> /home/<username>/bin/
Ограничьте возможность пользователя вносить изменения
~/.bashrc
, сделав их неизменяемыми:chattr +i /home/<username>/.bashrc
Таким образом вы создаете символические ссылки только на те команды, которые хотите разрешить.
Чтобы сделать то же самое для нескольких пользователей, вы можете создать bash-скрипт, содержащий эти команды и имеющий имя пользователя в качестве параметра.
EDIT: В CentOS rbash может быть не реализован напрямую и может потребоваться создание символической ссылки, аналогично и в некоторых других версиях GNU/Linux, таких как Red Hat:
# cd /bin
# ln -s bash rbash
Редактировать2:
Если rbash слишком ограничителен, то обычный bash тоже может подойти, но это потребует больше работы: вам нужно будет запретить выполнение почти всех команд с /bin
помощью setfacl -m u:user1:r /bin/su
for su
и других команд, которые вы не хотите использовать, чтобы они стали доступны пользователю только для чтения и, что особенно важно, не были исполняемыми.
Видетьэтот ответ Больше подробностей.
решение2
Сетевой трафик
Вы можете использоватьiptables
для ограничения сетевого трафика:
# Allow port 22 traffic to a specific IP/hostname for a specific user
iptables -A OUTPUT -p tcp --dport 22 -d allowed_host -m owner --uid-owner username -j ACCEPT
# Block all other outgoing port 22 (SSH) traffic
iptables -A OUTPUT -p tcp --dport 22 -d 0.0.0.0/0 -j REJECT
Доступ к файловой системе
Чтобы ограничить доступ к файловой системе, вы можете использоватьРазрешения файловой системы
Им также не нужно читать файлы.
Чтобы войти в систему, им необходимо иметь возможность читать некоторые файлы:
- Домашний каталог пользователя
- Исполняемый файл и все библиотеки оболочки пользователя
Чтобы запретить доступ на чтение для обычного пользователя, можно снять флаг «чтение всем» с файла, принадлежащего пользователю root, или снять флаг «исполнение всем» и «чтение всем» с каталога, принадлежащего пользователю root:
# chmod o-r secret-file
# ls -l secret-file
-rw-r----- 1 root root 0 Mar 27 13:23 secret-file
# chmod o-rx secret-dir/
# ls -ld secret-dir/
drwxr-x--- 2 root root 64 Mar 27 13:24 secret-dir/