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.