En Linux, como en la mayoría de las cosas en la vida, hay distintas formas de lograr un mismo objetivo. Ese es el caso de su y sudo: son comandos diferentes con propósitos distintos, pero se suelen usar uno en lugar del otro.

De la página del manual:

El comando su se utiliza para convertirse en otro usuario durante una sesión de inicio. Si se invoca sin nombre de usuario, su toma por defecto el superusuario. El argumento opcional - puede usarse para proporcionar un entorno similar al que el usuario tendría si hubiera iniciado sesión directamente.

En pocas palabras, su cambia de usuario. Desde tu usuario actual puedes pasar a cualquier otro, ya sea root o no:

su john

Cambia tu usuario actual a john, siempre que conozcas la contraseña de john. Si quieres obtener también todas las variables de entorno de john:

su - john

Para cambiar a root:

su -

o bien:

su - root

En ambos casos necesitarás conocer la contraseña de root.

sudo es diferente. Si quieres darle a ciertos usuarios acceso para ejecutar tareas como root sin revelarles la contraseña de root, debes usar sudo. En ese caso, esos usuarios solo tienen que ingresar su propia contraseña:

sudo ls /

Pedirá la contraseña del usuario y luego ejecutará ls como root. Para esto hay que configurar el archivo sudoers.

Como puedes ver, ambos permiten ejecutar comandos con privilegios elevados, pero funcionan de manera diferente y están diseñados para distintos propósitos.

su te cambia al entorno de otro usuario y abre una sesión de ese usuario — puedes ser root o cualquier otro. sudo eleva tus privilegios temporalmente y te permite ejecutar comandos como root, siempre que tengas los derechos necesarios, es decir, que estés listado en el archivo sudoers.