मैं ऐसी फाइलें ढूंढना चाहता हूं जो एक विशेष उपयोगकर्ता नहीं पढ़ पाएगा।
मान लें कि उपयोगकर्ता नाम "user123" है और वे "user123" नामक समूह में हैं। मैं उन फ़ाइलों को ढूंढना चाहता हूं, अगर वे user123 के स्वामित्व में हैं, तो उनके पास u + r है; यदि यह विफल रहता है कि फ़ाइल समूह का उपयोगकर्ता नाम है तो उस पर g + r होना चाहिए; विफल रहा है कि यह ओ + आर पर हो सकता है।
चूंकि जीएनयू में "-अर्थ्य" है, इसलिए मैं ऐसा कर सकता था:
sudo -u user123 find /start ! -readable -ls
हालाँकि इस प्रक्रिया को एक उपयोगकर्ता द्वारा चलाना पड़ता है जिसमें सुडो एक्सेस नहीं है। इसलिए II ने यह कोशिश की: (यह ओ + आर की जांच नहीं करता है लेकिन यह इस बिंदु पर महत्वपूर्ण नहीं है)
find /start \( -user user123 ! -perm -u=r \) -o \( -group user123 ! -perm -g=r \) -ls
लेकिन यह इस फ़ाइल को सूचीबद्ध करता है:
272118 4 -rw------- 1 user123 user123 3243 Jul 3 19:50 /start/blah/blah/file.txt
यह फ़ाइल एकमात्र ऐसी फ़ाइल है जिसके /start
स्वामित्व में उपयोगकर्ता नाम g=r
बंद है। यह ऐसा लगता है जैसे खोज के -u=r
रूप में व्याख्या कर रहा है -g=r
।
मैंने तर्क को उलटने की कोशिश करने का फैसला किया और इसके बजाय परीक्षण not ( truth )
किया:
find /etc/puppet ! \( \( -user puppet -perm -u=r \) -o \( -group puppet -perm -g=r \) -o \( -perm -o=r \) \) -ls
यह काम करता है!
मूल find
असफल क्यों हुआ ? क्या यह एक बग find
(असंभावित) है या तर्क गलत है?
अपडेट: मेरे पास तर्क गलत था। जैसा कि नीचे बताया गया है, जब से! (ए || बी। सी।) == (! & A! & B! B &&! C) ये दो समतुल्य कथन हैं:
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
मेरा लक्ष्य दो बार उपयोगकर्ता / समूह का परीक्षण करना नहीं था। मुझे वास्तव में जरूरत है कि एक और अधिक जटिल है अगर-तब-और संरचना, जो शायद केवल तभी संभव होगी जब एक -x ऑपरेटर था। मैं एक xor का निर्माण कर सकता हूं और / या नहीं, लेकिन यह ऊपर दिए गए दो समाधानों से अधिक जटिल होगा।
puppet
इसके साथ एक फ़ाइल तक पहुंच होगी--wxrwxrwx puppet puppet
।