একটি নির্দিষ্ট ব্যবহারকারীর দ্বারা লিখিত সমস্ত ফাইল এবং ডিরেক্টরিগুলি কীভাবে খুঁজে পাব?


10

লিনাক্সের অধীনে, আমি কীভাবে কোনও নির্দিষ্ট ব্যবহারকারীর দ্বারা লিখিত (বা, আসলে, লিখনযোগ্য নয়) সমস্ত ফাইল এবং ডিরেক্টরিগুলি খুঁজে পেতে পারি?

সম্পাদনা: স্পষ্ট করার জন্য, আমি বলতে চাইছি কোনও নির্দিষ্ট সাবডিরের অধীনে, সিস্টেমভিত নয়। এবং হ্যাঁ, এর অর্থ ব্যবহারকারী, গোষ্ঠী এবং বিশ্ব লিখনযোগ্যতার সমস্ত অনুমতি এবং সংমিশ্রণ যা সেই ব্যবহারকারীকে লিখতে দেয়। প্রশ্নটি শব্দার্থবিহীনভাবে কী জড়িত তা আমি জানি, আমি এই ফাইলগুলির একটি তালিকা পাওয়ার জন্য এক বা কয়েকটি লাইনার কার্যকর করার আশা করছিলাম।


ঠিক আছে, উত্তরের জন্য প্রত্যেককে ধন্যবাদ। আমি গুগলের মাধ্যমে ইতিমধ্যে "অনুসন্ধান" সমাধানটি খুঁজে পেয়েছি, তবে ভাবছিলাম যে কোনও প্রদত্ত ব্যবহারকারীর কাছে এটি সাধারণভাবে প্রয়োগ করার কোনও উপায় আছে কিনা। দেখে মনে হচ্ছে যে ব্যবহারকারী হিসাবে মামলা করা ছাড়া আর কোনও উপায় নেই, তারপরে ফাইন্ড কমান্ডটি চালান - যদি না অন্য কেউ চিমে না থাকে? আগামীকাল আরও কিছু ভাল প্রতিক্রিয়া ব্যতীত আমি ওপিডির উত্তরটি গ্রহণ করব।
পিস্তোস

উত্তর:


18

'ফাইন্ড' কমান্ডটি ব্যবহার করুন যদি আপনার সন্ধানের সংস্করণ 4.3.0 বা আরও বেশি ইনস্টল করা থাকে:

বর্তমান ডিরেক্টরিতে থাকা সমস্ত ফাইলের জন্য যা বর্তমান ব্যবহারকারীর দ্বারা লিখিত হয়:

find . -writable

বর্তমান ডিরেক্টরি অধীন সমস্ত ফাইলের জন্য যা বর্তমান ব্যবহারকারীর দ্বারা লিখিত নয়:

find . ! -writable

ম্যান পৃষ্ঠা অনুসারে:

এই পরীক্ষাটি অ্যাক্সেস (2) সিস্টেম কল ব্যবহার করে এবং তাই এনএফএস সার্ভারগুলি দ্বারা বোকা বানানো যেতে পারে যা ইউআইডি ম্যাপিং (বা রুট-স্কোয়াশিং) করে, কারণ অনেকগুলি সিস্টেম ক্লায়েন্টের কার্নেলে অ্যাক্সেস (2) প্রয়োগ করে এবং তাই এটি ব্যবহার করতে পারে না সার্ভারে রাখা ইউআইডি ম্যাপিংয়ের তথ্য।


4
আরও ভেবেছি যে আমি আরও সংশোধন করার জন্য উল্লেখ করব: আমার আসলে এমন একটি ব্যবহারকারীর সাথে এটি করতে হয়েছিল যার লগইন শেল (/ sbin / nologin) নেই। এটি করার জন্য, আমি সুডো ব্যবহার করেছি, এটি: সুদো-আপনি কেউই খুঁজে পান না। ! -লিখনযোগ্য
পিস্তোস

এটি প্রশ্নের উত্তর দেয় না এবং তাই গ্রহণযোগ্য উত্তর হওয়া উচিত নয়। প্রশ্নটি "একটি নির্দিষ্ট ব্যবহারকারী" সম্পর্কে ছিল, "বর্তমান ব্যবহারকারী" সম্পর্কে নয়।
jlh

এবং অনুমতি লুকাতে ত্রুটিগুলি যুক্ত 2>&1 | grep -v "Permission denied"হতে হবেfind . -writable 2>&1 | grep -v "Permission denied"
iolsmit ২

3

আপনি এর writable.plমতো পার্ল স্ক্রিপ্ট তৈরি করতে পারেন :

#!/usr/bin/perl

use strict;

sub recurse {
  my $path = shift;
  my @files = glob "$path/{*,.*}";
  for my $file (@files) {
    if (-d $file) {
      if ($file !~ /\/\.$/ && $file !~ /\/\.\.$/) {
        recurse($file);
      }
    } else {
      print "$file\n" if -w $file;
    }
  }
}

print "Writable files for " . getlogin() . "\n";
recurse($ARGV[0]);

এবং তারপরে মূল হিসাবে এই স্ক্রিপ্টটি ব্যবহার করুন:

su USERNAME -c "./writable.pl DIRECTORY"

পূরণ করা USERNAMEএবং DIRECTORYযথাযথ হিসাবে


চমৎকার। ধন্যবাদ. OS ARGV [0] CentOS 6.2 এ ব্যাশ শেলের মধ্যে খালি হিসাবে নেওয়া হয়। নিশ্চিত কেন। আমি কোনও ফাইল থেকে পড়তে স্ক্রিপ্টটি পরিবর্তন করেছি।
দুপুর

1

আপনি কি নিশ্চিত যে এটিই যে প্রশ্নটি জিজ্ঞাসা করতে চান তা নিশ্চিত?

"আমি এক্স অ্যাকাউন্টে যে সমস্ত ফাইল লিখতে পারে সেগুলি দেখতে চাই" বলতে বলতে ইউ + ডাব্লু, তাদের যে কোনও গ্রুপের মালিকানাধীন প্রতিটি ফাইলই সেট ++ সেট করে, এবং প্রতিটি ফাইল ওয়ার্ল্ড লিখিত (ও +) W)।

লিখনযোগ্য নয় আরও কঠিন হতে হবে। আপনি প্রতিটি ফাইলের একটি তালিকা তৈরি করার চেয়ে আরও ভাল হন, তারপরে তারা লিখতে পারেন এমনগুলি বাদ দিন।


3
সিস্টেমটিতে এসিএল সক্ষম থাকলে অবশ্যই এটি আরও জটিল enabled
জোড়াদেছ

2
চ্যাটার + আই ফাইলগুলি গণনা করা হচ্ছে না
ম্যাট সিমন্স

1

আপনি যদি ভিতরে প্রবেশ করেন তবে এডির উত্তরের জন্য:

my $path = quotemeta shift;

তারপরে এটি ডিরেক্টরিতে তাদের নামে ফাঁকা স্থানগুলিও অনুসরণ করবে।


1

আমি এই উদাহরণে স্পার্পের পতাকাটির জন্য gnu অনুসন্ধান বাক্য ব্যবহার করব:

মূলত - আপনি যদি এসিএলগুলির মতো ভৌতিক এক্সটেনশানগুলি ছুঁড়ে ফেলে থাকেন তবে আপনার কাছে 3 টি চকি - মালিক, গোষ্ঠী এবং "অন্যান্য" রাইটিং অ্যাক্সেস রয়েছে। লুপের জন্য একটি কাজের মতো শোনাচ্ছে।

এটি অপ্টিমাইজ করার জন্য প্রচুর জায়গা রয়েছে তবে আমি এটিকে অন্য কারও কাছে ছেড়ে দেব ... এছাড়াও, ফাইল সিস্টেমগুলি খুঁজে বের করার ও অতিক্রম করার সমস্ত বিবরণ এবং এই ধরণের বাজে কথা আমি কখনই মনে করতে পারি না। এছাড়াও, নিশ্চিত করুন যে গ্রুপগুলির আউটপুট আমার টেস্ট লিনাক্স সিস্টেমের মতো

$ groups snoopy
snoopy : snoopy doghouse linus admin wwI woodstock
$

আপনি কীভাবে কোনও ব্যবহারকারীর দ্বারা লিখিত ফাইলগুলি খুঁজে পেতে চান তার এটি মোটামুটি উদাহরণ। এটি যখন কোনও ব্যবহারকারীর মতো চলবে তবে আপনি যদি এটি অ-uid0 ব্যবহারকারী হিসাবে চালান তবে আপনি কেবল সেই ডিরেক্টরিগুলিতে সন্ধান করতে পারেন যা স্ক্রিপ্টটি চালাচ্ছে ব্যবহারকারী উভয়কেই অনুমতি পড়তে এবং কার্যকর করতে পারে।

#!/bin/sh

user=snoopy

directory=/

# first files owned by the user and writable
find "$directory" -follow -user "$user" -perm /u+w 2> /dev/null


# now for files that are group writable with the user in that group
for groups in $(groups snoopy 2> /dev/null | cut -f2 -d:)
do
  find "$directory" -follow -group "$user" -perm /g+w 2> /dev/null
done

# now for everything else
find "$directory" -follow -perm /o+w 2> /dev/null

1

এই কমান্ডটিতে সমস্ত লিখনযোগ্য ডিরেক্টরিগুলি সন্ধান করা উচিত, আপনি যেমন দেখতে চান ঠিক তেমন অনুমতিগুলি পরিবর্তন করতে পারেন:

find / -type d \( -perm -g+w -or -perm -o+w \) -exec ls -adl {} \;

0

আমি নিশ্চিত না যে এটি সর্বোত্তম উপায় কিনা তবে আপনি যা চান তা করা উচিত:

for file in *
do 
    if [ -w $file ] ; then 
        echo $file
    fi
done

কীটি অবশ্যই -wস্যুইচ-এ থাকে, যা এড়ানো যায়

সম্পাদনা: এ সম্পর্কে আরও চিন্তাভাবনা করে, এই স্ক্রিপ্টটি বর্তমান ব্যবহারকারীর দ্বারা যা লেখার যোগ্য তা মুদ্রণ করে, এটি অবশ্যই কিছু প্রদত্ত ব্যবহারকারীর পক্ষে কাজ করবে না।


অবশ্যই, আপনাকে এই স্ক্রিপ্টটি সেই ব্যবহারকারী হিসাবে চালাতে হবে।
এডি

হাঁ, মূর্ত ...
Slartibartfast

আপনি এই পার্ল কিভাবে লিখবেন?
ইলেওন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.