TGViewer
DevOps Portal | Linux DevOps Portal | Linux @loose_code · 13.1K subscribers
Post #775 4.64K
Чем отличается su от 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 - в приличных местах можно получить по шапке. Это плохая практика! Так как это порождает дополнительный процесс и больше гемора с набором самой команды.


👉 DevOps Portal
  • 👍 39
  • 🔥 10
  • ❤ 7
  • 🤔 1
More from @loose_code
  1. Oct 6, 2026Как работает Kubernetes Cluster Autoscaler? Базовый флоу выглядит так Pending Pod → Cluste…
  2. Oct 6, 2026Что будет, если убрать репликацию с диска?☁️ В K2 Cloud проверили и запустили сетевые нере…
  3. Oct 1, 2026Обработка миллионов файлов – это та точка, где большинство распределённых систем хранения…
  4. Oct 1, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Oct 1, 2026Docker 101: Как достучаться до контейнера без проброса порта Знали, что IP-адрес контейнер…
  6. Sep 30, 2026В этой статье разбирается, как спроектировать production-ready MCP-сервер для платформенны…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →