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.
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.