chroot環境を構築するため、jail内にコピーする必要なライブラリを調べる方法のメモ。CentOSでの場合。
- lddを使う。例えばこんな感じ。
# ldd /usr/bin/ssh libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002ab5c4712000) libutil.so.1 => /lib64/libutil.so.1 (0x00002ab5c4a63000) libz.so.1 => /usr/lib64/libz.so.1 (0x00002ab5c4c66000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00002ab5c4e7b000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ab5c5093000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002ab5c52cb000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002ab5c54e1000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002ab5c570f000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002ab5c59a4000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002ab5c5bca000) libnss3.so => /usr/lib64/libnss3.so (0x00002ab5c5dcc000) libc.so.6 => /lib64/libc.so.6 (0x00002ab5c611d000) libplc4.so => /usr/lib64/libplc4.so (0x00002ab5c6474000) libdl.so.2 => /lib64/libdl.so.2 (0x00002ab5c6678000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002ab5c687c000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002ab5c6a85000) libnssutil3.so => /usr/lib64/libnssutil3.so (0x00002ab5c6c87000) libplds4.so => /usr/lib64/libplds4.so (0x00002ab5c6ea3000) libnspr4.so => /usr/lib64/libnspr4.so (0x00002ab5c70a7000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab5c72e1000) /lib64/ld-linux-x86-64.so.2 (0x00002ab5c44f5000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002ab5c74fc000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002ab5c7715000)
- straceを使うと、lddでは表示されないものもわかる。
# strace -e trace=open /usr/bin/ssh open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib64/libcrypto.so.6", O_RDONLY) = 3 open("/lib64/libutil.so.1", O_RDONLY) = 3 open("/usr/lib64/libz.so.1", O_RDONLY) = 3 open("/lib64/libnsl.so.1", O_RDONLY) = 3 open("/lib64/libcrypt.so.1", O_RDONLY) = 3 open("/lib64/libresolv.so.2", O_RDONLY) = 3 open("/usr/lib64/libgssapi_krb5.so.2", O_RDONLY) = 3 open("/usr/lib64/libkrb5.so.3", O_RDONLY) = 3 open("/usr/lib64/libk5crypto.so.3", O_RDONLY) = 3 open("/lib64/libcom_err.so.2", O_RDONLY) = 3 open("/usr/lib64/libnss3.so", O_RDONLY) = 3 open("/lib64/libc.so.6", O_RDONLY) = 3 open("/usr/lib64/libplc4.so", O_RDONLY) = 3 open("/lib64/libdl.so.2", O_RDONLY) = 3 open("/usr/lib64/libkrb5support.so.0", O_RDONLY) = 3 open("/lib64/libkeyutils.so.1", O_RDONLY) = 3 open("/usr/lib64/libnssutil3.so", O_RDONLY) = 3 open("/usr/lib64/libplds4.so", O_RDONLY) = 3 open("/usr/lib64/libnspr4.so", O_RDONLY) = 3 open("/lib64/libpthread.so.0", O_RDONLY) = 3 open("/lib64/libselinux.so.1", O_RDONLY) = 3 open("/lib64/libsepol.so.1", O_RDONLY) = 3 open("/etc/selinux/config", O_RDONLY) = 3 open("/proc/mounts", O_RDONLY) = 3 open("/dev/null", O_RDWR) = 3 open("/etc/nsswitch.conf", O_RDONLY) = 3 open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib64/libnss_files.so.2", O_RDONLY) = 3 open("/etc/passwd", O_RDONLY) = 3
- ちなみに、bashで上記の出力をlessなどパイプで渡したい場合には次のようにする。
# strace -e trace=open /usr/bin/ssh 3>&1 >/dev/null 2>&3 | less