名前解決はchrootユーザーには機能しませんが、rootでは機能します。

名前解決はchrootユーザーには機能しませんが、rootでは機能します。

そのシステムを実際に起動せずに、他の作業システムからいくつかのパッケージをダウンロード、コンパイル、インストールするためにlive-cdを起動しました。

次のコマンドを実行して、システムにビルドユーザーを作成しました。useradd -m -G wheel -s /bin/bash builder

その後、パーティションとchroot環境をインストールしました。

# mount /dev/mapper/luksdev on /mnt
# cd /mnt
# cp /etc/resolv.conf etc
# mount -t proc /proc proc
# mount --make-rslave --rbind /sys sys
# mount --make-rslave --rbind /dev dev
# mount --make-rslave --rbind /run run
# chroot /mnt /bin/bash

次に、Clone、Chown、およびビルドするプロジェクトに移動します。

(chroot)# git clone https://aur.archlinux.org/lighttpd2-git.git /home/builder/lighttpd2
(chroot)# chown -R builder.builder /home/builder/lighttpd2
(chroot)# sudo -u builder -s
(chroot|builder ~)$ cd /home/builder/lighttpd2/
(chroot|builder lighttpd2)$ /usr/bin/makepkg -s --noconfirm

ルートとして名前ルックアップを実行するのに問題はないので、期待git cloneどおりに機能します。ただし、このパッケージをビルドしながら他のユーザーに切り替えてください。(またはgit cloneroot以外のユーザーとして実行している場合)、私は次を得る:

fatal: unable to access 'https://git.lighttpd.net/lighttpd/lighttpd2.git/': Could not resolve host: git.lighttpd.net

pingそれで問題を把握するために簡単な検査をしてみようかと思いました。ping www.google.comのように振る舞いますが、そうしないrootでくださいbuilder。しかしping 8.8.8.8 両方に有効 root& builder

(chroot)# ping -c 1 www.google.com
PING www.google.com (172.217.22.164) 56(84) bytes of data.
64 bytes from arn09s11-in-f164.1e100.net (172.217.22.164): icmp_seq=1 ttl=55 time=2.03 ms

(chroot|builder)$ ping -c 1 www.google.com
ping: www.google.com: Name or service not known

(chroot)# ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=121 time=1.97 ms

(chroot|builder)$  ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=121 time=1.98 ms

論理的には、これは特定のユーザーの名前解決に関連していると思います。しかし、これを行うと:

(chroot)# nslookup www.google.com
Server:    8.8.8.8
Name:      www.google.com
Address: 216.58.207.196

(chroot|builder)$ nslookup www.google.com
Server:    8.8.8.8
Name:      www.google.com
Address: 216.58.207.196

どちらのユーザーも nslookup を実行できます。これは/etc/resolv.conf存在し、有効なようです。ただし、ホスト名をpingするか、nslookup / dig以外のすべての種類の名前解決操作を使用すると機能しません。

(chroot|builder)$ python
>>> from socket import *
>>> s = socket()
>>> s.connect(('www.google.com', 80))
socket.gaierror: [Errno -2] Name or service not known

簡単にするためにpingだけを使ってみました。
また、私は私のpingをブロックしていないことを確認しようとしました:

(chroot)# chown root:root /bin/ping; chmod u+srwx,go=rx /bin/ping
(chroot)# getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep

しかし、それでもホスト名でpingすることはできませんが、IPはまだ機能します。

(chroot|builder)$ strace ping www.google.com
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = -1 EACCESS (Permission denied)
socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) = -1 EPERM (Operation not permitted)
write(2, "ping: socket: Operation not perm"..., 38ping: socket: Operation not permitted)= 38

/homeそして/root両方ともインストールされていませんnosuid。残念ながら、これは仮想マシンなのでスクリーンショットの。

でpingを試しているので、/homeこれがなぜ問題を引き起こすのかわかりません。システムから起動し、live-cd起動中に作成したユーザーと同じ操作を実行すると、ホスト名をpingできます。

この時点で、なぜ一部のユーザーはping、照会などを実行できますが、他のユーザーはchroot環境で実行できないのかを理解したいと思います。基本的な問題を解決または理解するために、ここでデバッグ/続行をどこで開始するのかわかりません。 IRCの一部を助けてくれた人たちも連絡しようとしましたが、私たちは皆混乱しました。

編集する:

mount --make-rslave --rbind /run run問題に絞り込んでみました。理由が何であれ、これが理由です。問題の開始時にping www.google.com各コマンドを実行しようとすると、インストールの直後に停止します。mount/run

ここに画像の説明を入力してください。

ベストアンサー1

おすすめ記事