UnixReview.com
March 2006
sh_screen
#!/bin/ksh # # sh_screen - launches screen setuid and # then switches it back # # path: /usr/local/bin/sh_screen # this file should be chmod 700, owned by root /bin/chmod +s /usr/bin/screen # adjust paths to fit your system # the message in a bottle (/bin/sleep 1;/bin/chmod -s /usr/bin/screen) & #while the message floats, launch screen as the login user /usr/bin/sudo -u $(/usr/bin/logname) /usr/bin/screen $* # save the return code screen_return=$? # be sure the background job has run wait # return screen's return code return $screen_return # end sh_screen #!/bin/ksh # # sscreen - wrapper script for sudo'ing sh_screen # # path: /usr/local/bin/sscreen # this file should be chmod 755, owned by root /usr/bin/sudo /usr/local/bin/sh_screen $* # end sscreen #!/bin/ksh # # ss_addviewer - grant a user read-only access to an # sscreen session from within that session # # path: /usr/local/bin/ss_addviewer # this file should be chmod 700, owned by root SSCREEN=/usr/local/bin/sscreen if [[ "${STY}" = "" ]] then # we're not in an sscreen session echo 'This script is only meant to run from' echo 'within an existing sscreen session' exit fi read "username?User to add: " # make sure we're in multiuser mode ${SSCREEN} -X multiuser on # screen makes you add a full privileged user, then subtract # privileges ${SSCREEN} -X acladd ${username} # take away the ability to type in the session # and to execute screen commands ${SSCREEN} -X aclchg ${username} -w-x '#?' # give them the right to detach (Ctrl-A, d) ${SSCREEN} -X aclchg ${username} +x detach # end ss_addviewer #!/bin/ksh # # ssallow - sudo wrapper for ss_adduser # # path: /usr/local/bin/ssallow # this file should be chmod 755, owned by root /usr/bin/sudo /usr/local/bin/ss_addviewer # end ssallow #!/bin/ksh # # ss_listsessions - list established sscreen sessions # # path: /usr/local/bin/ss_listsessions # this file should be chmod 700, owned by root /usr/bin/find /tmp/screens -type p \ | /bin/sed 's/^.*screens\/S-//;s/\/.*\./\//' # end ss_listsessions #!/bin/ksh # # ssls - sudo wrapper for ss_listsessions # # path: /usr/local/bin/ssls # this file should be chmod 755, owned by root /usr/bin/sudo /usr/local/bin/ss_listsessions # end ssls #!/bin/ksh # # shared_screen - safely share screen sessions # # path: /usr/local/bin/shared_screen # this file should be chmod 755 screen_name=${1:-share_screen} if ! /usr/local/bin/sscreen -x "${screen_name}" then /usr/local/bin/sscreen -S ${screen_name##*/} fi # end shared_screen