سؤال سودو كمستخدم مختلف وشاشة قيد التشغيل


اكتشف اليوم أن تشغيل الشاشة كمستخدم مختلف لا يمكنني العمل به!

أي

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails

لدي برنامج نصي يعمل كمستخدم "جهاز العرض". نحن نديرها في جلسة شاشة لمشاهدة المخرجات على الشاشة. المشكلة هي ، لدينا عدد من المستخدمين الذين يسجلون الدخول باستخدام حسابهم الخاص (مثل bob ، james ، susie ، الخ ...) ، ثم يقومون بـ sudo في مستخدم "الشاشة". منحهم الوصول إلى المستخدم "مراقبة" غير وارد.


151
2018-02-25 15:07


الأصل


هل هذا هو الخطأ الذي تحصل عليه؟ "لا يمكن فتح المحطة الطرفية الخاصة بك / dev / pts / 0 '- الرجاء التحقق." - Jim
نعم هذا هو واحد. أنا أفهم لماذا يحدث ذلك ولكن هناك حل؟ - luckytaxi
تعليق على الأوامر - أستمر في رؤية الأشخاص قيد التشغيل sudo su "user" -. لماذا لا تستخدم sudo -u user -s؟ - Andrew Aylett
Jim: إجراء 1+ لتزويدك برسالة الخطأ المفقودة. - Dennis Williamson
Andrew معظم الرجال وأنا أعلم أن تفعل sudo su - أعتقد أنه ما اعتاد عليه الناس (في حالتي لأنك لست بحاجة إلى معرفة أي علم sudo) sudo su - لا أعتقد أنني قرأت على الإطلاق sudo manpage :) - voretaq7


الأجوبة:


حاول الجري script /dev/null كمستخدم لك su قبل إطلاق الشاشة - في الاختراق قليلا الغيتو ، ولكن يجب أن تجعل الشاشة سعيدة.


221
2018-02-25 16:46



إعادة: الآثار الأمنية ، لا شيء أنا على علم (ولكن هذا لا يعني عدم وجود أي :) - IIRC هذا يعتمد على الجانب من "النصي" فتح جهاز محطة جديدة (كما يتذكرها المستخدم) وحيث أنك ترسل إخراج البرنامج النصي إلى / dev / null لا يوجد شيء يمكن التقاطه. كما أنه بالتأكيد أكثر أمانًا من إضافة المستخدمين إلى مجموعة tty (IMHO) - voretaq7
nalply بصراحة ، لا يجب أن تجد العديد من القذائف محيرة إذا كنت مسؤول نظام يونكس - الذي قال ، script يمكن استخدامها لإطلاق screen. ثم لديك فقط للخروج مرتين (مرة واحدة من أجل screenلمرة واحدة su). (هذا هو شيء script يمكن للصفحة رجل توضيح لك ، إذا كنت تأخذ من الوقت لقراءتها ...) - voretaq7
أو مجرد تشغيل sudo -u bob script -q -c 'screen -dr myscreen' /dev/null. ثم لديك محطة واحدة فقط للخروج / فصل من. - Andy Shulman
شكرا ، هذا أنقذني. ولكن لماذا يقوم هذا بإصلاحه؟ من ما أفهم ، فإنه يطبع كل شيء من stdout إلى ... في أي مكان. وهذا بطريقة ما يصلح الشاشة. - sudo
sudo من أجل أن تفعل شيءها script يفتح جهاز tty الخاص به ، يمتلكه المستخدم الذي قام بتشغيله (انظر في /dev وسترى أنها تظهر بعد أن تقوم بتشغيل script). screen ثم يمسك ذلك الجهاز tty (الذي يملكه المستخدم قيد التشغيل screen لذلك ليس لديه مشكلة في الوصول إليه). إنها مهمة إختراق كاملة ، لكنها تعمل. بالنظر إلى بعض أجهزتي ، يبدو أن الإصدارات الجديدة من الشاشة تبدو وكأنها تثبت جذور setuid-root ، والتي تعمل أيضًا ، ولكن هذا يعني أنه لديك عوامة جذرية ثنائية أخرى ، مما يجعل بعض الأشخاص غير مرتاحين بشكل مبرر. - voretaq7


أنا أستخدم وظيفة المجمع حولها screen للمستخدم (ق) أن أنا sudo su إلى. هذه هي وظيفة المجمع التي قمت بإضافتها إلى المستخدم (المستخدمين) ~/.bashrc:

الشاشة الوظيفية () {
  / usr / bin / script -q -c "/ usr / bin / screen $ {*}" / dev / null
}

هذا يتيح لي استخدام جميع الخيارات والمعلمات ل screen أنني قد ترغب في استخدامها. أنا أفكر في وضع هذه الوظيفة على نطاق المنظومة.


32
2017-08-13 13:45



يعمل تماما. لأولئك الذين يريدون هذا على نطاق المنظومة ، أوصي بإضافة هذا إلى /etc/bash.bashrc - يعمل عبر جميع المستخدمين. - Someguy123
هذا لن يقتبس الحجج إلى الشاشة بشكل صحيح ، وإلا حل جيد. - augurar


بافتراض أنها SSHing في المضيف على أي حال ، يمكنك إضافة مفاتيح ssh العامة لكل مستخدم يحتاج إلى الوصول إلى حساب الشاشة في الملف ~ monitor / .ssh / authorized_keys. ثم على الجهاز البعيد لكل مستخدم يمكن تشغيلها

ssh -t monitor@remote.machine screen -RD


7
2018-02-25 16:52



هذا هو نهج جيد آخر - يجب عليك تحديد الأوامر الإجبارية في ملف المفاتيح المصرح به (على كل luckytaxi "منحهم حق الوصول إلى المستخدم" مراقبة "غير وارد" ملاحظة أعلاه - يمكن فرض الأوامر القسري لهم فقط إرفاق جلسة الشاشة) - voretaq7
لم أكن على يقين من كيفية معالجة ذلك في جوابي ، لأنه قال "منحهم إمكانية الوصول ... غير وارد" ، ولكنهم قالوا أيضًا "... إنهم يتسللون إلى مستخدم" الشاشة ". لكنني أوافق ، على أن فرض أمر القيادة في الملفات المأذون به يجب أن يعتني بذلك. - Alex


على افتراض أننا نتحدث عن هذا الخطأ:

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.

وهنا واحد من الخطوط الملاحية المنتظمة (يمكن أن تستخدم باسم "الاسم المستعار gobob" ، على سبيل المثال):

sudo su - bob -c "script -c bash /dev/null"'

تفسير:

سيبدأ هذا shell (مثل shell تسجيل الدخول) كـ bob المستخدم. يبدأ المستخدم بوب scriptوالذي يُطلب منه استدعاء bash (يمكن أن يكون شرطة أو ksh ...) ويتم التخلص من نسخة من الجلسة.


6
2018-02-22 08:36





ربما يتعين تغيير الأذونات على الجهاز المعني أو إضافة جهاز إلى مجموعة لديها إذن لقراءة هذا الجهاز ، وهذا سيكون أول ميل لي. ولكن عليك أن تدرس الآثار الأمنية للقيام بذلك.


0
2018-02-25 15:51





أنت تقول أنك تفعل:

sudo su "monitor" -

أنا أتساءل عن اندفاع الزائدة. وعادة ما تفعل:

sudo su - username

تخبر الشرطة (لكل صفحة su man) su بأن "تجعل shell قذيفة تسجيل دخول". هذا يعني أنه سيؤدي إلى كل النصوص البرمجية لبدء التشغيل المعتادة ، ووضع أشياء مثل PATH و HOME بشكل صحيح.


0
2018-02-25 18:44



كلا. sudo su - username و sudo su username - افعل نفس الشيء. - Tim Ludwinski


أنا فقط ضربت هذه المشكلة. حلها مع chmod +rw $(tty) قبل تشغيل sudo. المشكلة في هذا الحل هي أنه يمكن لأي شخص الاتصال والتطفل على جهازك بعد ذلك.


-2
2018-06-22 02:09



يبدو وكأنه حل رائع. - Evan Carroll
EvanCarroll إنه حل رائع ، باستثناء الجزء الذي يقدم فيه العالم بأكمله قراءة وكتابة الوصول إلى محطة له. مجرد مشكلة أمنية بسيطة - لن يهتم أي برنامج بذلك ، باستثناء أي شيء يتحقق من أمان المحطة الطرفية قبل قبول كلمات المرور (gpg فمثلا). وبالتأكيد لن يكون أبدا على نظام مع المستخدمين المتطفلين الذين يشاهدون tty وشم كلمات المرور ... - voretaq7
كن حذرا: أبدا جرب هذا في المنزل! هذا أمر خطير!!! - ruizpauker