Я хотел бы создать пользователя, который может только сделать одну вещь: через ssh указывают сценарий (и параметры командной строки к сценарию), который находится в одной конкретной папке (в целях этого вопроса, позволяют нам назвать его /local/remote_only_scripts/foo
) и имейте тот сценарий, выполняются и возвращаются, он производится.
Чтобы быть ясным некоторые примеры вещей, я не хочу, чтобы пользователь смог сделать:
/bin/login
. Это не сценарий в /local/remote_only_scripts/foo
папка, так не должен быть назван пользователем./bin/ls
. Это не сценарий в соответствующем каталоге.Обратите внимание, что это примеры существует много других действий, которые я не хочу, чтобы пользователь смог сделать. В рассмотрении действия спросите, "то, чтобы это было сделанным сценарием в /local/remote_only_scripts/foo
?" если ответ является не пользователем, не должен мочь сделать это. Если ответ - да затем, пользователь должен смочь сделать это.
PS: Позвольте мне разъяснить то, что я подразумеваю "под добавлением пользователя". Я не означаю добавлять пользователя к некоторой ssh подсистеме. Скорее я означаю добавлять пользователя к компьютерной системе. Так, например, я имею систему, работающую debian стабильный, называю ее, он - адрес, www.hg.bar.com. Я хочу добавить, что пользователь (через неопытного пользователя, пользователей-администратора или useradd или некоторый похожий способ) называют его hg_guest. hg_guest не может войти в систему локально или выполнить в любой из вещей вышеупомянутый список. Весь hg_guest может сделать, выполняют сценарии "удаленно". Я сказал, что он должен смочь сделать так через ssh, но думающий об этом теперь, возможно, разрешение ему использовать ssh может позволить ему входить в систему в локально, таким образом, некоторый другой механизм может требоваться.
В 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...
Существует много пути, если Вы не хотите, чтобы Ваш пользователь смог войти в систему локально. Вы можете также:
passwd -l
РЕДАКТИРОВАНИЕ: добавленный больше опций ограничения и разъясняет, как Вы удаляете локальный доступ.
Попробуйте это как оболочку входа в систему для пользователя:
#!/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
.
В от шанса они только должны получить доступ к одному сценарию, это работает действительно хорошо на меня. Добавьте пользователя и измените их оболочку по умолчанию на путь сценария. Когда они соединятся через 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
command=
, опцииno-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
необходимы для реального ограничения учетной записи. – jofel 19.03.2012, 10:20