su অপশন - অন্য ব্যবহারকারী হিসাবে কমান্ড চলমান


75

আমি ভাবছিলাম কীভাবে কোনও স্ক্রিপ্ট থেকে অন্য ব্যবহারকারী হিসাবে একটি কমান্ড চালাবেন।

আমি স্ক্রিপ্টের মালিককে মূল হিসাবে সেট করেছি। হডসন ব্যবহারকারী হিসাবে কমান্ডটি চালানোর জন্য আমার কাছে নিম্নলিখিত কমান্ডটি স্ক্রিপ্টের মধ্যে চলছে:

su -c command hudson

এটি কি সঠিক বাক্য গঠন?


অন্যান্য গুগলারের জন্য: কিছু ব্যবহারকারীর উদ্দেশ্যে এই ক্ষমতাটি অক্ষম থাকতে পারে। আপনি চালাতে পারেন sudo cat /etc/passwd | grep user-abc। যদি আপনি এই জাতীয় কিছু দেখতে পান: user-abc:x:994:994::/home/user-abc:/bin/falseতবে এটি কার্যকর হবে না। এটি কারণ শেষ অংশ " /bin/false" এর অর্থ that ব্যবহারকারীর জন্য কোনও শেল নেই।
আলেকজান্ডার বার্ড

উত্তর:


78

হ্যাঁ. এখানে --help:

$ su --help
Usage: su [options] [LOGIN]

Options:
  -c, --command COMMAND         pass COMMAND to the invoked shell
  -h, --help                    display this help message and exit
  -, -l, --login                make the shell a login shell
  -m, -p,
  --preserve-environment        do not reset environment variables, and
                                keep the same shell
  -s, --shell SHELL             use SHELL instead of the default in passwd

এবং কিছু পরীক্ষা (আমি অ্যাকাউন্টটির sudoপাসওয়ার্ড জানি না বলেই আমি ব্যবহার করেছি nobody)

$ sudo su -c whoami nobody
[sudo] password for oli: 
nobody

যখন আপনার কমান্ড আর্গুমেন্ট নেয় আপনার এটিকে উদ্ধৃত করা দরকার। যদি আপনি না করেন, অদ্ভুত জিনিস ঘটবে। এখানে আমি -as মধ্যে / হোম / অলি (অলি) একটি ডিরেক্টরি তৈরি করার চেষ্টা root- am ছাড়া পূর্ণ কমান্ড উদ্ধৃত:

# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'

এটি কেবল পতাকার mkdirমান হিসাবে পড়ে -cএবং এটি /home/oli/javaব্যবহারকারীর নাম হিসাবে ব্যবহার করার চেষ্টা করছে । যদি আমরা এটিকে উদ্ধৃত করি তবে এটি কেবল কার্যকর:

# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
  File: ‘/home/oli/java
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 811h/2065d  Inode: 5817025     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/     oli)   Gid: ( 1000/     oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
 Birth: -

52

দ্রষ্টব্য: "আমার কাছে স্ক্রিপ্টের মালিককে মূল হিসাবে সেট করা আছে" কিছুই করে না; আপনার যদি সেটুড বিট সেট থাকে তবে এটি এখনও কাজ করে না


ধরে নিই যে আপনি আসলে স্ক্রিপ্টটি মূল হিসাবে চালাচ্ছেন তবে আপনি ব্যবহার করতে পারেন sudosuমূলত ব্যবহারকারীদের স্যুইচিংয়ের জন্য, অন্যদিকে sudoব্যবহারকারী হিসাবে কমান্ড কার্যকর করার জন্য। -uপতাকা আপনি কোন ব্যবহারকারী কমান্ড হিসাবে চালানো উল্লেখ করতে দেয়:

sudo -u hudson command

1
অনেক সময় আমি (সিস্টেমে যেখানে sudoers ভাল-শাসিত হয়) সম্মুখীন ব্যবহার করার চেষ্টা করে sudoআপনি শুধুমাত্র এই পেতে পারেন: root is not in the sudoers file। যা su - <username> -c "command to run"একমাত্র বিকল্প করে।
রম 237

অ-তুচ্ছ কমান্ড কার্যকর করার সময় উদ্ধৃতিগুলির প্রয়োজন হয় না। ( sudo -u kilgore mv this that
উদা।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.