For SFTP,
http://library.linode.com/security/sftp-jails/ will get you there lickety-split. However, allowing terminal-based logins will require a little more thought.
With SFTP, the user just needs access to their data, since the SFTP server is embedded within the SSH server. However, just chrooting and running bash will present a number of challenges, since the user won't have access to /bin, /etc, /lib, /usr/bin, /usr/lib, etc, etc. This means they won't be able to use things like /bin/ls or be able to map uids to usernames via /etc/passwd.
Something like
http://olivier.sessink.nl/jailkit/ will build and maintain a "fake" userspace within the users' home directories, allowing them to do what they need to do with bash. Alternatively, some sort of restricted, self-contained shell (busybox?) might do the job. But there's gonna be some thought, planning, testing and effort required to make it happen.
_________________
Code:
/* TODO: need to add signature to posts */