find: Loop sistem file terdeteksi

9

Ketika saya mencoba menemukan file menggunakan find -name "filename"saya mendapatkan kesalahan yang mengatakan:

./var/named/chroot/var/named' is part of the same file system loop as `./var/named'

Saya menjalankan ls -ldi /var/named/chroot/var/named/ /var/namedperintah dan nomor inode sama. Penelitian menunjukkan perbaikannya adalah menghapus tautan keras /var/named/chroot/var/named/menggunakan rm -fdan membuatnya kembali sebagai direktori tetapi ketika saya melakukan ini saya disarankan bahwa itu tidak dapat dihapus karena itu sudah direktori. Bagaimana cara saya memperbaikinya? Saya menjalankan Centos 6 dengan Plesk 11.

Perintah mount memberikan ini:

/dev/vzfs on / type reiserfs (rw,usrquota,grpquota)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /dev type tmpfs (rw,relatime)
none on /dev/pts type devpts (rw,relatime)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)
pengguna1780242
sumber

Jawaban:

9

named, yaitu server DNS, berjalan dalam chroot. Untuk mengakses file konfigurasi, skrip startup digunakan mount --binduntuk membuat dir konfigurasi terlihat di dalam chroot. Ini berarti /var/named/sama dengan /var/named/chroot/var/named, /var/named/chroot/var/named/chroot/var/nameddan seterusnya. Ini adalah struktur direktori rekursif jadi jika finddicoba melintang semua itu tidak akan pernah bisa menghentikan pelaksanaannya, sehingga menyadari bahwa kedua direktori sebenarnya sama, dan mencetak pesan itu kepada Anda, untuk memperingatkan Anda.

Pesan itu berarti bahwa findtidak akan mencari di dalam /var/named/chroot/var/namedkarena menyadari itu sama dengan beberapa direktori lain yang sudah dilihat sebelumnya. Ini adalah pesan sama sekali tidak berbahaya, Anda dapat dengan aman mengabaikannya: setelah melompat-lompat /var/named/chroot/var/nameddengan findoperasi berlanjut secara normal.

pqnet
sumber
Jadi jika tidak ada apa-apa setelah pernyataan ini, itu berarti file tidak ditemukan?
user1780242
ya, tebak begitu. Coba hal yang sama dengan file yang Anda tahu ada. Anda juga dapat menekan pesan kesalahan dengan menambahkan `2> / dev / null` ke baris perintah.
pqnet
1

Pesan memicu kode pengembalian 1 dan tidak dapat diabaikan, juga tidak akan berfungsi.

Menggunakan findutils findutils-4.4.2-6.el6.x86_64

Tampaknya ini adalah laporan bug yang sesuai:

Pada sistem yang menjalankan kernel Linux, "find -printf% F" tidak lagi menghasilkan jawaban yang salah untuk file pada sistem file yang telah di-remount ke tempat lain menggunakan "mount --bind". (Savannah bug # 14921).

Solusi (tantangan keamanan) jika Anda tidak dapat memperbaiki skrip yang terpengaruh (yaitu karena ditulis oleh pihak ke-3) adalah menghapus paket bind-chroot, setidaknya untuk sementara.

Florian Heigl
sumber
0

Saya pikir itu bukan tautan yang sulit. Biasanya tautan keras direktori dilarang. Saya bisa menjadi tautan lunak, tetapi sepertinya ini adalah mount loop: sepertinya /var/namedatau mungkin /varsudah dipasang kembali /var/named/chroot. Mungkin itu bind mount ( mount -o bind) atau hanya mount normal.

Bisakah Anda memposting output dari mountperintah Anda ? Juga, mungkin ini adalah gunung yang diperlukan untuk chroot jail dan Anda lebih baik meninggalkannya.

Migtor
sumber
itu mungkin mount --bindkarena itu adalah satu-satunya yang bekerja di chroot.
pqnet
0

Masalahnya disebabkan oleh skrip init namedyang me-mount /var/nameddirektori /var/named/chroot. Solusi untuk masalah ini juga ada dalam skrip init.

mount_chroot_conf()
{
   # Mount source is a directory. Mount it only if directory in chroot is
   # empty.

Seperti disebutkan di atas mountfungsi hanya akan berfungsi jika direktori kosong. Jadi gunakan solusi di bawah ini:

  1. Berhenti named
  2. Buat direktori /var/named/chroot/var/named
  3. Buat file kosong di dalam direktori ini
  4. Mulailah named
pengguna202132
sumber