Как вывести список всех зарегистрированных -пользователей?

"Может ли кто-нибудь дать некоторое представление о том, почему это работает так, и помочь с каким-то решением, если таковое имеется?"

КОРОТКИЙ ОТВЕТ:

Виртуальная машина Azure по умолчанию создана с неработающим DNS:systemd-resolvedтребует дополнительной настройки. sudo systemctl status systemd-resolvedбыстро подтвердит это. /etc/resolv.confуказывает на127.0.0.53-локальный ненастроенный тупиковый преобразователь.

Локальный тупиковый резолвер systemd-resolvedне настроен. У него не было настроено перенаправление, поэтому после нажатия 127.0.0.53ему больше не у кого было спросить. Фу. Перейдите в конец, чтобы узнать, как настроить его для Ubuntu 18.04.

Если вам небезразлично, как был сделан такой вывод, пожалуйста, прочтите подробный ответ.

ДЛИННЫЙ ОТВЕТ:

Почему ответы DNS усекаются более чем на 512 байт:

TCP [RFC793] is always used for full zone transfers (using AXFR) and is often used for messages whose sizes exceed the DNS protocol's original 512-byte limit.

Источник:https://www.rfc-editor.org/rfc/rfc7766

АНАЛИЗ:

Это оказалось сложнее, чем я думал. Поэтому я развернул -виртуальную машину Ubuntu 18.04 в Azure, чтобы я мог протестировать ее с точки зрения операционной системы :

.

Я начал с проверки того, что ничто не блокирует -DNS-запросы:

sudo iptables -nvx -L
sudo apparmor_status

Для всех цепочек вiptablesполитика по умолчанию была установлена ​​на ПРИНЯТЬ , и хотяApparmorбыл установлен на « принудительное выполнение », не было ничего связанного с DNS. Таким образом, на данный момент на хосте не наблюдается проблем с подключением или разрешениями.

Затем мне нужно было установить,какDNS-запросы проходят через механизмы.

cat /etc/resolv.conf 

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0
search ns3yb2bs2fketavxxx3qaprsna.zx.internal.cloudapp.net

Таким образом, согласно resolv.conf, система ожидает локального тупикового преобразователя с именем systemd-resolved. Проверяя состояниеsystemd -разрешенов соответствии с подсказкой, приведенной в тексте выше, мы видимошибку:

sudo systemctl status systemd-resolved

● systemd-resolved.service - Network Name Resolution
   Loaded: loaded (/lib/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-08 12:41:38 UTC; 1h 5min ago
     Docs: man:systemd-resolved.service(8)
           https://www.freedesktop.org/wiki/Software/systemd/resolved
           https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers
           https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
 Main PID: 871 (systemd-resolve)
   Status: "Processing requests..."
    Tasks: 1 (limit: 441)
   CGroup: /system.slice/systemd-resolved.service
           └─871 /lib/systemd/systemd-resolved

Oct 08 12:42:14 test systemd-resolved[871]: Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001, retrying transaction with reduced feature level UDP.

/etc/nsswitch.confустановить порядок источников, используемых для разрешения DNS-запросов. Что это говорит нам?:

hosts:          files dns

DNS-запросы никогда не попадут в локальный systemd-resolvedпреобразователь-заглушку, поскольку он не указан в /etc/nsswitch.conf.

Настроены ли серверы пересылки для systemd-resolvedрезолвера-заглушки?!?!? Давайте рассмотрим эту конфигурацию в /etc/systemd/resolved.conf

.

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

Нет:systemd-resolvedне имеет настроенного сервера пересылки, чтобы запрашивать, не найдено ли сопоставление локального имени ip :.

Конечным результатом всего этого является:

  • /etc/nsswitch.conf отправляет DNS-запросы в DNS, если в/etc/hosts

    не найдено сопоставление локальногоIP-адреса :имени
  • Запрашиваемый DNS-сервер — 127.0.0.53, и мы только что увидели, что он не настроен, просмотрев его файл конфигурации /etc/systemd/resolved.conf. Если здесь не указан сервер пересылки, мы не сможем ничего успешно решить.

ТЕСТИРОВАНИЕ:

Я попытался переопределить преобразователь-заглушку 127.0.0.53, напрямую указав 168.63.129.16. Это не удалось:

dig aerserv-bc-us-east.bidswitch.net 168.63.129.16

; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> aerserv-bc-us-east.bidswitch.net 168.63.129.16
;; global options: +cmd
;; connection timed out; no servers could be reached
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 24224
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;168.63.129.16.         IN  A

;; Query time: 13 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Tue Oct 08 13:26:07 UTC 2019
;; MSG SIZE  rcvd: 42

Нет :появление ;; SERVER: 127.0.0.53#53(127.0.0.53)в выходных данных говорит нам о том, что мы не переопределили его и локальный ненастроенный преобразователь-заглушка все еще используется.

Однако использование любой из следующих команд отменяло преобразователь-заглушку 127.0.0.53по умолчанию и, следовательно, успешно возвращало NOERRORрезультаты:

sudo dig aerserv-bc-us-east.bidswitch.net @168.63.129.16

или

dig +trace aerserv-bc-us-east.bidswitch.net @168.63.129.16 

Таким образом, любые запросы, основанные на использовании systemd-resolvedпреобразователь-заглушки, были обречены, пока он не был настроен.

РЕШЕНИЕ:

Мое первоначальное-неправильное-убеждение состояло в том, что TCP/53 блокировался :весь "Truncated 512" был немного красным -сельдь. Резольвер-заглушка не настроен. Я сделал предположение -Я знаю, я знаю, "НИКОГДА НЕ ПРЕДПОЛАГАЮ ;-)-что DNS настроен иначе.

Как настроитьsystemd-resolved:

Убунту 18.04

Отредактируйте директиву hostsв /etc/nsswitch.conf, как показано ниже, добавив resolve, чтобы установить systemd-resolvedв качестве первого источника разрешения DNS:

hosts:          resolve files dns

Отредактируйте директиву DNS(как минимум )в /etc/systemd/resolved.conf, чтобы указать нужный сервер пересылки,что в этом примере будет:

[Resolve]
DNS=168.63.129.16

Перезапуститьsystemd-resolved:

sudo systemctl restart systemd-resolved

РЕЛ 8:

Red Hat почти все делает за вас в отношении настройки systemd-resolvedв качестве резолвера-заглушки,за исключением того, что они не сказали системе использовать его!

Отредактируйте директиву hostsв /etc/nsswitch.conf, как показано ниже, добавив resolve, чтобы установить systemd-resolvedв качестве первого источника разрешения DNS:

hosts:          resolve files dns

Затем перезапуститеsystemd-resolved:

sudo systemctl restart systemd-resolved

Источник:https://www.linkedin.com/pulse/config-rhel8-local-dns-caching-terrence-houlahan/

ЗАКЛЮЧЕНИЕ:

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

3
02.11.2020, 19:54
2 ответа

Учитывая необходимость перезагрузки системы Linux, я бы -использовал многосторонний подход.

Во-первых, отключите будущие входы в систему, создав файл /etc/nologin. Вы можете оставить это поле пустым или ввести информативный текст, например:

"Logins to this system have been temporarily disabled in preparation for a server reboot, scheduled for (time and date). Please try again after (expected end time)."

Не забудьте удалить /etc/nologin, когда закончите!

Кроме того, поскольку перезагрузка очищает все процессы, интерактивные они или нет, я бы использовал psдля поиска процессов, принадлежащих пользователям. Это потребует некоторого ручного исследования, чтобы определить, стоит ли сохранять процессы или нет, но это должно немного сузить область. Я жестко -закодировал здесь 1000 как значение UID _MIN из /etc/login.defs в качестве отсечки для «системных» и «пользовательских» UID. Если у кого-либо из ваших пользователей UID ниже 1000, вам нужно будет изменить это число.

ps -eo pid,uid,args | awk '$2 >= 1000'

Конечно, вы можете настроить столбцы psпо своему вкусу, возможно, добавить переведенное имя пользователя и время начала процесса(ps -eo pid,uid,user,start,args)или другие --только будьте осторожны, чтобы сохранить поля psUID и awkсинхронно друг с другом.

Чтобы получить список уникальных имен пользователей, используйте:

ps -eo user,uid | awk 'NR>1 && $2 >= 1000 && ++seen[$2]==1{print $1}'
3
18.03.2021, 22:53

Я знаю, вы сказали, что не хотите просматривать вывод ps, но что, если бы вы могли это автоматизировать?

$ join <(ps -aux | tail -n+2 | cut -d' ' -f1 | sort -u)  \
       <(getent passwd | grep -f <(grep '^/' /etc/shells) | cut -d: -f1 | sort)
root
terdon

Это может показаться немного сложным, но вот разбивка:

ps -aux | tail -n+2 | cut -d' ' -f1 | sort -u:это запускает ps, показывающий процессы всех пользователей, передает вывод через tail -n+2, который будет печатать все строки после 1-й, поэтому мы отфильтровываем заголовок ps, затем используем cutдля вывода пользователя имя и список имен пользователей передаются через sort -uдля получения отсортированного, дедуплицированного списка.

getent passwd | grep -f <(grep '^/' /etc/shells) | cut -d: -f1 | sort:здесь мы выбираем все строки в /etc/shells, которые начинаются с косой черты (это должно дать нам список действительных оболочек входа в систему )и использовать его в качестве входных данных для grep, который ищет выходные данныеgetent passwod(который должен включать пользователей LDAP )для известных пользователей с этой оболочкой. Результатом вышеизложенного должен быть список пользователей с реальными оболочками (, а не /usr/bin/nologinили /bin/falseи т. д. ).

Наконец, выходные данные обеих команд передаются в качестве входных данных для join, в результате чего печатаются только те пользователи, которые присутствуют как в выходных данных ps, так и в списке пользователей с действительными оболочками входа в систему.

Если это работает для вас,вы можете сделать его псевдонимом, добавив его в файл инициализации вашей оболочки (~/.bashrc, если вы используетеbash):

alias getUsers="join <(ps -aux | tail -n+2 | cut -d' ' -f1 | sort -u) <(getent passwd | grep -f <(grep '^/' /etc/shells) | cut -d: -f1 | sort)"

Это не идеально, некоторые системные пользователи все же могут найтись. Например, в моей системе у меня есть gitс:

$ getent passwd | grep git
git:x:996:996:git daemon user:/:/bin/bash

Я действительно не знаю, когда этот пользователь будет показан как вошедший в систему. Предположительно при выполнении некоторых команд git? В любом случае, хотя это и далеко от совершенства, это может послужить хотя бы временным обходным путем.

2
18.03.2021, 22:53

Теги

Похожие вопросы