解決低許可權用戶的screen Cannot open your terminal '/dev/pts/1'問題

  • 2019 年 10 月 5 日
  • 筆記

轉載自:http://blog.sina.com.cn/s/blog_704836f401010osn.html

解決方法:

# 以web用戶為例  # su - web  # script /dev/null  # screen  這幾步後,普通用戶即可擁有執行screen的許可權,當然,下次登錄的話,還得先執行script /dev/null才能不報錯的使用screen這個命令。

想了解細節的,請繼續往下看。

問題描述:

 userA首先登錄系統,使用screen開啟了一個session,然後detach這個窗口。

 userB然後登錄系統,通過su – userA 變成userA,然後使用screen -r 恢復之前detached窗口,這時系統報如下錯誤:

Cannot open your terminal '/dev/pts/1' – please check.

解決方法:

 userB在 su – userA以後,執行如下命令即可:

script /dev/null

注意: 有人提到 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!

參考文檔:

Sharing a screen session with another administrator on a Linux system