find Komutu İle Kullanıcı, Erişim ve Yetki Aramaları

Sunucu üzerinde dosya/dizin erişimlerinde sürecin başı ve sonu arasındaki süre uzadıkça bir şeyleri gözden kaçırmak da daha mümkün hale gelmekte. İşte bu ve benzeri durumlarda faydalanmak üzere bu yazıda find komutunu kullanarak kullanıcı, erişim ve yetki gözlemleri gerçekleştireceğiz1.

AA

Kullanıcı, Erişim ve Yetki Değerlendirme İşlemleri

Dosyalara erişim izinleri tanımlayıp (klasör, klasör içeriği ya da belirli dosyalar fark etmeksizin) sonrasında listeleyerek ya da grep ile işaretleyerek düzenlemeler yapmamız mümkün2. Ancak bu süreci daha da kısaltabiliriz. İşte tam bu noktada find komutundan destek alacağız. O halde, ilk örneğimiz herkes tarafından yazılabilir olan (777) ve güvenlik riski oluşturan dosyaların saptanması üzerine olsun.

find . -perm -o+rwx

Alternatif olarak örneği şu şekilde düzenleyebiliriz.

find . -type f -perm -o+rwx
find . -type f -perm -o+rwx | xargs ls -alh

Evet, güvenlik sorunu oluşturabilecek dosya izinlerini bu şekilde takip edebilir ve kontrol altında tutabiliriz. Eğer dosya düzenlemeleri ile ilgili zaman tanımlayarak arama işlemi gerçekleştirmek isterseniz -ctime ve -mtime oldukça işe yarayacaktır. Ancak daha pratik kullanımlar da söz konusu. Örneğin -perm ile doğrudan izin belirterek dosya ve klasörler için arama işlemi gerçekleştirebiliriz.

find / -type f -perm 777
find / -type d -perm 777 | xargs ls -alh

Tersi bir işlem yapmak istersek, yani dizin içerisindeki dosyalar arasından 777 izni dışındaki tanımlamaları bulmak istersek?

find / ! -perm 777 -type f
find / ! -perm 777 -type f | xargs ls -alh

Bir de bu işlemi boş klasörler için yapalım.

find . ! -perm 777 -type d -empty | xargs ls -alh

User, Group ve Owner için ayrı ayrı okuma, yazma ve çalışırma izinlerini de kullanabiliriz.

find / -type f -perm /u=r | xargs ls -lah
find / -type f -perm /g=x | xargs ls -lah
find / -type f -perm /o=w | xargs ls -lah

Spesifik şekilde izin belirtmenin yanı sıra belirli bir zaman aralığında üzerinde çalıştığımız ya da işlemler sonucu etkilenen dosyaları da ayrıca görüntüleyerek kontrol altında tutabiliriz. Bu amaçla kullanabileceğimiz zaman parametrelerinden modified ve created için şöyle örnekler oluşturabiliriz.

find / -type f -mtime 5
find / -type f -ctime 5

-mtime düzenleme, -ctime ise oluşturma bağlamında arama işlemleri yürütülmesini sağlayacaktır. -type ile dosya (f) ve dizin (d) belirterek arama sonucunun daha spesifik bir şekilde dönmesini sağlayabiliriz. Ayrıca, zaman tanımlama işlemini çoklu bir şekilde de gerçekleştirmek mümkün.

find / -type f -mtime +5 -mtime -15

Yukarıdaki komut bize 5-15 gün arasında değişikliğe uğramış dosyaları döndürecektir. Evet, oluşturma/düzenleme tarihlerine ve erişim izinlere göre dosya ve klasörleri takip edebiliyoruz. O halde gerekli işlemler sürecinde yaptığımız değişiklikleri hızlı bir şekilde olması gereken hallerine çevirip çalışma sürecimizi sonlandırabiliriz.

find . -type d -perm 777 -exec chmod 755 {} \;
find . -type f -perm 777 -exec chmod 644 {} \;

Yukarıdaki kod dizindeki dosyalar arasından 777 iznini sahip olanları 755 ile düzenleyip bu işlemden etkilenen dosyaların ismini döndürecektir. İzinler ve erişimlerin yanı sıra belirli durumlara göre dosyalar bulup bu dosyalar üzerinden de işlemler gerçekleştirebiliriz. Örneğin, içeriğinde 127.0.0.1 olan *.log uzantılı dosyaları ilgili içerikler ve dosya ismiyle birlikte listeleyelim3.

find . -name "*.log" -exec echo  {} \; -exec grep 127.0.0.1 {} \;

Son örnekte yer alan komut sayesinde ismi olarak apache içeren klasörler arasından ilk eşleşeni bulabiliriz ve bu komutu yukarıdaki izinler, erişimler, düzenleme ve oluşturma tarihleri, boşluk-doluluk gibi diğer bir çok parametre ve opsiyonla birlikte geliştirebiliriz4.

find . -maxdepth 1 -type d -name '*apache*' -print -quit

Son olarak da, belirli bir dizindeki *.png uzantılı dosyaların cwebp komutu ile *.webp uzantılı kopyalarını oluşturalım.

find ./ -type f -name '*.png' -exec sh -c 'cwebp -q 75 $1 -o "${1%.png}.webp"' _ {} \;

find ile ilgili daha detaylı bilgi için man find komutunu kullanabilirsiniz.