Você não precisa do sudo para executar programas como outros usuários no cron (pelo menos com o crontab do sistema).
Basta alterar o campo do usuário da raiz para o usuário de destino.
Se você realmente quer que o su funcione no cron.
Quando executo o shell, mas ele é executado pelo cron "sudo: desculpe, você deve ter um tty para rodar o sudo" aparece. mas como isso deve ser tratado?
Você também pode simplesmente reconfigurar o sudo para não exigir um tty por:
Editando (como root) o arquivo
/etc/sudoers
E comentando a linha que diz:
Defaults requiretty
Você pode adicionar NOPASSWD:
à entrada relevante no arquivo sudoers para interromper a solicitação de uma senha, o que, acredito, ajudará.
É melhor você executá-lo a partir do crontab do usuário desejado e evitar a necessidade de sudo.
Para editar o crontab de fred:
su - fred
crontab -e