В двух словах: sudo позволяет выполнить указанную ей команду, проверив полномочия запускающего и при необходимости занеся сей факт в лог.
P.S. У нерадивого админа все кто попало могут запускать sudo sh (или sudo bash). У чуть более продвинутого -- sudo vi (либо sudo vim). У нормального -- только доверенным допускается запуск программ, из которых можно запускать другие программы.
su никаких логов не ведёт. На некоторых системах требует, чтобы юзер был в группе wheel. Грубо говоря, простой как полено способ [временно] стать другим пользователем.
Кроме того, для использования sudo пользователь указывает СВОЙ пароль (если ему не разрешено запускать что-то без пароля), при использовании же su -- в общем случае пароль ROOT. Налицо бардак: юзер знает больше одного (своего) пароля.
Далее. В случае sudo администратор может задать как список пользователей, которым вообще разрешено ей пользоваться, так и список команд (с аргументами), которые каждый конкретный пользователь может исполнять из-под sudo.
Добавлю: в sudo можно разрешить выполнение некоторых команд от имени привелегированного пользователя без ввода пароля. Что очень в скриптах ("sudo service httpd reload", например).
Также с помощью sudo можно разрешить редактирование файлов, недоступных обычному пользователю. При этом все трюки с запуском программ из редактора не работают.