Sudo
GNU 螢幕:‘無法打開您的終端’/dev/pts/3’ - 請檢查’
我的系統中有一個守護程序,它在螢幕實例中執行,所有這些都是由非授權使用者完成的。我已將自己添加到特殊的 sudo 組中,允許我從該使用者執行螢幕,但是當我嘗試使用它時,例如
sudo -u that_user -H /usr/bin/screen -R
我明白了這篇文章的主題。
探勘我發現此消息意味著螢幕無法抓取或輸出到我在呼叫它時實際使用的 pty。對此的常見答案是將我的 /dev/pts/N chmod 為其他人的 rw,但我記得我早些時候設法避免了這種情況。也許我錯過了為 sudo 保存一些環境?
特別是我試圖通過sudo連接到普通使用者在螢幕上執行的rtorrent守護程序,作業系統是Gentoo amd64。下面是從 rc 腳本呼叫 screen 的方式:
start-stop-daemon \ --start \ --make-pidfile \ --pidfile /var/run/rtorrentd.pid \ --background \ --user $USER \ --env HOME="${PWHOME:-/home/$USER}" \ --name rtorrent \ --exec /usr/bin/screen -- -D -m -S rtorrentd /usr/bin/rtorrent
最終解決了實際的解決方案:
alias rtorrent="urxvt -hold -e /bin/bash -c \"chmod o+rw \\\`tty\\\` && sudo -u rtorrent -H screen -r rtorrentd\""
由於您
screen
以特殊使用者身份執行,因此特殊使用者需要訪問您的 pty。完成此操作的唯一方法是更改設備上的權限。更好的方法是使用 screen 的多使用者功能,它允許使用者連接到另一個使用者的螢幕會話,而無需使用 sudo。這需要設置
screen
二進制 setuid 根:sudo chmod u+s /usr/bin/screen
然後創建一個新的螢幕會話,給套接字一個有意義的名稱:
screen -S torrent
在此螢幕會話中,啟用多使用者模式並授權其他使用者:
^A: multiuser on ^A: acladd tijagi
然後,您應該能夠以自己的身份附加螢幕會話:
screen -x that_user/torrent