Существует ли эквивалент /etc/hosts для конкретного пользователя?

Вопрос или проблема

Существует ли способ определить специфические для пользователя хосты, как в /etc/hosts? Может быть что-то вроде ~/.hosts?

Для всего, что связано с ssh (включая rsync по ssh), вы можете добавить записи в файл ~/.ssh/config

например:

Host myhost
    Hostname myhost.example.com

Тогда команда ssh myhost подключит вас к myhost.example.com

Конкретные приложения могут иметь что-то, что вы можете использовать, как предложил Ник, но аналога файла /etc/hosts в домашнем каталоге пользователя нет.

Когда приложения пытаются разрешить имена хостов, это обрабатывается NSS. Вы можете проверить, как NSS обрабатывает имена хостов в вашей системе, заглянув в /etc/nsswitch.conf

$ grep host /etc/nsswitch.conf 
hosts:          files dns

Это означает, что имена хостов будут сначала разрешаться на основе базы данных файла (/etc/hosts), а если это не сработает — на основе данных DNS, указанных в /etc/resolv.conf

Я задавался тем же вопросом, и один коллега нашел такое решение: Архивная ссылка: https://web.archive.org/web/20160318205307/http://blog.tremily.us/posts/HOSTALIASES/

Суть заключается в установке переменной окружения (HOSTALIASES), которая указывает на файл, используемый для алиасов хостов (вы могли бы использовать, например, ~/.hosts).

Еще одно решение — это различные окружения “chroot” для разных пользователей. Даже разные корневые “jails” для одного и того же пользователя в зависимости от определенных критериев.

Я нашел https://github.com/bAndie91/libnss_homehosts, упомянутый в https://bbs.archlinux.org/viewtopic.php?id=266445

Это значит, что вы могли бы иметь файл ~/.hosts с такой же синтаксисом, как у /etc/hosts.

Ответ или решение

Вопрос о возможности создания пользовательского эквивалента файла /etc/hosts часто возникает у пользователей, заинтересованных в настройке локальных псевдонимов для сетевых хостов, специфичных для конкретного пользователя. Действительно, стандартного способа, аналогичного /etc/hosts, для пользователей не существует, однако есть несколько подходов, которые можно использовать для достижения аналогичной функциональности.

1. Использование файла ~/.ssh/config

Для SSH-подключений и команд, таких как rsync через SSH, можно использовать файл конфигурации SSH. Он позволяет задавать псевдонимы для хостов, что особенно удобно:

Host myhost
    Hostname myhost.example.com

После этого вместо ssh myhost вы сможете подключиться по этому псевдониму.

2. Специфичные для приложений решения

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

3. Использование переменной окружения HOSTALIASES

Существует простой способ создания пользовательской альтернативы для файла /etc/hosts с помощью переменной окружения HOSTALIASES. Вы можете указать переменную, которая будет ссылаться на пользовательский файл, например, ~/.hosts:

export HOSTALIASES=~/.hosts

Файл ~/.hosts должен иметь синтаксис, аналогичный /etc/hosts. Таким образом, вы сможете определять алиасы переданных хостов.

4. Использование libnss_homehosts

Если вы ищете более комплексное и интегрированное решение, вам может подойти библиотека libnss_homehosts, которая позволяет использовать файл ~/.hosts, как если бы это был локальный файл /etc/hosts. Эта библиотека добавляет поддержку пользовательского файла хостов в систему именования служб и позволяет централизованно управлять разрешением имен для пользователей.

Ссылка на репозиторий: libnss_homehosts.

5. Использование chroot-окружений

Еще один более сложный, но мощный вариант — создание различных chroot-окружений для разных пользователей. Это позволит изолировать настройки и ресурсы, но требует больше времени на настройку и понимание работы с chroot.

Заключение

Хотя нет прямого эквивалента файла /etc/hosts на уровне пользователя, можно использовать комбинацию из вышеупомянутых методов для достижения желаемого результата. Выбор оптимального способа будет зависеть от ваших конкретных потребностей и окружения.

Оцените материал
Добавить комментарий

Капча загружается...