Вопрос: Судо как другой пользовательский и рабочий экран


Сегодня выяснилось, что запуск экрана как другого пользователя, который я sudo в не работает!

то есть

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

У меня есть сценарий, который работает как пользователь «монитора». Мы запускаем его в сеансе экрана, чтобы видеть вывод на экране. Проблема в том, что у нас есть несколько пользователей, которые входят в систему со своей учетной записью (т. Е. Bob, james, susie и т. Д.), А затем они подключаются к пользователю «монитора». Предоставление им доступа к пользователю «монитора» не может быть и речи.


148
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 до запуска экрана - его гетто немного взломать, но он должен сделать экран счастливым.


218
2018-02-25 16:46



так что ... какие-либо последствия для безопасности с этим? Я думаю, что я могу добавить пользователя в группу tty, но это было бы не идеально. :-П - luckytaxi
Re: последствия для безопасности, я ничего не знаю (но это не значит, что их нет :) - IIRC это зависит от побочного эффекта «скрипта», открывающего новое терминальное устройство (как пользователь, вызывающий его) , и поскольку вы отправляете вывод скрипта в / dev / null, то нечего делать. Это также определенно безопаснее, чем добавлять пользователей в группу tty (IMHO) - voretaq7
@nalply Честно говоря, вы не должны сбивать с толку несколько оболочек, если вы системный администратор Unix, script может использоваться для запуска screen, Тогда вам нужно выйти только дважды (один раз для screen, один раз для su). (Это то, что script справочная страница может уточнить для вас, если вы потратите время, чтобы прочитать ее ...) - voretaq7
Или просто запустите sudo -u bob script -q -c 'screen -dr myscreen' /dev/null, Тогда у вас есть только один терминал для выхода / отсоединения. - Andy Shulman
Спасибо, это спасло меня. Но почему это исправить? Из того, что я понимаю, он печатает все, начиная с stdout, до ... нигде. И это как-то фиксирует экран. - sudo


Я использую функцию обертки вокруг screen для пользователей (пользователей), которые я sudo su к. Это функция-оболочка, которую я добавил пользователю (пользователям) ~/.bashrc:

экран функции () {
  / usr / bin / script -q -c "/ usr / bin / screen $ {*}" / dev / null
}

Это позволяет мне использовать все параметры и параметры для screen что я могу использовать. Я размышляю над тем, чтобы поместить эту функцию в систему.


31
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
Я не был уверен, как решить это в моем ответе, потому что он сказал, что «предоставление им доступа ... не может быть и речи», но также сказал: «... они судо в пользователя« монитора ». Но я согласен, что принудительное ограничение команд в authorized_keys должно позаботиться об этом. - Alex


Предполагая, что мы говорим об этой ошибке:

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

Вот один лайнер (например, можно использовать как «alias gobob»):

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

Объяснение:

Это запустит оболочку (например, оболочку входа) в качестве пользовательского боба. Пользовательский боб запускает script, которому предлагается вызывать bash (может быть тире или ksh ...), и копия сеанса выбрасывается.


5
2018-02-22 08:36





Вероятно, придется менять разрешения на рассматриваемое устройство или добавлять монитор в группу, у которой есть разрешение на чтение этого устройства, что было бы моим первым наклонением. Но вам придется взвесить последствия безопасности для этого.


0
2018-02-25 15:51





Вы говорите:

sudo su "monitor" -

Мне интересно, что такое трейлинг. Обычно я делаю:

sudo su - username

Черточка (на странице su man) сообщает su, чтобы «сделать оболочку оболочкой входа». Это означает, что он будет запускать все обычные сценарии запуска оболочки и правильно настроить такие вещи, как PATH и HOME.


0
2018-02-25 18:44



Неа. sudo su - username а также sudo su username - делайте то же самое. - Tim Ludwinski


Я просто попал в эту проблему. Решила его chmod +rw $(tty) перед запуском sudo. Проблема с этим решением заключается в том, что после этого каждый может подключиться и snoop на вашем терминале.


-2
2018-06-22 02:09



Звучит как отличное решение. - Evan Carroll
@EvanCarroll Это отличное решение, за исключением той части, где она дает Весь мир читать и писать на свой терминал. Просто небольшая проблема с безопасностью. Никакая программа не заботится об этом, за исключением, конечно, всего, что проверяет безопасность терминала перед принятием паролей (gpg например). И, конечно же, он никогда не будет в системе со злонамеренными пользователями, которые будут смотреть tty и обнюхивать пароли ... - voretaq7