Я могу создать сеанс отдельного экрана, используя следующую команду:
[user1@host-pc ~]$ screen -d -m -S sname program
... и вернитесь к нему с помощью этой команды:
[user1@host-pc ~]$ screen -r sname
Есть ли способ разрешить пользователям, которые находятся в той же группе, что и user1
получить доступ к сеансу?
Изменить: я прочитал справочную страницу и знаю о многопользовательском режиме. Я конкретно спрашиваю о разрешении совместного использования сеансов экрана по группам пользователей (/ etc / group).
т.е. все пользователи в группе users
разрешено делиться сеансом sname
. Без ручного вывода каждого пользователя на экран.
Да, это возможно, но на вашем экране должен быть бит suid, и это имеет некоторые последствия для безопасности. В основном вы должны сделать следующее, чтобы иметь возможность поделиться сеансом экрана:
chmod u+s /usr/bin/screen
Затем как пользователь (предположим, что его имя пользователя user1), вы должны запустить screen и выполнить в нем следующие две команды:
<ctrl+a>:multiuser on
<ctrl+a>:acladd user2
В заключение, user2 должен иметь возможность подключиться к сеансу с помощью следующей команды:
screen -x user1/
Вы можете найти дополнительную информацию Вот.
Вы можете включить многопользовательский режим либо через .screenrc, либо внутри сеанса, используя Ctrl + a: с multiuser on
. Затем доступ можно контролировать, добавляя отдельных пользователей с acladd user2
, или путем повторного создания списков групп в пределах экрана acls (aclgrp
).
Я не верю, что есть способ напрямую использовать группы unix для экранных многопользовательских ACL.
Видеть man screen
или http://aperiodic.net/screen/multiuser
Привет с 2020 года! Ответ по-прежнему кажется «нет, нельзя (без сценариев или изменений исходного кода)».
У меня есть подозрение (но только), что это может быть одно из тех обстоятельств, когда Ожидать—А удивительно недооцененный инструмент автоматизации Unix- может пригодиться.
Screen, по крайней мере в последних версиях, имеет множество встроенных проверок для предотвращения несанкционированного доступа к разрешениям на сокеты в /var/run/screen
вне его acladd
и aclgrp
объект.
Если вы попытаетесь сделать разрешения на /var/run/screen/S-username
более разрешительный (чтобы предоставить доступ другой группе Unix), вы все равно получите сообщение об ошибке, например
Must run suid root for multiuser support.
если вы попытаетесь screen -r username/
с существующей розеткой.
если ты sudo chmod u+s /usr/bin/screen
, вы получите сообщение об ошибке
Directory /var/run/screen/S-username must have mode 700
если вы изменили эти разрешения вручную, что, похоже, исключает использование chmod
или setfacl
для установки разрешений на сокет на уровне файловой системы. Если вы выполнили ожидания Screen в отношении разрешений файловой системы, но явно не добавили пользователя, пытающегося получить доступ к сокету, в список доступа с помощью Ctrl+А :acladd
, вы получите сообщение об ошибке
Access to session denied.
Навскидку, я не знаю простых решений вашей проблемы, которые предлагает tmux либо, но Wemux кажется популярной оболочкой для упрощения работы с многопользовательскими общими сессиями и может помочь вам в достижении ваших целей.
редактировать: Этот лакомый кусочек от aperiodic.net/screen/multiuser (Обратный захват) кажется, что вы можете написать сценарий :acladd
операций при переборе членства в определенной группе из /etc/group
сначала передав следующую escape-последовательность:
экран может позволить программам отправлять ему команды через escape-последовательность
ESC ] 83 ; cmd ^G;
для того, чтобы это работало, псевдопользователь:window:
должен существовать и иметь соответствующие разрешения для выполнения предоставленной команды.