Можно ли добавить список хостов, которые относятся только к определенному пользователю? Возможно, пользовательский файл hosts?
Этот механизм также должен дополнять записи в /etc/hosts
файле.
not-root-user
hosts
redspike
источник
источник
Ответы:
Функциональность, которую вы ищете, реализована в glibc. Вы можете определить собственный файл hosts, установив
HOSTALIASES
переменную окружения. Имена в этом файле будут подобраныgethostbyname
(см. Документацию ).Пример (проверено на Ubuntu 13.10):
Некоторые ограничения:
HOSTALIASES
работает только для приложений, использующихgetaddrinfo(3)
илиgethostbyname(3)
HOSTALIASES
настройка потеряна. ping - это setuid root (потому что он должен прослушивать ICMP-пакеты), поэтомуHOSTALIASES
он не будет работать с ping, если вы уже не являетесь пользователем root, прежде чем вызывать ping.источник
nscd
и ограничен именами хостов без точки.127.0.0.1 somedomain.com
)getcap /usr/sbin/ping
вы можете увидеть что - то вроде:/usr/bin/ping = cap_net_admin,cap_net_raw+p
. И технически это то, что ему нужно открывать необработанный сокет, а не ICMP (но я полагаю, вы могли бы поспорить, что это просто семантика).Помимо
LD_PRELOAD
трюков. Простая альтернатива, которая может работать в нескольких системах, заключается в двоичном редактировании копии системной библиотеки, которая обрабатывает разрешение имени хоста, чтобы заменить ее/etc/hosts
собственным путем.Например, в Linux:
Если вы не используете
nscd
, скопируйтеlibnss_files.so
в какое-либо место, например:(общая библиотека может быть расположена в другом месте, например
/lib/libnss_files.so.2
)Теперь бинарно отредактируйте копию, чтобы заменить ее
/etc/hosts
на что-то похожее по длине/tmp/hosts
.Изменить,
/tmp/hosts
чтобы добавить запись, которую вы хотите. И использоватьдля
nss_files
смотреть в/tmp/hosts
а/etc/hosts
.Вместо этого
/tmp/hosts
вы также можете сделать это/dev/fd//3
(здесь использовать две косые черты, чтобы длина была/dev/fd//3
такой же, как у/etc/hosts
), и сделатьНапример, который позволил бы различным командам использовать разные
hosts
файлы.Если
nscd
он установлен и работает, вы можете обойти его, выполнив тот же трюк, но на этот разlibc.so.6
и заменив путь к сокету nscd (что-то вроде/var/run/nscd/socket
) каким-то несуществующим путем.источник
LD_LIBRARY_PATH
указателя на каталог, принадлежащий пользователю, означает, что любой другой процесс, запускаемый пользователем, может использовать этот каталог для кооперации любых новых процессов, порожденных путем замены библиотек. А обновленияlibnss_files.so
через менеджер пакетов (включая обновления безопасности) не будут отражены в исправленной версии. Модификация,LD_LIBRARY_PATH
как правило, плохая вещь, которую можно рекомендовать по другим причинам, но она также неразумна из-за этих проблем.Личные монтируемые пространства, созданные с помощью
unshare
команды, могут использоваться для предоставления частного файла / etc / hosts для процесса оболочки, а также любые последующие дочерние процессы, запускаемые из этой оболочки.источник
unshare(2)
иclone(2)
это часть магии здесь. Смотрите такжеnamespaces(7)
иuser_namespaces(7)
.Одно из решений состоит в том, чтобы каждый пользователь был отдельным
chroot
, чтобы каждый мог иметь отдельного/etc/hosts
для себя.источник
Я столкнулся с такой же потребностью, поэтому я попробовал libnss-userhosts, но это не помогло многопоточным приложениям. Поэтому я написал libnss-homehosts . Это очень новое и проверено только мной. Вы можете дать шанс для этого! Он поддерживает некоторые параметры в /etc/host.conf, несколько псевдонимов и обратное разрешение (адрес к имени).
источник
Размещение следующего в
~/.bashrc
работает для меня в Bash. Он преобразует имя хоста в команде в адрес на основе записей в~/.hosts
. Если~/.hosts
не существует или если имя хоста не может быть найдено~/.hosts
, команда выполняется как обычно. Это должно работать с исходными флагами соответствующих функций и независимо от того, где размещено имя хоста относительно флагов, напримерping -i 0.5 host1 -c 3
, работает.~/.hosts
Файл отдается предпочтение перед любым другим местом для нахождения хостов, так что если есть какие - dupicate имен хостов, адрес в~/.hosts
будет использоваться.Пример
~/.hosts
приведен ниже. Это следует в том же формате, что и/etc/hosts
. Комментарии и пробелы обрабатываются правильно.источник
Не уверен, поможет ли это вам, но я пришел сюда в поисках способа добавления сохраненных «хостов» в такое место, которое было бы легко доступно только моему пользователю.
Мне в основном нужно было иметь возможность подключаться к определенным блокам в нашей рабочей сети, которая имеет только одну точку входа.
Я добавил псевдонимы в мой
.bashrc
файл.Например, если вы добавили:
внизу вашего
~/.bashrc
(~
это ваш домашний каталог). Затем, после того как вы выйдете из системы и войдите снова, вы можете напечататьjrfbox
, нажать Enter, и она подключится.источник
man ssh_config
.~/.bashrc
, чтобы перезагрузить компьютер , просто сделайте этоsource ~/.bashrc
.. ~/.bashrc