আমার কাছে কোনও নির্দিষ্ট কমান্ড চালানোর অনুমতি থাকলে আমি কীভাবে বলতে পারি?


18

সাধারণ ব্যবহারকারী হিসাবে আমার কমান্ড দেওয়ার অধিকার আছে কিনা তা চিহ্নিত করার কোনও উপায় আছে কি?

উদাহরণ স্বরূপ; আমি আসলে যাচাই করার আগে শাটডাউন কমান্ড জারি করার অধিকার আমার আছে কিনা তা আমি খতিয়ে দেখতে চাই।

নিম্নলিখিত কমান্ডগুলির মত কিছু

-> doIhaveRightToIssue shutdown
-> Yes/No

4
সোজা-সামনের উপায় হ'ল চেষ্টা করা (ছাড়া sudo) এবং খুঁজে বের করা। পাঠ্য মোড কমান্ডগুলির প্রয়োজন হতে পারে sudoএবং গ্রাফিকাল কমান্ডের প্রয়োজন হতে পারে gksudo। কমান্ডটি কোথায় ইনস্টল করা আছে তাও আপনি পরীক্ষা করতে পারেন which command। যদি হয় /sbinবা /usr/sbin- আপনি আশা করতে পারেন যে কমান্ডটি প্রয়োজন sudoবা gksudo
সুডোডাস

উত্তর:


26

সবচেয়ে সহজ কেসটি বাইনারি এক্সিকিউটেবলের মতো gzip। প্রথমত, আমরা নির্বাহযোগ্যকে সনাক্ত করি:

$ which gzip
/bin/gzip

তারপরে আমরা এই ফাইলটির বৈশিষ্ট্যগুলি দেখি:

$ ls -l /bin/gzip
-rwxr-xr-x 1 root root 98240 oct 27  2014 /bin/gzip

তিনটি এক্স আমাদের জানান যে ফাইলটি মালিক (প্রথম root) বা গ্রুপের অন্য কেউ root(দ্বিতীয় root) এবং অন্য কেউ যথাক্রমে সম্পাদন করতে পারেন । সুতরাং আপনার ব্যবহারকারীকে প্রোগ্রামটি কার্যকর করার অনুমতি দেওয়া হয়েছে।

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

তারপরে এখানে বিশেষ কেস রয়েছে shutdown- এটি আসলে একটি মূল ইউটিলিটির সাথে একটি প্রতীকী লিঙ্ক systemctl, এটির কল করার অনুমতি রয়েছে কিনা তা নির্ধারণ করার জন্য এটির নিজস্ব ব্যবস্থা আছে এবং উদাহরণস্বরূপ, আপনার sudo পাসওয়ার্ড জিজ্ঞাসা করার জন্য ।

( whichকমান্ডটি সম্পর্কে : এটি আপনাকে কার্যকর করার অনুমতিপ্রাপ্ত আপনার $ PATH এ এক্সিকিউটেবলগুলি সনাক্ত করে এবং tells PATH তে একই নামের সাথে যদি আপনার একাধিক থাকে তবে আপনি কোনটি ব্যবহার করবেন তা আপনাকে জানায় It এটি কেবল কোনও কার্যকর কার্যকর হিসাবে চিহ্নিত করে না I অনুমতিটি কোথায় সন্ধান করতে হবে তার উদাহরণ হিসাবে এটি এখানে ব্যবহার করুন whichthe কার্যকর কার্যকর হিসাবে ইতিমধ্যে এটি খুঁজে পাওয়া যায় যা ইঙ্গিত দেয় যে আপনার কাছে এটি কার্যকর করার অনুমতি রয়েছে))


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

অবশ্যই, এমন কিছু ইউটিলিটি রয়েছে যা আপনি ব্যবহার করতে পারেন এমন একটি "ড্রাই-রান" বা "সিমুলেট" পতাকা সরবরাহ করে।
জোস

4
which$PATHভেরিয়েবল যুক্ত ডিরেক্টরিগুলির মধ্যে একটিতে থাকা ফাইলগুলির জন্য কমান্ড যথেষ্ট হওয়া উচিত । উদাহরণস্বরূপ, করা sudo chmod 700 /bin/nanoবা আউটপুট উত্পাদন করার sudo chmod 744 nanoকারণ whichনেই। স্থানীয় স্ক্রিপ্টগুলির জন্য, এটি PATHডিরেক্টরিগুলির একের বাইরে অন্য কোথাও বাস করে ls -lবা statকলগুলি কৌশলটি করবে। উত্তম উত্তর, তবে দয়া করে আপনার পোস্টে এই তথ্যটি যুক্ত করুন
সের্গি কলডায়াজনি

সার্জ যা বলেছিল তা বন্ধ করে দেওয়া, উদাহরণস্বরূপ stat -c '%a' /bin/gzipপাওয়ার মতো কিছু ব্যবহার করুন 755
এটি

21

সাথে sudo:

$ sudo -l shutdown
/sbin/shutdown

আমার অনুমতি sudoনা থাকলে কমান্ড না দেখিয়ে অভিযোগ করবেন।

পোলকিট দিয়ে আপনি যে ক্রিয়াটি চালাতে চান তা পরীক্ষা করে দেখুন:

$ pkcheck --action-id org.freedesktop.login1.power-off --process $$ -u --enable-internal-agent && echo yes
polkit\56temporary_authorization_id=tmpauthz1
yes

প্রাসঙ্গিক ক্রিয়া সন্ধান করা একটি পৃথক প্রশ্ন।


সুডোর সমস্যা হ'ল আমি সিস্টেমে সুডোর নই। তার কারণেই, আমি সত্যিই কোনও আদেশ দেওয়ার আগে সতর্ক হওয়ার চেষ্টা করি।
বার্নহার্ড কলবি

4
@ বার্নহার্ড কলববি আপনি sudoer না sudo -lহলেও এমনকি আপনি নিরাপদে চালাতে পারবেন - এটি পুরো বিষয় -l- আপনাকে sudo দিয়ে কোনও কমান্ড চালাতে পারবেন কিনা তা জানাতে।
মারু

ধন্যবাদ (+1), আমি এটি জানতাম না। আমি আমার পিসি পাওয়ার সাথে সাথেই আপনার সমাধানটি চেষ্টা করব।
বার্নহার্ড কলবি

8

তুমি ব্যবহার করতে পার:

test -x $(command -v shutdown) && echo yes || echo no

command -v shutdownshutdownকমান্ডের পথে ফিরে আসে । test -xসেই পথটি আপনার জন্য কার্যকর হয় কিনা তা পরীক্ষা করে।

মনে রাখবেন যে আপনি কমান্ডটি কার্যকর করতে সক্ষম হলেও, কমান্ডটি এখনও ব্যর্থ হতে পারে কারণ এটি কার্য সম্পাদনের জন্য পর্যাপ্ত অনুমতি নেই। এটি ইউনিক্স-টাইপ সিস্টেমে সাধারণ ঘটনা, যা কোনও কমান্ড কার্যকর করতে অ্যাক্সেসকে সীমাবদ্ধ না করে প্রোগ্রামগুলি যে কাজগুলি করতে পারে তার পরিবর্তে অ্যাক্সেসকে সীমাবদ্ধ করে।


যেমন কি alias shutdown="shutdown now"?
দিমিত্রি গ্রিগরিয়েভ

এলিয়াস সহ সমস্যাটি এড়াতে কেউ ব্যবহার করতে পারেন $(which shutdown)বা $(shopt -u expand_aliases && command -v shutdown)। যদিও এই সমস্যাটি কেবল ইন্টারেক্টিভ মোডে উপস্থিত হয়।
ডেভিড ফোস্টার 20

5

ঠিক আছে এটি সময়ে কিছুটা কঠিন হতে পারে ...

প্রথমত, এর সাথে অনুমতিগুলি দেখুন ls -l...

 owngrpotr ব্যবহারকারী গ্রুপ কমান্ড
-rwxr-xr-x মূল বিন ভিম

যদি আখেরাতের / তৃতীয় ত্রয়ী একটি পেয়েছিলাম এক্স ( "নির্বাহ করতে পারেন") তা, তারপর অন্যদের এবং তার মানে আপনি - - এটা নির্বাহ করতে পারেন ... যদি একটি শেল-স্ক্রিপ্ট বা ওই জাতীয় কিছু, তারপর অন্যদের প্রয়োজন হবে ( " ") পড়তে পারে।

তাহলে অন্যদের চালানো-অনুমতি কিন্তু পেয়েছিলাম না গ্রুপ নয়, তাহলে আপনি এটি নির্বাহ করতে পারেন যদি আপনি একজন সদস্য হন (দ্বিতীয় ত্রয়ী) গ্রুপ - উপর উদাহরণে, বিন । উদাহরণস্বরূপ, চাকা- গোষ্ঠীটি প্রায়শই কে চালাতে পারে তা সীমাবদ্ধ করতে ব্যবহৃত হয় su, সুতরাং কেবলমাত্র এই গোষ্ঠীর অন্তর্ভুক্ত ব্যবহারকারীরা এটিকে সম্পাদন করতে পারেন । আর একটি উদাহরণ এরস ডেভলপমেন্টের জন্য একটি গ্রুপ তৈরি করা এবং সি-সংকলক এবং এই জাতীয় সরঞ্জামগুলির কার্যকরকরণ সীমাবদ্ধ করে।

তাহলে সেখানে একটি trailing + + গত ত্রয়ী পর এটার মানে হল যে AccessControllLists ব্যবহার করা হয় - এই অতিরিক্ত ব্যবহারকারী এবং গোষ্ঠীতে সঞ্চালনের স্বত্বলিপি যোগ করতে পারেন।

+++

আপনি কমান্ডটি কার্যকর করতে সক্ষম হলেও, কমান্ডটি ফাইল, ডিরেক্টরি এবং / অথবা আপনার যে অ্যাক্সেস নেই সেগুলি অ্যাক্সেসের উপর নির্ভর করতে পারে - এটি আপনি করতে সক্ষম হবেন তা সীমাবদ্ধ করতে পারে (আপনি সক্ষম নাও হতে পারেন) কিছু করতে)।

অবশেষে আপনাকে কমান্ড কার্যকর করার অনুমতি দেওয়া হলেও কমান্ড নিজেই আপনার পরিচয় যাচাই করতে পারে এবং আপনি কোনও কনফিগার ফাইলে তালিকাভুক্ত না হয়ে থাকেন বা নির্দিষ্ট ব্যবহারকারী (উদাহরণস্বরূপ রুট ) না থাকলে আপনাকে এটিকে ব্যবহার করতে অস্বীকার করতে পারেন । উদাহরণস্বরূপ mountকমান্ড শুধুমাত্র অনুমতি দেবে রুট যেকোনো ডিভাইস মাউন্ট - স্বাভাবিক ব্যবহারকারীদের শুধুমাত্র যেমন হিসাবে তালিকাভুক্ত ডিভাইসগুলি / etc / fstab ফাইলের ... যা কেউই হতে পারে মাউন্ট করতে অনুমতি দেওয়া হয়। আপনি যদি রুট না হন এবং কিছু মাউন্ট করার চেষ্টা করেন, mountঅভিযোগ করবেন এবং ডিভাইসটিকে মাউন্ট করতে অস্বীকার করবেন। অন্য উদাহরণটি হ'ল sudo, এটি যে কারও জন্য চলবে তবে কেবলমাত্র / ইত্যাদি / সূডারে তালিকাভুক্ত ব্যবহারকারীদেরই জিনিসগুলি মূল হিসাবে চালানোর অনুমতি দেওয়া হবে ।


3

ব্যবহার which, type, commandইত্যাদি বাস্তবসম্মত সমাধান কোন ক্ষেত্রে 99% কাজ করবে, কিন্তু হতে 100% নিশ্চিত করুন যে আপনি নিজে আপনার মধ্যে তালিকাভুক্ত প্রত্যেক এক্সিকিউটেবল ডিরেক্টরির পরিদর্শন করতে হবে হয় $PATH। অনেকগুলি শেল (সহ bash) আপনার কমান্ডের প্রেরণা প্রবেশের সাথে উপস্থাপন করবে $PATHএবং সেগুলি সফল না হওয়া পর্যন্ত এই ফাইলগুলি বারবার কার্যকর করার চেষ্টা করবে। যেহেতু whichকমান্ডটি সত্যই কার্যকর করতে পারে না, তাই আপনার শেলটি আসলেই কোন ফাইলটি বেছে নেবে তা অনুমান করা অসম্ভব।

উদাহরণস্বরূপ, আমার কাছে ধারণা করুন যে PATH=/opt/arm/bin:/binদুটি এক্সিকিউটেবল ফাইল যুক্ত ডিরেক্টরি রয়েছে তবে বিভিন্ন আর্কিটেকচারের জন্য। দৌড়াতে which ddফিরে আসবে /opt/arm/bin/dd(ধরে নিলাম আমার এটি চালানোর অনুমতি রয়েছে), যেহেতু সেই প্রবেশটি প্রথম আসে। যাইহোক, যখন আমি ddআমার শেলটি চালাব, চালানো /bin/ddহবে, কারণ /opt/arm/bin/ddএটি চালাতে ব্যর্থ হবে। একই পরিস্থিতিতে দুর্নীতিগ্রস্থ বাইনারি, নিখোঁজ লিবিস ইত্যাদির ক্ষেত্রেও ঘটতে পারে শেষ পর্যন্ত, চেষ্টা করার বাইরে আপনি কোনও কমান্ড কার্যকর করতে সক্ষম হবেন কিনা তা জানার কোনও নিশ্চিত উপায় নেই।

আরেকটি দিক হ'ল আপনি "অনুমতি থাকা" বিবেচনা করছেন। একজন ব্যবহারকারী হিসাবে আমার কাছে চালনার অনুমতি রয়েছে rm ~/fileতবে তা নয় rm /root/file। আবার, ম্যানুয়াল পরিদর্শন ছাড়াই, বা আদেশটি প্রকাশ এবং ফলাফল পর্যবেক্ষণ ছাড়া এটি জানার কোনও সাধারণ উপায় নেই।

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