Я хотел бы создать пользователя, который может делать только одно: через ssh указать скрипт (и аргументы командной строки для скрипта), который находится в одной конкретной папке (для целей этого вопроса давайте назовем его /local/remote_only_scripts/foo
) и заставить этот скрипт выполняться и вернуть его вывод.
Чтобы пояснить некоторые примеры вещей, которые я не хочу, чтобы пользователь мог делать:
- Локально войдите в аккаунт. Приложение для входа
/bin/login
. Это не скрипт в/local/remote_only_scripts/foo
папке, поэтому не должен вызываться пользователем. - Удаленно войти в учетную запись. Снова вход в систему (это то, что называется ssh?) Не является сценарием в соответствующей папке.
- Перечислите содержимое каталога. Ls в
/bin/ls
. Это не скрипт в соответствующем каталоге. - Отредактируйте файл в этом каталоге. emacs, vi, gedit большинство других редакторов не являются скриптами в этой директории.
- Просмотрите содержимое файла в этом каталоге.
- Запустите файл в этом каталоге, который он не имеет разрешения на выполнение.
Обратите внимание, что это примеры, есть много других действий, которые я не хочу, чтобы пользователь мог выполнять. При рассмотрении действия спросите "это делается с помощью сценария /local/remote_only_scripts/foo
?" если ответ «нет», пользователь не сможет это сделать. Если ответ «да», то пользователь должен иметь возможность сделать это.
PS: Позвольте мне уточнить, что я имею в виду под «добавлением пользователя». Я не имею в виду добавление пользователя в подсистему ssh. Скорее я имею в виду добавление пользователя в компьютерную систему. Так, например, у меня есть система, в которой работает стабильная версия Debian, назовите ее по адресу www.hg.bar.com. Я хочу добавить пользователя (через kuser, users-admin или useradd или другим подобным способом), называть его hg_guest. hg_guest не может войти в систему локально или выполнить какие-либо действия из приведенного выше списка. Все, что может сделать hg_guest - это запускать сценарии «удаленно». Я сказал, что он должен быть в состоянии сделать это через ssh, но если подумать об этом, возможно, разрешение на использование ssh может позволить ему войти в систему локально, поэтому может потребоваться какой-то другой механизм.
источник
command=
, параметрыno-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
необходимы, чтобы действительно ограничить учетную запись.Попробуйте это как оболочку входа для пользователя:
Вы, вероятно, также захотите иметь это в
authorized_keys
файле явно, как в ответе Корена; но замените '... / foo; с программой здесь. Это позволит предотвратить команды от SSH , какsftp
,scp
иssh hostname command
.источник
На случай, если им понадобится доступ только к одному сценарию, он действительно хорошо работает для меня. Добавьте пользователя и измените его оболочку по умолчанию на путь скрипта. Когда они подключаются через ssh, он выполнит скрипт и закроет сессию.
server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest
server1:/ # grep hg_guest /etc/passwd
hg_guest: х: 2002: 100 :: / Главная / hg_guest: /local/remote_only_scripts/foo/script.sh
источник