sudo - ??? su «substitute user» — заменить пользователя sudo «substitute user and do» — подменить пользователя и выполнить su требует пароль целевой учетной записи, на кого переключаемся. sudo требует пароль текущего пользователя и запускает от его имени команды, которым требуются права суперюзера. Например, мы сидим под пользователем user и хотим войти под John: user@dev:/$ su john Будет запрошен пароль, нужно ввести пароль именно от учетной записи john, а не от user. А вот пример с sudo: user@dev:/$ sudo -u john whoami А здесь нужно ввести пароль от учетной записи user, а не от John или рута. Но для этого случая сперва необходимо добавить пермишены для пользователя user в файл /etc/sudoers. user ALL=(ALL:ALL) ALL Редактировать этот файл можно по средствам команды visudo. А свалидировать конфиг можно командой visudo -c. Редактирование этого файла через visodu хорошо тем, что если вы допустите ошибку, то при сохранении, оно сообщит о ней. А для чего нужен дефис после su? Для очистки переменных и чтобы пользоваться чистой оболочкой при переключении на другого пользователя. Авторизуемся под пользователем user и экспортируем переменную: ssh user@pc export a="test" Теперь у пользователя user есть переменная "a" которая = test. Переключаемся на пользователя John и смотрим переменную "a" su john echo $a Вывелась строчка test. То есть все что мы задали под user, перекочевало в оболочку john. А теперь добавим дефис: su - john echo $a Переменная $a больше не выводится. Чистая оболочка. Кстати с этим дефисом часто косячат и потом долго не могут понять в чем причина. Переменные вроде были заданы, а потом куда-то пропали. su (с дефисом) — сначала переключается пользователь, а затем запускается shell, зачищаются все переменные. su (без дефиса) — переключает пользователя, оставляя переменные окружения старого пользователя. У sudo есть подобные ключи -s -i user@pc:/$ sudo -s Запустится оболочка с правами root user@pc:/$ sudo -i Запустится оболочка, но уже с чтением файлов root/.profile/.bashrc и т.п. Можно попробовать добавить экспорт переменной в .profile, сделать sudo -s/-i и увидеть что с ключом -i переменная выведется на экран. По сути sudo -i = команде sudo su -. Но обычно за sudo su - в приличных местах можно получить по шапке. Это плохая практика! Так как это порождает дополнительный процесс и больше гемора с набором самой команды.