Opiszę, jak to zrobiłem u siebie:
1. shell-em użytkownika jest rbash, a nie bash:
usermod -s /bin/rbash nazwa_użytkownika
w rbash-u nie można wykonywać komend zaczynających się do /
2. trzeba zadbać o PATH użytkownika - zrobiłem to w /etc/profile, nie w $HOME./bash_profile, bo ten plik jest edytowalny dla użytkownika:
if [ LOGNAME = "nazwa_uzytkownika" ]; then
PATH=/home/nazwa_u/bin
export PATH
fi
3. zabroniłem pisania do katalogu domowego (aby nie mógł edytować plików .*, np. .bash_profile. Zamiast tego utworzyłem katalog w jego domowym, gdzie ma już pełne uprawnienia.
4. do katalogu /home/uzytkownik/bin podlinkowałem te komendy, których może używać - w Twoim wypadku wystarczy tam umieścić skrypt, który chcesz wykonać. Trzeba to sprawdzić z poziomu użytkownika, bo skrypt może wywoływać jakieś rzeczy, które są np. w /usr/bin. w takim wypadku to, co potrzebne podlinkuj do bin użytkownika.
5. problem. Użytkownik może wykonać "obejście" wpisując np:
ssh serwer -l uzytkownik xterm
wtedy ma dostęp do wszystkiego, bo /etc/profile się nie wykonuje
rozwiązanie:
/etc/sshd_config, wpis
ForceCommand = foo_script
wtedy w zmiennej SSH_ORIGINAL_COMMAND masz argumenty przekazane do ssh na maszynie lokalnej z której jest połączenie. Możesz je przeanalizować i wpuścić, albo odrzucić. dokładniejszy opis:
http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man5/sshd_config.5?query=sshd_config