লগ আউট না করে লিনাক্স ব্যবহারকারীর গ্রুপ অ্যাসাইনমেন্টটি পুনরায় লোড করুন


348

ব্যবহারকারীর মাধ্যমিক গোষ্ঠী তালিকা ব্যবহার করে:

# usermod -G <grouplist> <user>

সমস্ত চলমান সেশন লগ আউট না করে এই গ্রুপ অ্যাসাইনমেন্টটি কার্যকর করতে বাধ্য করা কি সম্ভব?

এটি এমন পরিস্থিতিতে বেশ কার্যকর হবে যেখানে স্ক্রিন সেশনটি অনেকগুলি চলমান শেল সহ উপস্থিত থাকে, কারণ গোষ্ঠী অ্যাসাইনমেন্ট কার্যকর করার জন্য পুরো সেশনটি মূলত নষ্ট করা প্রয়োজন।

আমি মনে করি আমি newgrpকমান্ডটি ব্যবহার করে একটি চলমান শেলের মধ্যে ব্যবহারকারীর প্রাথমিক গোষ্ঠীটি পরিবর্তন করতে পারি - এমন কোনও বিকল্প আছে যা গৌণ গ্রুপগুলির জন্য কাজ করবে?

আদর্শভাবে, আমি এমন কিছু চাই যা প্রতিটি শেলটিতে প্রত্যেকের হাতে ম্যানুয়ালি চালিত না হয়ে কার্যকর হয় তবে এটি ব্যর্থ হতে পারে, স্ক্রিনকে প্রতিটি ক্ষেত্রে একই কমান্ড কার্যকর করতে বাধ্য করা।


আমি জানি যে কমপক্ষে কিছু উইন্ডো / সেশন ম্যানেজারের পক্ষে এটি করা সম্ভব যে সেশনটি নতুন গ্রুপটিকে বেছে নেয় এবং এটি মেনু, প্যানেল বোতাম বা যে কোনও কিছু থেকে শুরু হওয়া কোনও নতুন প্রক্রিয়াতে উপলব্ধ। আমি এখনই আবার এটি সন্ধানের জন্য এখানে এসেছি, সুতরাং এখন কীভাবে এটি করা যায় তা বলতে পারি না এবং এটি সম্ভবত উইন্ডো ম্যানেজারের কাছে নির্দিষ্ট।
mc0e

উত্তর:


205

মারাত্মকভাবে হ্যাকি, তবে আপনি newgrpএকটি নির্দিষ্ট গোষ্ঠীর জন্য এটি অর্জন করতে দুটি স্তর ব্যবহার করতে পারেন :

id -g

... আপনাকে বর্তমান প্রাথমিক গ্রুপ আইডি দেবে। আমরা orig_groupএই উদাহরণের উদ্দেশ্যে এটি কল করব । তারপর:

newgrp <new group name>

... আপনাকে প্রাথমিক হিসাবে সেই গোষ্ঠীতে স্যুইচ করবে এবং এটিকে groupsবা এর দ্বারা ফিরে আসা গোষ্ঠীর তালিকায় যুক্ত করবে id -G। এখন, আরও:

newgrp <orig_group>

... আপনি একটি শেল পাবেন যাতে আপনি নতুন গোষ্ঠী দেখতে পাবেন এবং প্রাথমিকটি আসলটি।

এটি ভয়াবহ এবং এটি আপনাকে কেবল একবারে একটি গ্রুপ যুক্ত করবে, তবে এটি আমার বেশিরভাগ এক্স সেশনে লগ-আউট না করে গ্রুপ যোগ করতে বেশ কয়েকবার সাহায্য করেছে (যেমন, কোনও ব্যবহারকারীর সাথে ফিউজকে গ্রুপ হিসাবে যুক্ত করা যাতে sshfs কাজ করবে)।

সম্পাদনা করুন: এটির জন্য আপনাকে নিজের পাসওয়ার্ডও টাইপ করতে suহবে না, যা হবে।


6
ভাল কৌশল, আমি এটি পছন্দ করি
সাইমন 19

1
ফেডোরার newgrp $USERপরিবর্তে আমাকে করতে হয়েছিল newgrp <orig_group>। তার মানে আমার আমার প্রাথমিক প্রাথমিক গোষ্ঠী আইডিটি খুঁজে বের করতে হয়নি, সুতরাং এটি এই সমাধানের চেয়ে আরও সহজ।
রিচার্ড টার্নার

2
আমি এটি করতে যথেষ্ট ছিল newgrp <new group name>। এটি ছিল উবুন্টু 14.04
এডওয়ার্ড ফালক

4
@ এডওয়ার্ডফাল্ক ঠিক আছে, তবে আপনি সেই গোষ্ঠীটিকে আপনার প্রাথমিক হিসাবে ছেড়ে যেতে চান না (সম্ভবত) না
মিমোরালিয়া

4
মনে রাখবেন যে, প্রতিটি newgrpএকটি নতুন শেল তৈরি করে, তাই আপনি যখন সম্পূর্ণরূপে আপনার সেশন থেকে প্রস্থান আপনি "প্রস্থান প্রস্থান প্রস্থান" (সব পথ নামা করতে প্রয়োজন প্রয়োজন:
jwd

370

শেলের ভিতরে থেকে আপনি নিম্নলিখিত কমান্ডটি জারি করতে পারেন

su - $USER

আইডি এখন নতুন গোষ্ঠীর তালিকা তৈরি করবে:

id

3
আমি মনে করি এটি বেশিরভাগ ক্ষেত্রে এটি সেরা পদ্ধতির, তবে আসল পোস্টারটি স্ক্রিন সেশনের মধ্যে একাধিক শেল আপডেট করতে চায়নি। এই সমাধানটি প্রতিটি শেল থেকে করা হত।
অ্যাড্রিয়ান রত্নপালা

3
দুর্দান্ত কৌশল, দুর্দান্ত কাজ!
Genpfault

4
মূল সমাধানটি কেবল পর্দার মধ্যে একটি একক শেল সেশন ঠিক করতে পারে। আমি কেবল এটি পরীক্ষা করেছি tested এই সমাধানটি কাজ করার কারণ হ'ল আপনি আসল পরিবেশ থেকে উত্তরাধিকারী হওয়ার পরিবর্তে সম্পূর্ণ নতুন অধিবেশন তৈরি করছেন।
আতঙ্ক

4
এটি সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত। ভাল কৌশল, ধন্যবাদ!
dotancohen

2
এটির জন্য আপনাকে একটি পাসওয়ার্ড টাইপ করা দরকার, এটি যদি আপনি প্রচুর সেশনে করার চেষ্টা করছেন তবে এটি বিশ্রী / অযাচিত হতে পারে।
লেগুওলাস 13

155

এই লিঙ্কটি থেকে এই নিফটি কৌশলটি দুর্দান্ত কাজ করে!

exec su -l $USER

আমি অনুভব করেছি যে প্রতিবারের মতো এটি কীভাবে করা যায় আমি ভুলে গিয়েছিলাম, গুগলে এটিই প্রথম লিঙ্ক।


14
ব্যবহারকারীকে সাবচেলে না রাখার জন্য +1; আপনি এটির মাধ্যমে যথারীতি লগআউট / প্রস্থান করতে পারবেন। এছাড়াও, যদি NOPASSWD: / etc / sudoers এ সেট করা থাকে, আপনি পরিবর্তে exec sudo su -l $USERপাসওয়ার্ডের জন্য অনুরোধ করা এড়াতে ব্যবহার করতে পারেন ।
ইভান এক্স

21
পরামর্শ দিন: আপনাকে একটি সুডো পাসওয়ার্ড জিজ্ঞাসা করা হবে। যদি আপনি এটি ভুল হয়ে থাকেন তবে আপনার টার্মিনালটি বন্ধ হয়ে যাবে।
টাইলার কলিয়ার

1
@TylerCollier ইভান করেনি উল্লেখNOPASSWD:
pepoluan

32

1. নতুন গ্রুপের সাথে লগ আউট না করে এবং আবার প্রবেশ না করে শেল নেওয়া Get

আপনি যদি কেবল একটি গোষ্ঠী যুক্ত করেন তবে আমি নিম্নলিখিতটি ব্যবহার করি:

exec sg <new group name> newgrp `id -gn`

এটি লেগুওলাসের দ্বি-স্তরের নিউগ্রিপ ট্রিকের একটি ভিন্নতা, তবে এটি এক লাইনে রয়েছে এবং আপনাকে নিজের প্রাথমিক গোষ্ঠীতে ম্যানুয়ালি প্রবেশ করতে হবে না।

sgnewgrp তবে নতুন গ্রুপ আইডি দিয়ে কার্যকর করার জন্য একটি আদেশ স্বীকার করছে। এর execঅর্থ হ'ল নতুন শেলটি বিদ্যমান শেলটি প্রতিস্থাপন করে, তাই আপনাকে দুবার "লগআউট" করতে হবে না।

Su ব্যবহারের বিপরীতে, আপনার পাসওয়ার্ড টাইপ করার দরকার নেই। এটি আপনার পরিবেশকেও সতেজ করে না (গোষ্ঠী যোগ করা ব্যতীত), সুতরাং আপনি আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি বজায় রাখুন ইত্যাদি

২. একটি সেশনে সমস্ত স্ক্রিন উইন্ডোতে কমান্ড কার্যকর করা

atপর্দায় কমান্ড যাই হোক না কেন উইন্ডোজ আপনাকে তা নির্দিষ্ট (নোট এই একটি স্ক্রিন কমান্ড, না একটি শেল কমান্ড) একটি কমান্ড রান।

বিদ্যমান বিদ্যমান স্ক্রিন সেশনে কমান্ড প্রেরণের জন্য আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"

idস্ক্রিন সেশনে চালিয়ে যাওয়ার জন্য ব্যাকটিকগুলি এড়াতে হবে এবং আপনার কমান্ডের শেষে স্ক্রিনটিকে 'এন্টার' চাপতে হবে তা লক্ষ করুন ।

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

  • যে কোনও অর্ধ-লিখিত কমান্ড থেকে মুক্তি পেতে, আপনি কমান্ডের শুরুতে "^ C" যুক্ত করতে পারেন।
  • ইমাস উইন্ডো ইত্যাদিতে কমান্ডটি চালনা এড়াতে আপনি উইন্ডো শিরোনাম ইত্যাদিতে ফিল্টার করতে `at 'বলতে পারেন (উপরের উদাহরণে, আমি" # "ব্যবহার করি যা সমস্ত উইন্ডোর সাথে মিলে যায়, তবে আপনি উইন্ডো শিরোনাম, ব্যবহারকারী দ্বারা ফিল্টার করতে পারেন) ইত্যাদি)।

নির্দিষ্ট উইন্ডোতে কমান্ডটি চালাতে (উইন্ডো নম্বর দ্বারা চিহ্নিত), নিম্নলিখিত ব্যবহার করুন:

screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"

দুর্দান্ত এক লাইনার এর অন্য পার্শ্ব-প্রতিক্রিয়া আছে বলে মনে হয় না, ধন্যবাদ!
সিরিল ডুচন-ডরিস


12

গোষ্ঠীগুলি সাধারণত লগইনে গণনা করা হয়, লগ আউট না করে এবং পুনরায় প্রবেশ না করে গোষ্ঠী গণনা পুনরায় করতে বাধ্য করার কোনও উপায় আমার জানা নেই।

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


সত্যই, আমি নিশ্চিত যে এটি সত্য নয় - আমি লিনাক্স বাক্সে এটি করার আগে একটি উপায় খুঁজে পেয়েছি। তবে আমার জীবনের জন্য, আদেশটি কী ছিল তা আমি মনে করতে পারি না। আমি যদি এটি খুঁজে পাই তবে আমি এটি পোস্ট করব। সম্পাদনা: সবেমাত্র এটি পাওয়া গেছে, আমি এটি উত্তর হিসাবে পোস্ট করছি।
লাঞ্চমিট317

1
এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ, এটি আমার বোঝাও। এখানে থাকা প্রতিটি উত্তরই কেবল একটি নতুন শেল খোলায়, এটি কোনও খোলা শেলটি প্রতিস্থাপন করে বা পর্দা পুনরায় আরম্ভ করে বা যাই হোক না কেন তা বিবেচনা করে। কমান্ড বা স্ক্রিপ্ট জারির জন্য কোনও জাদুকরী রোগ নেই এবং আপনার এক্স সেশন সহ প্রতিটি চলমান সেশন নতুন গ্রুপের সদস্যতার প্রতিফলন ঘটায়।
স্ক্র্যাভি

12

তুমি এটি করতে পারো.

আপনি যতগুলি গোষ্ঠী ব্যবহার করতে চান তা যুক্ত করুন usermod -G। তারপরে, চলমান সেশনের ব্যবহারকারী হিসাবে newgrp -কেবল '-' যুক্তি দিয়ে চালান ।

এটি গ্রুপ আইডিটিকে ডিফল্টে পুনরায় পুনঃনির্বিবর্তিত করে তবে এটি মাধ্যমিক গোষ্ঠীগুলিকেও সেট করবে। আপনি চালিয়ে এই যাচাই করতে পারেন groupsআগে ও পরে বর্তমান সেশনের থেকে, usermodএবং newgrp

এটি প্রতিটি ওপেন সেশন থেকে চালাতে হবে - আমি পর্দা সম্পর্কে খুব বেশি জানি না। যাইহোক, যদি সমস্ত খোলা সেশনগুলির মধ্যে পুনরাবৃত্তি করা এবং চালানো সম্ভব হয় তবে newgrpআপনার ভাল হওয়া উচিত। গ্রুপগুলি বা গ্রুপ আইডিগুলি সম্পর্কে আপনাকে চিন্তিত হতে হবে না।

আপনি ভাগ্য ভাল।


11
এক্স সেশনের মধ্যে একটি
এক্সটারম চেষ্টা করেও

3
tmux এ একটি অধিবেশন চেষ্টা করার চেষ্টা করেছিল এবং এটি সেখানে কাজ করে না
মাইকেল

2
অ্যামাজন লিনাক্স 2-এ চেষ্টা করা হয়েছিল, এটি কার্যকর হয়নি
সিরিল ডুচন-ডরিস 28:58

1
newgrp -একটি নতুন শেল প্রক্রিয়া শুরু হয়
পাইোটার ফাইন্ডেইনসেন

মিস্টার_টোমের উত্তর সম্পর্কে আপনার মন্তব্যের আলোকে, এটি অন্যান্য উত্তরগুলির মতোই একটি কর্মক্ষেত্র। মিস্টার_টমের উত্তর এখনও সঠিক।
স্ক্র্যাভি

4

সংক্ষেপ:

exec newgrp <newlyaddedgroupname1>
exec newgrp <newlyaddedgroupname2>
...
exec newgrp -

'এক্সিকিউটিভ' ব্যবহারের অর্থ বিদ্যমান শেলটি নতুনgrp কমান্ড দ্বারা শুরু করা নতুন শেলের সাথে প্রতিস্থাপন করুন (সুতরাং নতুন শেলটি আপনাকে আউট করে বেরিয়ে যাবে)।

newgrp -আপনার স্বাভাবিক প্রাথমিক দলটিকে পুনরুদ্ধার করার জন্য চূড়ান্ত প্রয়োজন, সুতরাং আপনার পরে তৈরি করা ফাইলগুলি তাদের গ্রুপের মালিক হিসাবে থাকবে।

দ্রষ্টব্য: মূল পোস্টারের প্রশ্নটি ছিল কীভাবে সদ্য-যুক্ত হওয়া গোষ্ঠীগুলি বিদ্যমান প্রক্রিয়াগুলিতে দৃশ্যমান করা যায়। gpasswdএবং usermodকমান্ড বিদ্যমান প্রসেস প্রভাবিত করে না; সদ্য যুক্ত হওয়া (বা মুছে ফেলা!) গোষ্ঠীগুলি আপনার অ্যাকাউন্টে উপস্থিত (অদৃশ্য হয়ে যাবে), অর্থাৎ / ইত্যাদি / গোষ্ঠী এবং / ইত্যাদি / জিএসডো ফাইলগুলিতে উপস্থিত হয়, তবে বিদ্যমান প্রক্রিয়াগুলির অনুমতি পরিবর্তন করা হয়নি। করতে অপসারণ অনুমতি যদি আপনি কোন চলমান প্রসেস হত্যা করার আছে; newgrp -/ ইত্যাদি / গোষ্ঠী পুনরায় পড়বে না এবং গোষ্ঠী তালিকা পুনরায় সেট করবে না; পরিবর্তে, মনে হয় কেবলমাত্র প্রক্রিয়াটির সাথে যুক্ত গ্রুপগুলি ব্যবহার করা হবে।


যাইহোক, exec su - <username>গ্রুপ সেট সহ একটি নতুন লগইন শেল পেতে ব্যবহার করা যেতে পারে, তবে এটি স্ক্রিপ্টগুলিতে কাজ করবে না কারণ একটি নতুন শেল টার্মিনাল থেকে কমান্ড পড়বে। আপনি su -c "command ..." <myusername>আপনার স্ক্রিপ্টটি পুনরায় চালু করতে ব্যবহার করতে পারেন , তবে ফলস্বরূপ প্রক্রিয়াটির কোনও নিয়ন্ত্রণকারী টার্মিনাল নেই এবং সুতরাং স্ক্রিন সম্পাদক বা অন্যান্য ইন্টারেক্টিভ কমান্ড চেষ্টা করা থাকলে একটি ত্রুটি ঘটবে।
jimav

কেন এই নিম্নমানের ছিল? কেউ কি এর সম্পর্কে খারাপ তা ব্যাখ্যা করতে পারেন, কারণ এটি আমার ক্ষেত্রে ঘটেছিল এবং আমি মনে করি এটি আমার পক্ষে সবচেয়ে ভাল লাগবে?
jasonmp85

গাহ, আমি পরীক্ষার আগে এটিকে ভোট দিয়েছি। "প্রাথমিক গোষ্ঠী" প্রতিস্থাপন newgrp -করে না । প্যাট্রিক কনহেডি এর উত্তর এখানে সেরা, কারণ এটি প্রাথমিক দলকে কাঁটাচামচ করে না বা পরিবর্তন করে না।
jasonmp85

1

আমার একই সমস্যা ছিল কিন্তু লগ-ইন না করা ব্যবহারকারীদের জন্যও। Nscd এর পুনরারম্ভ সাহায্য করেছিল, কিন্তু এই কমান্ড নির্বাহ করেনি: nscd -i group। এর দ্বারা গ্রুপ ফাইলটি পুনরায় লোড করার জন্য এনএসসিডি (ক্যাচিং ডেমন) নির্দেশ দেওয়া উচিত।


1

আমি কাজ করতে newgrp কমান্ড পেতে পারি না। আমি নিশ্চিত নই যে এটি / ইত্যাদি / sudoers এর উপর নির্ভর করে তবে আমি সাধারণত sudo এর জন্য আমার পাসওয়ার্ড টাইপ করতে হয় এবং এটি আমার পাসওয়ার্ডের প্রয়োজন ছাড়াই কাজ করেছে:

[leo60228@leonix:~]$ groups
users wheel

[leo60228@leonix:~]$ sudo echo hi
[sudo] password for leo60228:
hi

[leo60228@leonix:~]$ sudo -k # reset sudo timeout

[leo60228@leonix:~]$ exec sudo -i -u $(whoami) # no password necessary

[leo60228@leonix:~]$ groups
users wheel docker

0

আপনার কাছে থাকলে এটি কৌশলটি করে sudoএবং এটি কিছু ক্ষেত্রে আপনার পাসওয়ার্ডটি আরও একবার প্রবেশ করা থেকে বাঁচাতে পারে:

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