LINUX.ORG.RU

sudo systemctl долго реагирует на команду если в resolv.conf некорректный ip

 , ,


0

1

На выполнение команд systemctl (status, к примеру) не реагирует некоторое время, секунд 5, потом выполняет и отображает результат если в /etc/resolv.conf прописан несуществующий ip адрес. Пинг по имени соответственно не работает.

Стоит туда внести корректный адрес как исполнение команд systemctl реагирует моментально.

Порт 53 занимает systemd-resolvd, пробовал его отключить, не помогает.

Куда копать не понятно.

Есть другая система, в принципе похожая, не вижу особой разницы, там нет такого, любой DNS, реакция systemctl моментальная.

Да даже вызов sudo nano /etc/resolv.conf тоже дольше реагирует пока откроется, если неправильный ip в resolv.conf.

Команды с sudo тормозят оказывается, без sudo нормально.



Последнее исправление: pethead (всего исправлений: 2)
Ответ на: комментарий от pethead

https://unix.stackexchange.com/questions/401008/sudo-command-hangs

The problem can reproduced when the hostname is changed , edit your /etc/hosts by adding the output of echo $HOSTNAME after 127.0.0.1:

echo 127.0.0.1 localhost $(hostname) >> /etc/hosts
rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от kostik87

меняли так

sudo hostnamectl set-hostname NEWHOSTNAME

меняет в /etc/hostname, но не в /etc/hosts

и теперь если нет инета или ДНС кривой то под sudo начинается цирк.

Всем спасибо, по sudo hangs тоже гуглил, не успел прочитать найденное, здесь уже прочитал

pethead
() автор топика
Последнее исправление: pethead (всего исправлений: 1)
Ответ на: комментарий от pethead

Вместо того чтобы менять /etc/hosts, лучше настроить NSS правильно:

hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns
intelfx ★★★★★
()
Ответ на: комментарий от pethead

Если в файле sudo nano /etc/nsswitch.conf в строке hosts: files mymachines dns myhostname убрать слово dns то тогда и при кривом dns команды под sudo не подвисают больше, при условии что имя хоста так же кривое в /etc/hosts

pethead
() автор топика
Ответ на: комментарий от intelfx

hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns Тогда то же начинает работать нормально.

Т.е. если поменять имя хоста командой hostnamectl не касаясь hosts, и поправить строку nss, то тоже работает.

pethead
() автор топика
Ответ на: комментарий от pethead

В итоге остается последний вопрос после изменения имени хоста и больше никуда не лазить и при отсутствии инторнета: Why is internet connectivity required for sudo?

pethead
() автор топика
Ответ на: комментарий от pethead

Why is internet connectivity required for sudo?

Как мы только что выяснили, дело не в «отсутствии инторнета», а в том, что sudo лезет в DNS, чтобы преобразовать имя локального хоста в его адрес (или наоборот). А DNS, точнее NSS, в свою очередь был настроен так, чтобы требовать «инторнет» даже в случаях, когда можно было без этого обойтись.

Зачем — ну, навскидку, в sudoers есть возможность настраивать политики, ограниченные конкретными хостами (или адресами). Ещё там есть логирование запросов, опять же, потенциально включающее FQDN. И то, и то, если включено на конкретной машине, предполагает какие-то запросы к DNS.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Ответ на: комментарий от intelfx

Сколько отмаз, ну зачем так делать? Именно так - sudo лезет в инет, хотя делать этого не должен. Утилита вредная и писали её дилетанты - латентные виндузятники.

firkax ★★★★★
()
Ответ на: комментарий от firkax

В какой «инет»? Он ресолвит имя хоста, никакой «инет» и даже ДНС для этого не нужны, достаточно вменяемого /etc/hosts, который всё равно должен быть в системе. Недавно, вон, в mc находили похожий косяк — тормозил при открытии, если имя хоста сресолвить не мог.

alegz ★★★★
()
Ответ на: комментарий от alegz

Это всё отмазы и они не меняют фактов - sudo может слать неожиданные сетевые запросы в некоторых обстоятельствах и лагать в ожидании ответа от них. Впрочем, возможно проблема сидит чуть глубже (в общелинуксовых традициях которые допускают лезть в инет чтоб узнать имя локального хоста, в нормальных системах оно берётся из sysctl безо всякой юзерспейсной чуши - какого-то парсинга файлов или, ещё хуже, отправок запросов), но это никак не извиняет разработчиков софта, позиционируемого как инструмент безопасности - они то должны были об этом подумать.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ну ничего, сейчас run0 приедет, за пару лет админы научатся вменяемо писать к polkit-у правила, причешем юзабилити и можно будет вредную утилиту выкинуть на свалку истории :>

intelfx ★★★★★
()
Ответ на: комментарий от firkax

Имя локального хоста можно узнать системным вызовом, если ты уже заранее знаешь, что тебе нужно имя локального хоста. Надо полагать, что в sudo это всё-таки часть какого-то более обобщённого механизма.

А может, у ТСа в sudoers написано «127.0.0.1»? И sudo послушно лезет проверять, что такое 127.0.0.1.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Все что там пишу это убираю ввод пароля для sudo, остальное как в ОС из коробки. Никаких там IP нет.

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
#%sudo  ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL) NOPASSWD:ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
pethead
() автор топика
Ответ на: комментарий от pethead

Гм.

Ну тогда если разбираться, то нужно смотреть, что там в sudoers.d, смотреть с какими дефолтами было собрано, смотреть в конфиг PAM и auditd — может, это вообще в них.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx
total 12
drwxr-xr-x  2 root root 4096 Sep 11  2018 ./
drwxr-xr-x 96 root root 4096 May 14 10:28 ../
-r--r-----  1 root root  958 Jan 18  2018 README

:)

pethead
() автор топика
Ответ на: комментарий от pethead

В итоге остается последний вопрос после изменения имени хоста и больше никуда не лазить и при отсутствии инторнета: Why is internet connectivity required for sudo?

Потому, что sudo не нужен. Переходи на run0.

vbr ★★★★
()
Ответ на: комментарий от vbr

Если бы это было так просто, то я и сам написал бы все нужные мне утилиты и сам линукс, но приходится использовать то что есть в наличии в промышленных образцах, и воткнуть туда мейнстрим еще сложнее чем написать своё. Утилита run0 включена в состав выпуска systemd 256, который находится на стадии кандидата в релизы.

pethead
() автор топика
Ответ на: комментарий от pethead

Ну вот такой у нас софт в промышленной эксплуатации, который может давать рандомные задержки в казалось бы не связанных ситуациях.

vbr ★★★★
()
Ответ на: комментарий от vbr

В промышленных системах может использоваться устаревший, но тем не менее проверенный временем софт.

Так же, как в космос летает техника уровня pentium 1 и со зверскими тех. процессами, потому что надёжно и не произойдёт переключение транзистора от прилетевшего фотона.

Переходить на run0 только из-за того, что он появился и его придумал Леннарт смысла никакого.

Вот если бы он ещё сохранил полную совместимость по конфигам, ключам запуска, сделал бы конвертер, тогда есть о чём говорить.

Это всё можно сделать и самому и переписать часть скриптов, сервисов, можно.

Но если предлагается новое системное ПО, даже привносящее больше безопасности - неплохо бы обеспечить совместимость.

К примеру, чем тебя не устраивает sudo? Понятно, что у тебя, видимо Арч и там уже он, возможно есть и вскоре везде будет штатно, как часть systemd. Но лично тебе чем не подходит sudo?

kostik87 ★★★★★
()
Ответ на: комментарий от pethead

Кек. Изменение имени машины - это целая операция, там не в одном и не в двух местах править надо.

targitaj ★★★★★
()
Ответ на: комментарий от kostik87

Главная проблема sudo это наличие suid бита.

Это означает, что программа, которую запускает любой юзер, запускается от рута.

При этом она читает конфиги, линкуется с кучей библиотек, которые бог знает что делают, как выясняется - даже в интернет лезет.

И это всё на ужасающем C, в котором переполнение буфера даже в hello world-е можно допустить. systemd, правда, тоже написан на С, что прискорбно, так что этот пункт скорей так, из разряда rant.

И всё это выражается в 185 CVE на sudo на текущий момент. Для сравнения - по systemd находится 92 CVE, при том, что масштаб проектов несравним.

В нормальной системе безопасности не должно быть возможности увеличить свои привилегии. Никак вообще. Только уменьшить. Концепция suid бита нарушает этот принцип и поэтому должна быть изжита. run0 это один из шагов к решению этой проблемы.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Главная проблема sudo это наличие suid бита.

Это означает, что программа, которую запускает любой юзер, запускается от рута.

Это всё понятно, но это те же слова, что сказаны в новости про run0 и это же описано в документации sudo, т.е. общеизвестно. С этим я в принципе согласен. Ошибки в коде sudo или приложений, через него запускаемых, могут привести к проблемам в безопасности. В некоторых системах suid бит стоит даже на утилите ping.

А твои собственные мысли, кроме того, что сказано в новости и в ман странице самого sudo, какие?

kostik87 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.