轉載自:http://blog.sina.com.cn/s/blog_704836f401010osn.html html
解決方法:web
# 以web用戶爲例 # su - web # script /dev/null # screen 這幾步後,普通用戶便可擁有執行screen的權限,固然,下次登陸的話,還得先執行script /dev/null才能不報錯的使用screen這個命令。
想了解細節的,請繼續往下看。安全
問題描述:bash
userA首先登陸系統,使用screen開啓了一個session,而後detach這個窗口。session
userB而後登陸系統,經過su - userA 變成userA,而後使用screen -r 恢復以前detached窗口,這時系統報以下錯誤:ssh
Cannot open your terminal '/dev/pts/1' - please check.ide
解決方法:spa
userB在 su - userA之後,執行以下命令便可:.net
script /dev/nullorm
注意: 有人提到 chmod 777 /dev/pts/1,這麼幹的人真是誤人子弟,雖然這麼作的確能解決這個問題,可是會帶來極大的安全問題!!!
爲何這條命令能解決問題?
通常人看到上面這裏估計就立刻回去試驗了,可是,等等,你不想知道爲何這個命令會有做用嗎?它是怎麼起做用的呢?
咱們來過一遍整個的操做步驟:
首先,usera登陸到系統中,咱們使用tty命令查看一下分配給他的tty,而後看一下這個tty的權限,而後用戶執行screen命令。
usera@localhost ~ $ ssh usera@remotehost
usera@remotehost ~ $ tty
/dev/pts/1
usera@remotehost ~ $ ls -l /dev/pts/1
crw--w---- 1 usera tty 136, 1 2011-01-09 20:14 /dev/pts/1
usera@remotehost ~ $ screen
咱們觀察上邊的輸出,發現usera對於/dev/pts/1具備讀寫權限,它所在組成員對這個tty具備寫權限,其餘用戶不能訪問這個tty。
而後,userb也登陸到系統中,一樣咱們使用tty命令查看一下分配給他的tty,而後看一下這個tty的權限
userb@localhost ~ $ ssh userb@remotehost
userb@remotehost ~ $ tty
/dev/pts/2
userb@remotehost ~ $ ls -l /dev/pts/2
crw--w---- 1 userb tty 136, 2 2011-01-09 20:20 /dev/pts/2
觀察輸出,userb被分配了/dev/pts/2,也是對於/dev/pts/2具備讀寫權限,它所在組成員對這個tty具備寫權限,其餘用戶不能訪問這個tty。
而後userb經過su - usera命令變成usera,一樣咱們使用tty命令查看一下分配給他的tty,而後看一下這個tty的權限
userb@remotehost ~ $ sudo su - usera
[sudo] password for userb:
usera@remotehost ~ $ tty
/dev/pts/2
usera@remotehost ~ $ ls -l /dev/pts/2
crw--w---- 1 userb tty 136, 2 2011-01-09 20:20 /dev/pts/2
AHA!! 注意了,咱們看到雖然userb已經變成了usera,可是他所使用的tty並無改變,仍然是/dev/pts/2。這就是爲何執行screen命令會報錯的緣由了,由於全部命令此時是使用usera賬戶執行的,可是/dev/pts/2的讀寫權限屬於userb,因此全部試圖控制/dev/pts/2的訪問都被拒絕了!
那麼咱們接下來看一下 script /dev/null作了些什麼,使得screen命令能執行呢?
usera@remotehost ~ $ script /dev/null
Script started, file is /dev/null
usera@remotehost ~ $ tty
/dev/pts/3
usera@remotehost ~ $ ls -l /dev/pts/3
crw--w---- 1 usera tty 136, 3 2011-01-09 20:36 /dev/pts/3
AHA!!! 看到了嗎?咱們其實是獲得了一個新的tty ---> /dev/pts/3,所以screen命令可以執行了,由於 /dev/pts/3這個tty的全部者是usera!
參考文檔: