Saya ingin mencari file yang tidak dapat dibaca pengguna tertentu.
Asumsikan nama pengguna adalah "user123" dan mereka berada dalam grup yang disebut "user123". Saya ingin mencari file itu, jika mereka dimiliki oleh user123 memiliki u + r aktif; gagal bahwa jika file tersebut adalah grup user123 itu seharusnya memiliki g + r aktif; gagal karena dapat mengaktifkannya.
Karena GNU find memiliki "-baca", saya bisa melakukan ini:
sudo -u user123 find /start ! -readable -ls
Namun proses tersebut harus dijalankan oleh pengguna yang tidak memiliki akses sudo. Oleh karena itu saya mencoba ini: (tidak memeriksa o tapi r tapi itu tidak penting pada saat ini)
find /start \( -user user123 ! -perm -u=r \) -o \( -group user123 ! -perm -g=r \) -ls
tetapi daftar file ini:
272118 4 -rw------- 1 user123 user123 3243 Jul 3 19:50 /start/blah/blah/file.txt
File ini adalah satu-satunya file di bawah /start
yang dimiliki oleh user123 dengan tidak g=r
aktif. Seolah menemukan menafsirkan -u=r
sebagai -g=r
.
Saya memutuskan untuk mencoba membalikkan logika dan sebagai gantinya menguji not ( truth )
:
find /etc/puppet ! \( \( -user puppet -perm -u=r \) -o \( -group puppet -perm -g=r \) -o \( -perm -o=r \) \) -ls
Itu bekerja!
Mengapa yang asli find
gagal? Apakah itu bug di find
(tidak mungkin) atau apakah logikanya salah?
Pembaruan: Logika saya salah. Seperti yang ditunjukkan di bawah, sejak! (A || B || C) == (! A &&! B &&! C) ini adalah dua pernyataan yang ekuivalen:
find /start ! \( \( -user user123 -perm -u=r \) -o \( -group user123 -perm -g=r \) -o \( ! \( -user user123 -o -group user123 \) -perm -o=r \) \) -ls
find /start ! \( -user user123 -perm -u=r \) ! \( -group user123 -perm -g=r \) ! \( ! \( -user user123 -o -group user123 \) -perm -o=r \) -ls
Tujuan saya adalah tidak harus menguji pengguna / grup dua kali. Yang benar-benar saya butuhkan adalah struktur if-then-else yang lebih rumit, yang mungkin hanya mungkin terjadi jika ada operator -xor. Saya dapat membangun xor dari dan / atau / tidak tetapi itu akan lebih kompleks daripada dua solusi di atas.
puppet
memiliki akses ke file dengan--wxrwxrwx puppet puppet
.