web-dev-qa-db-ja.com

Linuxコマンドの「id」と「whoami」の依存関係(chroot環境の場合)

Fedora Core 18に新しいopenssh(openssh-server-6.1p1-4.fc18.i686)chroot環境があり、(bash)シェルを使用してユーザーをchrootディレクトリ構造に配置します。トラブルシューティング中、SELinuxは、問題の原因として除外するために許容モードになっています。

ログオンユーザーには、次が表示されます。

_Using username "testuser".

Authenticating with public key "rsa-key-xxxxxxx" from agent
id: cannot find name for group ID 1002
id: cannot find name for user ID 1001
id: cannot find name for group ID 1002
id: cannot find name for user ID 1001
[I have no name!@fc18test ~]$
_

Whoamiも同様に失敗します。

このchroot環境でidコマンドが正しく機能するための依存関係は何ですか?以前のバージョンのOpenSSHを使用していた以前のバージョンのFedoraでは正常に機能していました。

Chroot環境では、/ etcディレクトリがpasswd&passwd-、group&group-、およびnsswitch.confで再作成されています。 nsswitch.confには、「files」として定義された「passwd」と「group」のエントリがあり、ユーザーIDとグループIDの両方が適切なファイルに存在します。ファイルのパーミッションは、標準の/ etcディレクトリにある同じファイルのパーミッションを反映しています。トラブルシューティング中はSELinuxがパーミッシブモードであるため、必要ではないはずですが、SELinuxコンテキストも一致します。

Idはgetuid()またはgeteuid()のいずれかを呼び出すと思います。 chroot _/lib_ディレクトリにライブラリがない可能性はありますか?

誰かが何が悪いのかを明らかにすることができますか?

1
user1783979

lddを使用して、リンクされたライブラリを確認します。例:

 $ ldd $(which  whoami)
    linux-vdso.so.1 =>  (0x00007fff00bfe000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa25f48e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa25f871000)

システムでlinux-vdsoが見つからなくても心配しないでください、 例を参照

Linux-vdso.so.1として表示されるライブラリは、仮想ライブラリまたは仮想動的共有オブジェクトであり、各プログラムのアドレス空間にのみ存在します。古いシステムはこれをlinux-gate.so.1と呼んでいました。この仮想ライブラリは、ユーザープログラムが特定のプロセッサで利用可能な最速の手段(割り込み、またはほとんどの新しいプロセッサでは高速システムコール)を介してシステム機能にアクセスできるようにするために必要なロジックを提供します。

2
user86064

ヒントをありがとう:)

この理由は、ユーザーとグループを見つけるためのwhoamiへのnss依存関係です。

私が使用した解決策は、whoami呼び出しをstraceすることでした。

/ # strace /bin/whoami
....
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_LOCAL, Sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
close(3)                                = 0
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libnss_compat.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "/bin/whoami: cannot find name fo"..., 44/bin/whoami: cannot find name for user ID 0) = 44
close(1)                                = 0
close(2)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

これは、不足しているライブラリファイルをコピーすることで解決されました。

5
user56781