sudo sempre requer a senha do usuário em execução (e exige que você tenha permissões específicas para fazer isso, ou seja, são um dos sudoers ).
su requer a senha da conta de destino ( root por padrão, mas a conta raiz não tem senha no OS X por padrão). Se você usar su , poderá inserir a senha da conta de destino e executar um comando usando os privilégios desse usuário.
su -c some_cmd # as root
su username -c some_cmd # as username
Isso funciona passando todos os argumentos após o nome de usuário para o shell de login da conta de destino. Os shells geralmente suportam -c <commands> arguments. No GNU coreutils su , há um argumento -c command real para su que pode ser colocado antes do nome do usuário.
Você pode su para outra conta de usuário (usando a senha da outra conta de usuário) e sudo de lá, desde que outra conta seja um sudoer .
Se você não quiser inserir a senha de outra conta nem atribuir à sua conta normal sudoers permissões, estará praticamente sem opções, a menos que considere o SSH com autenticação de chave ou algo assim.