Частенько нам приходится делиться компьютерным опытом с другими людьми или просто показывать им свою работу. Зачастую, для этого требуется удаленно предоставить им доступ к своему экрану. В этой статье я расскажу как предоставить доступ только для чтения к своей консоли/терминалу с помощью screen. Статья актуальна для Linux/BSD систем.
Для начала, убедимся, что у нас установлен screen и sshd. Установив эти программы и запустив сервис ssh, приступим к настройке.
Выставим необходимые права на бинарник sreen и на папку с сессиями.
sudo chmod +s /usr/bin/screen
sudo chmod 755 /var/run/screen
Добавим специального «бесправного» пользователя в систему. Для этого изменим ему стандартный шелл.
ln -sf bash /bin/rbash
useradd -m -s /bin/rbash guest
Пароль у него будет просто перевод каретки. Т.к. команда passwd нам этого не позволит, изменим вручную файл /etc/shadow.
vi /etc/shadow
и вместо пароля введем вот это, получено с помощью команды openssl
openssl passwd -1 -salt ADUODeAy
$1$ADUODeAy$eCJ1lPSxhSGmSvrmWxjLC1
Проверим файл настроек sshd /etc/ssh/sshd_config. Разрешим пустые пароли и вход нашему пользвателю.
PermitEmptyPasswords yes
AllowUsers guest
Не забываем перезапустить ssh
service ssh reload
Либо вообще закомментируем строку AllowUsers, разрешив вход всем пользователям в системе.
Настроим screenrc для этого пользователя.
SCREENRC=$HOME/.screenrc
export SCREENRC
echo 'SCREENRC=$HOME/.screenrc' >> ~guest/.bashrc
Vbell off — отключает звонок, который отображается как мигание экрана.
aclchg guest -wx «#,?» — изменяет права нашего пользователя, запрещая ему выполнять команды.
multiuser on — позволяет множественный вход.
aclchg guest +x «colon,wall,detach» — разрешает пользователю выходить, переписываться с другими.
echo '
vbell off
aclchg guest -wx "#,?"
aclumask guest-wx
aclchg guest +x "colon,wall,detach"
multiuser on' >> ~/.screenrc
Делаем так, чтобы при соединении, наш пользователь видел приглашение и сразу же попадал в screen.
Обратите внимание, на эту строку: screen -x insider/shared-session. insider — пользователь, который предоставляет доступ к своему экрану, т.е. который запустит screen.
echo '
trap "" 2 3 19 #try to stop user getting to shell
clear
echo "Welcome to the Python Class!"
echo "You can enter Ctrl-ad to detach at any time or just close your terminal"
echo "You can message all users by doing, Ctrl-a: wall \"your message\""
echo -n "Press Enter to continue..." && read
screen -x insider/shared-session
exit' > ~guest/.profile
echo '. .profile' >> ~guest/.bash_profile
Стартуем screen из того терминала, который мы хотим расшарить в будущем.
screen -S shared-session
Теперь, чтоб поключиться к нему в режиме view-only, достаточно всего лишь набрать
ssh guest@host
Что же в итоге мы получим? Подключившись к нашему терминалу, удаленный пользователь сможет только наблюдать за нашими действиями, но никак не помешать нашей работе, в случае необходимости, мы можем разрешить ему выполнять команды. Эта технология позволяет значительно экономить трафик по сравнению с vnc, rdp, Radmin, TeamViewer и т.п., нативна для Linux, безопасна, т.к. весь SSH трафик шифруется, гибкая в настройке, позволяя очень тонко сконфигурировать вашу систему «шаринга» экрана, очень проста для конечного пользователя, вздумавшего понаблюдать за вашим экраном-терминалом: ему не нужно ставить никакой софт, настраивать его и т.п., все настройки выполняются со стороны сервера — того кто делится экраном. Поэтому, я считаю это лучшим вариантом для расшаривания экрана терминала.
P.S. можно изменить настройки screen глобально, добавив нужные нам опции в /etc/screenrc, как я и сделал.
aclchg guest -wx "\#,?"
aclchg guest +x "colon,wall,detach"