1

Как я могу ограничить пользователя ssh (только с одним ключом), чтобы разрешить только:

  • набор команд с таким количеством аргументов, сколько они хотят
  • возможности туннелирования (возможность открывать порты)

Я нашел несколько примеров, основанных на авторизованных ключах или конфигурации sshd, но ни один из них не соответствует моим потребностям.

редактировать: просто чтобы уточнить, мне не нужно, чтобы пользователь имел возможность ssh в машину и доступ к оболочке. Предполагается, что пользователь может выполнять заданный набор команд, например, например, «ls» или «date». Я не хочу ограничивать пользователя по параметрам. Поэтому я хочу иметь белый список, а не черный список: мне нужен способ описать набор команд, которые пользователь не может выполнить, все остальные отклонены.

Пример команд, которые я хочу, чтобы пользователь мог запускать:

  • дата удаленного сервера ssh
  • ssh remoteserver 'ls -la'
  • ssh -R 1234:localhost: удаленный сервер 5678

1 ответ1

0

Есть много разных способов, которыми вы могли бы достичь этого. Я собираюсь перечислить одно из нескольких возможных решений.

Я бы предложил использовать несколько разных уровней защиты, чтобы запретить пользователям запускать команды, к которым им нельзя разрешить доступ. Все указания здесь предполагают, что у пользователей есть свой собственный каталог /home/[username] , что их оболочкой является /bin/bash и вы хотели бы, чтобы они использовали оболочку bash при входе в систему.

1) Измените права доступа к каталогу, чтобы только пользователь мог редактировать содержимое своего домашнего каталога.

chmod 755 /home/[username]

2) Удалите файл .bashrc пользователя.

rm /home/[username]/.bashrc этом сайте есть больше информации о том, почему в такой ситуации было бы неплохо удалить .bashrc .

3) Создайте .bash_profile и добавьте "безопасные" псевдонимы для всех команд, которые вы хотите отключить.

Пример файла ./bash_profile

alias apt-get="printf ''"  
alias aptitude="printf ''"  
[...]  
alias vi="vi -Z" #this is vi's safe mode and shell commands won't be run from within vi
alias alias="printf ''"  

И, пожалуйста, проверьте полный список команд bash для получения дополнительной информации. Вы должны убедиться, что команда alias alias="printf ''" является последней командой в списке, в противном случае вы теряете возможность создавать псевдонимы всех этих команд.

4) Отключите команды оболочки в vi, переведя команду vi в режим с ограничениями
Синтаксис alias vi="vi -Z" , но, пожалуйста, посетите этот сайт для получения дополнительной информации.

5) Измените владельца .bash_profile пользователя на root
chown root:root /home/[username]/.bash_profile

6) Удалите права на запись для пользователя .bash_profile
chmod 755 /home/[username/.bash_profile]

7) Наконец, измените пользовательский bash на ограниченный режим bash, чтобы они не могли менять каталоги (если у вас нет ограниченного режима bash в вашей системе, эта ссылка поможет и предоставит вам больше информации)
chsh -s /bin/rbash [username]

Теперь, когда пользователи входят в систему, они не смогут изменять каталоги, все команды, которые вы не хотите, чтобы они использовали, будут выводить ту же информацию, как если бы пользователь нажал клавишу ВВОД без указания команды, а ваш / Функции /bin/bash остаются неизменными.

В зависимости от того, какие функции вы выбираете или нет для псевдонима, пользователи могут обойти некоторые элементы управления, которые вы реализовали. Однако, поскольку мы внедрили несколько буферов безопасности, пользователю действительно нужно знать о компьютерных системах, чтобы делать что-то опасное.

Что касается связанной заметки и кое-что, что вы, возможно, захотите рассмотреть, если вы поместите эти псевдонимы непосредственно в каждый пользовательский .bash_profile вас будут трудности с поддержанием того, какие функции должны и не должны быть псевдонимами, и если вам нужно изменить псевдоним на что угодно вы должны будете поменять их все по отдельности. Кроме того, поскольку пользователи могут использовать vim или vi для просмотра файлов, они могут видеть содержимое своего .bash_profile и понимать, какие ограничения у них есть, а какие нет.

Чтобы обойти это, я бы предложил.

1) Поместить все псевдонимы в каталог, недоступный пользователям (вставьте содержимое .bash_profile здесь)

/[path_to_file]/startup_functions_for_beginners.sh

2) Извлечение псевдонимов в их .bash_profile

улучшен пример файла ./bash_profile

if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
    . /[path_to_file]/startup_functions_for_beginners.sh
fi

Это должно поставить вас на путь, но помните, что почти всегда есть способы обойти ограничения.

Кроме того, не стесняйтесь смешивать информацию в этом ответе, чтобы удовлетворить ваши потребности. Это, безусловно, может быть объединено с рядом других ограничений.

Q: Мне нужно, чтобы пользователи имели доступ к fg и bg , но я не хочу, чтобы они имели доступ к aptitude или bash

alias apt-get="printf ''"  #the user won't be able to run this  
alias aptitude="printf ''"  #the user won't be able to run this  
alias bash="printf ''"  #the user won't be able to run this  
#alias fg="printf ''" #this will run as a bash built-in  
#alias bg="printf ''" #you actually don't need to include these in your script  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .