Добавление пользователя, который может только выполнить сценарии удаленно

Я хотел бы создать пользователя, который может только сделать одну вещь: через ssh указывают сценарий (и параметры командной строки к сценарию), который находится в одной конкретной папке (в целях этого вопроса, позволяют нам назвать его /local/remote_only_scripts/foo ) и имейте тот сценарий, выполняются и возвращаются, он производится.

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

  • Локально войдите в аккаунт. Приложение входа в систему /bin/login. Это не сценарий в /local/remote_only_scripts/foo папка, так не должен быть назван пользователем.
  • Удаленно войдите в аккаунт. Снова вход в систему (это, что называет ssh?) не сценарий в соответствующей папке.
  • Перечислите содержание каталога. ls находится в /bin/ls. Это не сценарий в соответствующем каталоге.
  • Отредактируйте файл в том каталоге. emacs, vi, gedit большинство других редакторов не являются сценариями в этом directoy.
  • Просмотрите содержание файла в том каталоге.
  • Выполните файл в том каталоге, который у него нет разрешения выполнить.

Обратите внимание, что это примеры существует много других действий, которые я не хочу, чтобы пользователь смог сделать. В рассмотрении действия спросите, "то, чтобы это было сделанным сценарием в /local/remote_only_scripts/foo?" если ответ является не пользователем, не должен мочь сделать это. Если ответ - да затем, пользователь должен смочь сделать это.

PS: Позвольте мне разъяснить то, что я подразумеваю "под добавлением пользователя". Я не означаю добавлять пользователя к некоторой ssh подсистеме. Скорее я означаю добавлять пользователя к компьютерной системе. Так, например, я имею систему, работающую debian стабильный, называю ее, он - адрес, www.hg.bar.com. Я хочу добавить, что пользователь (через неопытного пользователя, пользователей-администратора или useradd или некоторый похожий способ) называют его hg_guest. hg_guest не может войти в систему локально или выполнить в любой из вещей вышеупомянутый список. Весь hg_guest может сделать, выполняют сценарии "удаленно". Я сказал, что он должен смочь сделать так через ssh, но думающий об этом теперь, возможно, разрешение ему использовать ssh может позволить ему входить в систему в локально, таким образом, некоторый другой механизм может требоваться.

14
19.03.2012, 19:58
3 ответа

В authorized_keys файле существует опция команды. Это опции, кажется, делают точно, что Вы хотите.

Обратите внимание, что это не chroot или ограниченная оболочка. Это позволяет выполнять только те команды через ssh. С Вашим примером это было бы:

ssh somehost /local/remote_only_scripts/foo

Для этого authorized_keys файла:

command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key... 

Существует много пути, если Вы не хотите, чтобы Ваш пользователь смог войти в систему локально. Вы можете также:

  • просто установите его оболочку на/bin/false (возможно, Вам будет нужен/bin/true, так как ssh нужен допустимый журнал в),
  • заблокируйте его пароль, посмотрите passwd -l

РЕДАКТИРОВАНИЕ: добавленный больше опций ограничения и разъясняет, как Вы удаляете локальный доступ.

12
27.01.2020, 19:51
  • 1
    я не думаю, что необходимо указать, что команда в ssh на стороне клиента, он 'вызывается' команда, таким образом, он всегда выполнялся бы ;) Пользователю на удаленном сайте все еще нужна допустимая оболочка, определенная в/etc/passwd. –  jirib 19.03.2012, 10:14
  • 2
    Около command=, опции no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty необходимы для реального ограничения учетной записи. –  jofel 19.03.2012, 10:20
  • 3
    хорошо. Я проснулся в середине ночи и решил проверить ответы. Так как я сонлив, я не буду ассимилировать весь ответ, но спрашивать что-то, что оставляет меня смущенным. Как это препятствует тому, чтобы hg_quest вошел в систему от tty? –  HandyGandy 19.03.2012, 11:19
  • 4
    @HandyGandy Это - самая простая часть. Я добавил 2 способа сделать его, но я думаю, что существует больше –  Coren 19.03.2012, 12:07

Попробуйте это как оболочку входа в систему для пользователя:

#!/bin/sh
basedir=/local/remote_only_scripts
while read -p '$ ' prog args; do
    if [ ! -x "$basedir/$prog" ]; then
        echo "Invalid program: $prog"
    else
        case "$prog $args" in
            *\**|*\?*|*\^*|*\&*|*\<*|*\>*|*\|*|*\;*|*\`*|*\[*|*\]*)
                echo "Invalid character in command";;
            *)
                eval "$prog $args"
                echo;; # force a trailing newline after the program
        esac
    fi
done

Вы, вероятно, также захотите иметь это в authorized_keys зарегистрируйте явно как в ответе Coren; но замените '.../нечто; с программой здесь. Это предотвратит команды от SSH как sftp, scp, и ssh hostname command.

0
27.01.2020, 19:51
  • 1
    Если Вы только хотите, чтобы пользователь смог выполнить команды из Вашего каталога (и нет слишком многих), Вы могли взять "прогр" из чтения выше и использовать избранный оператор, чтобы предложить текстовое меню выбора тех программ и затем сделать чтение для аргументов. Я также протестировал бы это для проверки, что происходит, если Вы вводите набор Ctrl-Cs в различных точках в сценарии. Можно хотеть команду прерывания там также. –  Joe 29.03.2012, 09:05

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

server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest

server1:/ # grep hg_guest /etc/passwd

hg_guest:x:2002:100::/home/hg_guest:/local/remote_only_scripts/foo/script.sh

0
27.01.2020, 19:51

Теги

Похожие вопросы