سؤال أعد تحميل تعيينات مجموعة مستخدم Linux بدون تسجيل الخروج


عند تعيين قائمة مجموعة ثانوية للمستخدم باستخدام:

# usermod -G <grouplist> <user>

هل من الممكن فرض تعيين هذه المجموعة ليتم تفعيلها بدون تسجيل الخروج من جميع الجلسات الجارية؟

هذا سيكون مفيدا جدا في الحالة التي يكون فيها شاشة توجد جلسة العمل مع العديد من الأصداف المتواصلة ، حيث أن الجلسة بأكملها تحتاج إلى أن يتم تدميرها لجعل مهمة المجموعة سارية المفعول.

أعتقد أنه يمكنني تغيير المجموعة الأساسية للمستخدم في shell قيد التشغيل باستخدام newgrp الأمر - هل هناك بديل يعمل من أجل المجموعات الثانوية؟

من الناحية المثالية ، أريد شيئًا من شأنه أن يسري في كل صدفة دون أن يتم تشغيله يدويًا في كل واحدة ، ولكن في حالة فشل ذلك ، ربما بعض الطرق لإجبار الشاشة على تنفيذ الأمر نفسه في كل منها.


266
2018-04-17 19:50


الأصل


أعلم أنه على الأقل لبعض مديري النافذة / الجلسة من الممكن القيام بذلك بحيث تلتقط الجلسة المجموعة الجديدة وهي متاحة لأي عمليات جديدة تبدأ من القوائم أو أزرار الفريق أو أي شيء آخر. جئت إلى هنا الآن فقط للبحث عن ذلك مرة أخرى ، لذلك لا يمكن أن أقول الآن فقط كيف نفعل ذلك ، وربما يكون محددًا لمدير النوافذ. - mc0e


الأجوبة:


هراء بشكل رهيب ، ولكن يمكنك استخدام طبقتين من newgrp لتحقيق هذا لمجموعة معينة:

id -g

... سيمنحك معرف المجموعة الأساسي الحالي. سنسمي هذا orig_group لأغراض هذا المثال. ثم:

newgrp <new group name>

... سيحولك إلى هذه المجموعة كإعداد أساسي وإضافتها إلى قائمة المجموعات التي أرجعها groups أو id -G. الآن ، المزيد:

newgrp <orig_group>

... سوف تحصل على قذيفة حيث يمكنك رؤية المجموعة الجديدة والابتدائي هو المجموعة الأصلية.

هذا أمر فظيع وسيجعلك تحصل على مجموعة واحدة فقط في كل مرة ، ولكنها ساعدتني في بضع المرات للحصول على مجموعات مضافة بدون تسجيل الخروج / في جلستي X الكاملة (على سبيل المثال للحصول على الصمامات المضافة كمجموعة إلى مستخدم بحيث تعمل sshfs).

تحرير: هذا لا يتطلب منك كتابة كلمة المرور الخاصة بك سواء su سوف.


164
2017-10-10 17:36



خدعة لطيفة ، أنا أحب ذلك - Simon
على فيدورا كان علي أن أفعل newgrp $USER بدلا من newgrp <orig_group>. وهذا يعني أنه لم يكن من الضروري العثور على معرف المجموعة الأساسي الأصلي ، لذلك فهو أسهل من هذا الحل. - Richard Turner
وجدت أنه كان كافياً للقيام به newgrp <new group name>. كان هذا أوبونتو 14.04 - Edward Falk
EdwardFalk على حق ، ولكنك لا (قد لا) ترغب في ترك هذه المجموعة بمثابة الأساسي ... - mimoralea
لاحظ أن كل newgrp ينشئ shell جديدًا ، لذلك عندما تحتاج إلى الخروج تمامًا من الجلسة ، يلزمك إجراء "الخروج من الخروج" للحصول على مخرج (: - jwd


من داخل shell ، يمكنك إصدار الأمر التالي

su - $USER

المعرف الآن قائمة المجموعة الجديدة:

id

269
2017-11-06 15:28



أعتقد أن هذا هو أفضل أسلوب في كثير من الحالات ، لكن الملصق الأصلي أراد تحديث قذائف متعددة في جلسة شاشة. سيكون هذا الحل يمكن القيام به من كل قذيفة. - Adrian Ratnapala
خدعة لطيفة ، يعمل رائعة! - genpfault
الحل الأصلي من شأنه أيضًا فقط إصلاح جلسة shell واحدة في الشاشة. لقد اختبرت ذلك للتو. سبب نجاح هذا الحل هو أنك تفرخ جلسة جديدة كاملة بدلاً من الموروث من البيئة الأصلية. - Dror
هذا حقا يجب أن يكون الجواب المقبول. خدعة لطيفة ، شكرا! - dotancohen
هذا يتطلب منك كتابة كلمة مرور ، مما قد يكون محرجًا / غير مرغوب فيه إذا كنت تحاول القيام بذلك في الكثير من الجلسات. - Legooolas


هذه خدعة أنيق من هذا الرابط يعمل عظيم!

exec su -l $USER

ظننت أنني سأقوم بنشرها هنا في كل مرة أنسى فيها كيفية القيام بذلك ، هذا هو الرابط الأول الذي يظهر في جوجل.


124
2018-06-18 16:27



+1 لعدم وضع المستخدم في قشرة فرعية ؛ يمكنك الخروج / الخروج كالمعتاد مع هذا. أيضا ، إذا تم تعيين NOPASSWD: في / etc / sudoers ، فيمكنك بدلاً من ذلك استخدام exec sudo su -l $USER لتجنب المطالبة بكلمة المرور. - Ivan X
كن على علم: ستتم مطالبتك بكلمة sudo. إذا أخطأت ، فستغلق محطتك. - Tyler Collier
TylerCollier Ivan فعل أشير NOPASSWD: - pepoluan


1. الحصول على قذيفة مع المجموعة الجديدة دون تسجيل الخروج ومرة ​​أخرى

إذا كنت تضيف مجموعة واحدة فقط ، فقد استخدمت ما يلي:

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

هذا تباين في خدعة newgrp المكونة من طابقين في Legooolas ، ولكنه في سطر واحد ولا يتطلب منك إدخال مجموعتك الأساسية يدويًا.

sg هو newgrp ولكن يقبل أمرًا يتم تنفيذه باستخدام معرف المجموعة الجديد. ال exec يعني أن shell الجديد يحل محل shell الموجود ، لذا لن تحتاج إلى "الخروج" مرتين.

على عكس استخدام su ، لن تحتاج إلى كتابة كلمة المرور الخاصة بك. كما أنه لا يقوم بتحديث بيئتك (بخلاف إضافة المجموعة) ، لذا فإنك تحتفظ بدليل عملك الحالي وما إلى ذلك.

2. تنفيذ الأمر في جميع نوافذ الشاشة في الجلسة

ال at الأمر في الشاشة يقوم بتشغيل أمر في أي من النوافذ التي تحددها (لاحظ أن هذا أمر شاشة ، وليس أمر shell).

يمكنك استخدام الأمر التالي لإرسال الأمر إلى جميع جلسات الشاشة الموجودة:

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

لاحظ الحاجة للهروب من backticks للحصول عليها id لتشغيل في جلسة الشاشة ، و ^ م للحصول على شاشة لضرب 'دخول' في نهاية الأمر الخاص بك.

لاحظ أيضا أن الشاشة stuff الأمر ببساطة يقوم بكتابة نص الأمر نيابة عنك. لذلك قد يحدث شيء غريب إذا كان أحد نوافذ الشاشة يحتوي على أمر نصف كتابي في موجه الأوامر أو يقوم بتشغيل تطبيق آخر غير shell (على سبيل المثال ، emacs ، top). إذا كانت هذه مشكلة ، لدي بعض الأفكار:

  • للتخلص من أي أمر نصف مكتوب ، يمكنك إضافة "^ C" إلى بداية الأمر.
  • لتجنب تشغيل الأمر في نافذة emacs ، وما إلى ذلك ، يمكن أن تسأل "at" لتصفية عنوان النافذة وما إلى ذلك (في المثال أعلاه ، أستخدم "#" ، والتي تطابق جميع النوافذ ، ولكن يمكنك التصفية حسب عنوان النافذة والمستخدم ، وما إلى ذلك).

لتشغيل الأمر في نافذة معينة (تم تحديده برقم النافذة) ، استخدم ما يلي:

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

20
2017-12-17 21:33



بطانة واحدة رائعة ، لا يبدو أن لها آثار جانبية أخرى ، وذلك بفضل! - Cyril Duchon-Doris


انت تستطيع فعل ذالك.

أضف العديد من المجموعات التي تريد استخدامها usermod -G. ثم ، كمستخدم مع جلسة تشغيل ، قم بتشغيل newgrp - مع مجرد حجة.

يؤدي ذلك إلى إعادة تهيئة معرّف المجموعة إلى الإعداد الافتراضي ، ولكنه سيعمل أيضًا على تعيين المجموعات الثانوية أيضًا. يمكنك التحقق من ذلك عن طريق تشغيل groups من الجلسة الحالية قبل وبعد usermod و ال newgrp.

يجب تشغيل هذا من كل جلسة مفتوحة - لا أعرف الكثير عن الشاشة. ومع ذلك ، إذا كان من الممكن تكرار جميع الجلسات المفتوحة وتشغيلها newgrpيجب أن تكون جيد لن تقلق بشأن معرفة المجموعات أو معرفات المجموعة.

حظا سعيدا لك.


13
2018-01-30 16:17



حاول على xterm داخل جلسة X لكنه لم ينجح - dwery
حاول في جلسة في tmux وأنها لم تنجح هناك أيضا - Michael
حاول في الأمازون لينكس 2 ، لم تنجح - Cyril Duchon-Doris
newgrp - يبدأ عملية قذيفة جديدة - Piotr Findeisen


عادةً ما يتم تعداد المجموعات عند تسجيل الدخول ، ولا توجد طريقة أعرف بها لإجبارها على إعادة التعداد الجماعي بدون تسجيل الخروج والعودة مرة أخرى.

يبدو أن العديد من الإجابات التي تم التصويت عليها هنا تستخدم حلاً يستدعي استخدام غلاف جديد مع بيئة جديدة (مثل تسجيل الدخول مرة أخرى). لا تتلقى shell الأصل وجميع البرامج الأخرى التي يتم تشغيلها بشكل مستمر عضوية المجموعة الجديدة حتى يتم إعادة استدعائها من قشرة جديدة عادةً بعد تسجيل خروج نظيف وتسجيل الدخول.


12
2018-04-25 17:56



بصدق ، أنا متأكد من أن هذا ليس صحيحًا - لقد وجدت طريقة للقيام بذلك من قبل على نظام لينوكس. ومع ذلك ، بالنسبة لحياة لي ، لا أستطيع أن أتذكر ما كان الأمر. إذا وجدت ذلك ، سأقوم بنشره. تعديل: فقط وجدت ذلك ، أنا نشره كإجابة. - lunchmeat317


عن طريق newgrp الأمر حل مشكلة بالنسبة لي:

newgrp <GroupName>

هذا بلوق وظيفة لديه شرح مفصل.


10
2017-10-07 04:53



مرحبًا بك في Super User! في موقع الأسئلة والأجوبة هذا ، نحاول تقديمه إجابات جيدة لطرح أسئلة على الناس. جزء من هذا يشمل الإجابة في مشاركتك ، بدلاً من توفير رابط إلى صفحة أخرى قد تجيب عن السؤال. يرجى تعديل إجابتك لتشمل الحل الفعلي للسؤال المنشور. - cascer1
هذه هي أفضل طريقة في رأيي ويجب أن يتم تمييزها كإجابة مقبولة جديدة. - Dakatine


كي تختصر:

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

استخدام "exec" يعني استبدال shell الموجود مع shell الجديد الذي تم بدءه بواسطة الأمر newgrp (وبالتالي الخروج من سجلات shell الجديدة الخارجة).

الاخير newgrp - هناك حاجة لاستعادة المجموعة الأساسية العادية ، لذلك فإن الملفات التي تقوم بإنشائها لاحقًا سيكون ذلك كمالك المجموعة.

ملاحظة: كان السؤال الذي طرحه المشارك الأصلي هو كيفية جعل المجموعات المضافة حديثًا مرئية في العمليات الحالية. ال gpasswd و usermod الأوامر لا تؤثر على العمليات الحالية ؛ المجموعات المضافة حديثًا (أو المحذوفة!) تظهر في (تختفي) من حسابك ، أي في ملفات / etc / group و / etc / gshadow ، ولكن لا يتم تغيير أذونات العمليات الحالية. إلى إزالة أذونات لديك لقتل أي عمليات قيد التشغيل ؛ newgrp - لن تتم إعادة قراءة / etc / group وإعادة تعيين قائمة المجموعة ؛ بدلاً من ذلك ، يبدو أنه يستخدم فقط المجموعات المرتبطة سابقًا بالعملية.


4
2018-02-10 23:21



على فكرة، exec su - <username> يمكن استخدامها للحصول على قذيفة تسجيل دخول جديدة مع مجموعة مجموعات ، ولكن هذا لن يعمل في البرامج النصية لأن قذيفة جديدة سوف تقرأ الأوامر من المحطة. يمكنك استخدام su -c "command ..." <myusername> لإعادة تشغيل البرنامج النصي ، ولكن العملية الناتجة لا تحتوي على وحدة تحكم مسيطر عليها ، ولذلك سيحدث خطأ إذا تمت محاولة تشغيل محرر شاشة أو أمر تفاعلي آخر. - jimav
لماذا كان هذا التراجع؟ هل يمكن لأي شخص أن يفسر ما هو سيئ في ذلك ، لأنه كان ما حدث لي وأعتقد أني أحبه أفضل؟ - jasonmp85
جاه ، لقد صوّتت عليه قبل الاختبار. newgrp - هل ليس استبدال "المجموعة الأساسية". جواب باتريك كونيدي هو الأفضل هنا ، لأنه لا يقوم بتشكيل المجموعة الأساسية أو تغييرها. - jasonmp85


واجهت مشكلة مشابهة ولكن أيضًا لم يسجل المستخدمون الدخول. لم يساعد إعادة تشغيل nscd ، ولكن تنفيذ هذا الأمر فعل: nscd -i group. يجب أن يُعلم nscd (البرنامج الخفي المؤقت) لإعادة تحميل ملف المجموعات.


1
2017-11-13 16:07