Com base no seu comentário, parece que você deseja que o usuário 'fred' não tenha um shell regular, mas execute o script 'foo' no login. Isso pode ser feito facilmente se você não espera que Fred se esforce muito para escapar da "caixa de areia" dele.
$ cat ~fred/.bash_login
#!/bin/bash
exec /usr/local/bin/foo
## in ubuntu each user has a group of his "own"
$ sudo chown foo:fred ~fred ~fred/.bash_login /usr/local/bin/foo
## prevent fred from altering the files and directories we care about
$ sudo chmod g-w ~fred ~fred/.bash_login /usr/local/bin/foo
## make script foo run with user foo's privileges
$ sudo chmod u+s /usr/local/bin/foo
Então, o fred agora nem receberá um prompt do shell, porque a primeira coisa que o seu shell de login faz é substituir o foo; quando o script foo sair, o fred será desconectado. A razão pela qual Fred não precisa de motivação para sair desta caixa de areia é que muitos programas permitem a abertura de conchas subordinadas, o que permitiria que a Fred desfizesse o bloqueio do homem pobre mostrado aqui.
Usar esse método com "root" em vez de algum foo não superusuário pode ser usado para seqüestrar root, então não faça isso.