Banana Studio
News · BS Manager

SSH Server 0.13.0:你的 SSH shell 現在只待在它的資料夾裡

SSH Server 0.13.0 讓 SSH shell 遵循與 SFTP 相同的規則:每位使用者的 shell 只看得到你指派給他的資料夾,唯讀資料夾維持唯讀,隱藏檔案維持隱藏。

SSH Server 0.13.0:你的 SSH shell 現在只待在它的資料夾裡
On this page

SSH Server 0.13.0:你的 SSH shell 現在只待在它的資料夾裡

SSH Server 0.13.0 現已在 Google Play 上架,支援手機、平板和 Android TV。這個版本修補了一些人遇到的漏洞:SSH shell 現在遵循與 SFTP 相同的規則。 每位使用者的 shell 只看得到你為他設定的資料夾,其他什麼都看不到。

一分鐘帶你看 0.13.0 的新功能。

為什麼重要

在 SSH Server 中,你會給每位使用者一份資料夾清單。SFTP 一向遵守這份清單:只拿到 Download 的使用者就只看得到 Download,其他都看不到。

SSH shell 卻不是這樣。同一位使用者用 ssh 開啟終端機時,shell 會從應用程式自己的私有資料夾開始,並能四處查看應用程式本身能存取的一切。這很令人困惑(「為什麼我在 shell 裡找不到我的 Download 資料夾?」),也代表對於使用 shell 的人來說,資料夾清單並不是真正的限制。

從 0.13.0 起,資料夾清單在任何地方都是界線。

之前:shell 可以瀏覽應用程式能存取的一切。現在:只有使用者的資料夾,Download(可寫入)和 Photos(唯讀)

shell 現在看得到什麼

shell 看到的,正是 SFTP 顯示給該使用者的資料夾:

  • 單一資料夾: 顯示為 /。如果你給使用者 /storage/emulated/0,那麼他 shell 裡的 / 就是你的內部儲存空間。
  • 多個資料夾: / 會以別名列出它們。擁有 Download 和 DCIM(顯示為 Photos)的使用者,在 / 裡正好看到兩個資料夾:Download 和 Photos。
  • 其他一切都不見了。 你其餘的儲存空間、應用程式自己的資料,以及其他應用程式的資料,根本不在那裡。會通往外部的路徑,包括 .. 以及透過 /proc 的 Linux 技巧,都會留在使用者的資料夾內。

你慣用的 shell 工具照常運作:ls、cd、cp、mv、find、cat、管線、指令碼和背景工作。Android 自身的系統檔案維持可讀,好讓這些指令能執行,就和任何 Android shell 一樣。

以下是 SSH Server 0.13.0 上的實際工作階段:

一次真實的 SSH 工作階段:pwd 顯示 /,ls / 顯示 Download 和 Photos,寫入 Photos 被拒絕,/storage/emulated/0 不存在

唯讀資料夾與隱藏檔案同樣適用

兩項你已經在 SFTP 熟悉的設定,現在在 shell 裡也生效:

  • Writable: 如果某個資料夾的 Writable 方塊未勾選,shell 可以開啟、讀取並把檔案複製出來,但無法在裡面建立、變更、重新命名或刪除任何東西。你會看到 Read-only file system,就像唯讀磁碟一樣。
  • Show hidden files: 如果對某位使用者關閉此項,名稱以點開頭的檔案和資料夾(.ssh、.cache 等)在 shell 的列表中也會被略過:ls -a、find、Tab 自動補齊皆然。和 SFTP 一樣,隱藏檔案仍可用確切名稱開啟。

Users 畫面:該使用者有 Download(Writable 已勾選)和 Photos(Writable 未勾選)

如何設定

沒有新東西要開啟。shell 會使用你已經為每位使用者設定好的資料夾:

  1. 開啟 SSH Server 並點一下 Users。
  2. 點一下使用者旁邊的鉛筆。
  3. 在 Access path 下,點一下 Add new 並選擇一個資料夾。使用者要有的每個資料夾都重複此步驟。
  4. 對任何應該唯讀的資料夾,取消勾選 Writable。
  5. 點一下 ✓ 儲存。該使用者下次登入時,他的 shell 就會顯示正好這些資料夾。

完全不想讓某位使用者有 shell?同一畫面上的 Disable shell 開關仍可將它關閉。

到處都能用,不需 root

新的 shell 在 SSH Server 支援的每一種裝置上都能免 root 運作:手機、平板和 Android TV,涵蓋 64 位元與 32 位元的 ARM 和 x86 處理器。我們從 Android 6 一路測到 Android 16。

在少數非常舊的裝置上,主要是系統核心過時的 Android 6 和 7,系統缺少 shell 需要的功能。在那些裝置上,SSH Server 不會退回到不受限制的 shell:工作階段會顯示一則簡短訊息,說明 shell 無法啟動,然後關閉。那些裝置上的 SFTP 仍正常運作。

兩項修正

SFTP 不再因為錯誤路徑而結束你的工作階段。 如果你開啟資料夾以外的路徑,例如 ls /storage/emulated/0,連線可能會以 Connection closed 中斷。現在你會收到一般的「not found」訊息,並能繼續工作。

之前:Connection closed。現在:「not found」,而且工作階段繼續

Users 和 SFTP Logs 在 Android 15 及更新版本上能正確顯示。 在較新的 Android 版本上,這兩個畫面的標題和返回箭頭會滑到狀態列底下。現在它們位於狀態列下方。

在 Android 15 上,Users 畫面的標題會滑到狀態列底下;現在位於其下方

問答

我的檔案以前在 /storage/emulated/0。現在在哪裡? 在你的使用者的資料夾裡。執行 ls / 即可看到。如果你把整個內部儲存空間都給了該使用者,那它就是 / 本身。

shell 顯示無法使用或無法啟動。我該怎麼辦? 請確認該使用者在 Access path 下至少有一個資料夾,而且 SSH Server 有存取你檔案的權限。若兩者都正常,你的裝置就是少數缺少 shell 所需核心功能的裝置;SFTP 仍可使用。

這會改變 SFTP 嗎? 不會。SFTP 本來就是這樣運作。改變的只有 shell,再加上上述的 SFTP 修正。

取得

SSH Server 0.13.0 現正於 Google Play 推出:

感謝每一位來信談 shell 和 SFTP 的朋友。請繼續把你的意見告訴我們!

Videos

SSH Server 0.13.0:有什麼新功能

Related posts