NAME
Safe - 用 來 建 立 和 操 縱 安 全 解 釋 器 的 機 制 。
總 覽 SYNOPSIS
::safe::interpCreate ?slave? ?options...? ::safe::interpInit slave ?options...? ::safe::interpConfigure slave ?options...? ::safe::interpDelete slave ::safe::interpAddToAccessPath slave directory ::safe::interpFindInAccessPath slave directory ::safe::setLogCmd ?cmd arg...?
OPTIONS
?-accessPath pathList? ?-statics boolean? ?-noStatics? ?-nested boolean? ?-nestedLoadOk? ?-deleteHook script?
描 述 DESCRIPTION
Safe Tcl 是 一 種 機 制 , 用 於 安 全 的 執 行 不 可 信 任 的 Tcl 腳 本 , 併 爲 有 潛 在 危 險 功 能 的 腳 本 提 供 訪 問 中 介 。
Safe Base 確 保 不 可 信 任 的 Tcl 腳 本 不 能 損 壞 宿 主 應 用 。 Safe Base 防 止 完 整 性 和 隱 私 攻 擊 。 防 止 不 可 信 任 的 Tcl 腳 本 敗 壞 宿 主 應 用 或 計 算 機 的 狀 況 。 防 止 不 可 信 任 的 腳 本 把 存 儲 在 宿 主 主 機 或 宿 主 應 用 中 的 信 息 泄 露 給 任 何 人 羣 。
Safe Base 允 許 一 個 主 解 釋 器 建 立 安 全 、 受 限 制 的 解 釋 器 , 它 包 括 爲 source, load, file, encoding, 和 exit 命 令 預 定 義 的 一 系 列 別 名 , 並 可 以 使 用 自 動 裝 載 和 包 機 制 。 不 向 安 全 解 釋 器 透 露 文 件 系 統 的 任 何 東 西 , 它 只 能 訪 問 包 含 記 號 (token)的 虛 擬 的 路 徑 。 當 安 全 解 釋 器 請 求 source(載 入 )一 個 文 件 的 時 候 , 它 使 用 在 虛 擬 路 徑 中 的 記 號 作 爲 要 source 的 文 件 名 的 一 部 分 ; 主 解 釋 器 透 明 的 把 這 個 記 號 轉 換 成 一 個 實 際 的 路 徑 名 並 執 行 所 要 求 的 操 作 (詳 情 參 見 下 面 的 SECURITY 安 全 章 節 ). 可 以 使 用 下 面 描 述 的 命 令 標 誌 來 選 擇 不 同 的 安 全 級 別 。
Safe Base 在 主 解 釋 器 中 提 供 的 所 有 命 令 駐 留 在 safe 名 字 空 間 中 :
命 令 COMMANDS
在 主 解 釋 器 中 提 供 了 下 列 命 令 : ::
safe::interpCreate
?slave? ?options...? 建 立
一 個 安 全 解 釋
器 , 安 裝 在 ALIASES
別 名 章 節 中 描
述 的 別 名 並 初
始 化 在 OPTIONS 選 項
中 提 供 的 自 動
裝 載 和 包 機 制
。 對 可 選 擇 的
參 數 的 描 述 請
參 見 下 面 OPTIONS 選
項 章 節 。 如 果
省 略 了 slave 參 數
, 則 生 成 一 個
名 字 。 ::safe::interpCreate
總 是 返 回 解 釋
器 的 名 字 。 ::
safe::interpInit slave ?options...?
除 了 不 建 立 安
全 解 釋 器 之 外
, 這 個 命 令 類
似 於 interpCreate 命 令
。 必 須 已 經 通
過 其 他 方 式 如
interp create -safe建 立 了
這 個 slave。 如 果
未 給 出
options, 則 把 給 指
名 的 這 個 解 釋
器 所 有 選 項 的
設 置 返 回 爲 給
這 個
slave 的 選 項 和 它
們 當 前 的 值 的
一 個 列 表 。 如
果 提 供 了 一 個
單 一 的 補 充 參
數 , 它 將 返 回
有 兩 個 元 素
name 和 value 的 一 個
列 表 , 這 裏 的
name 是 選 項 的 全
名 而
value 是 給 slave 的 這
個 選 項 當 前 值
。 如 果 提 供 多
於 兩 個 補 充 選
項 , 它 將 重 新
配 置 這 個 安 全
解 釋 器 並 只 改
變 每 個 提 供 的
選 項 。 關 於 選
項 的 描 述 請 參
見 下 面 的
OPTIONS 章 節 。 使 用
的 例 子 :
# Create a new interp with the same configuration as "$i0" : set i1 [eval safe::interpCreate [safe::interpConfigure $i0]] # Get the current deleteHook set dh [safe::interpConfigure $i0 -del] # Change (only) the statics loading ok attribute of an interp # and its deleteHook (leaving the rest unchanged) : safe::interpConfigure $i0 -delete {foo bar} -statics 0 ; ::
safe::interpDelete
slave 刪 除 這 個 安
全 解 釋 器 並 清
除 相 應 的 主 解
釋 器 數 據 結 構
。 如 果 爲 這 個
解 釋 器 指 定 了
一 個 deleteHook 腳 本
, 則 在 刪 除 這
個 解 釋 器 之 前
執 行 這 個 腳 本
, 把 這 個 解 釋
器 的 名 字 作 爲
一 個 補 充 參 數
。 ::
safe::interpFindInAccessPath slave directory
這 個 命 令 尋 找
並 返 回 在 安 全
解 釋 器 的 當 前
虛 擬 訪 問 路 徑
中 給 實 際 路 徑
directory 的 記 號 。
如 果 未 找 到 這
個 路 徑 則 生 成
一 個 錯 誤 。 使
用 的 例 子 :
$slave eval [list set tk_library [::safe::interpFindInAccessPath $name $tk_library]] ::
safe::interpAddToAccessPath slave directory 這 個 命 令 把 directory 添 加 到 在 主 解 釋 器 中 爲 安 全 解 釋 器 維 護 的 虛 擬 路 徑 中 , 並 返 回 可 在 安 全 解 釋 器 中 被 用 來 獲 得 到 在 這 個 目 錄 中 的 文 件 的 訪 問 的 記 號 。 如 果 這 個 路 徑 已 經 存 在 於 虛 擬 路 徑 中 , 則 它 只 返 回 記 號 而 不 再 次 把 這 個 路 徑 添 加 到 虛 擬 路 徑 中 。 使 用 的 例 子 :
$slave eval [list set tk_library [::safe::interpAddToAccessPath $name $tk_library]] ::
safe::setLogCmd ?cmd arg...? 這 個 命 令 安 裝 在 一 個 腳 本 , 在 這 個 安 全 解 釋 器 的 特 定 的 生 命 週 期 事 件 發 生 的 時 候 將 被 調 用 。 在 調 用 這 個 命 令 而 不 加 參 數 時 , 它 返 回 當 前 安 裝 的 腳 本 。 在 調 用 並 加 一 個 參 數 空 串 時 , 則 刪 除 當 前 安 裝 的 腳 本 並 關 閉 日 誌 記 錄 。 調 用 這 個 腳 本 時 將 加 上 一 個 補 充 參 數 , 它 描 述 所 感 興 趣 的 事 件 。 主 要 的 目 的 是 幫 助 調 試 安 全 解 釋 器 。 在 安 全 解 釋 器 只 能 得 到 一 個 一 般 錯 誤 消 息 的 時 候 你 可 以 使 用 這 個 設 施 獲 得 完 整 的 錯 誤 消 息 。 這 防 止 安 全 解 釋 器 見 到 關 於 失 敗 的 消 息 和 其 他 可 能 包 含 敏 感 信 息 如 真 實 路 徑 名 的 其 他 事 件 的 消 息 。 使 用 的 例 子 : ::safe::setLogCmd puts stderr 下 面 是 一 個 樣 本 對 話 的 輸 出 , 這 裏 一 個 安 全 解 釋 器 嘗 試 着 source 一 個 在 它 的 虛 擬 訪 問 路 徑 中 找 不 到 的 文 件 。 注 意 這 個 安 全 解 釋 器 只 接 收 到 一 個 錯 誤 消 息 , 說 這 個 文 件 未 找 到 :
NOTICE for
slave interp10 : Created
NOTICE for slave interp10 : Setting accessPath=(/foo/bar)
staticsok=1 nestedok=0 deletehook=()
NOTICE for slave interp10 : auto_path in interp10 has been
set to {$p(:0:)}
ERROR for slave interp10 : /foo/bar/init.tcl: no such file
or directory
選 項 OPTIONS
下 列 選 項 通 用 於 ::safe::interpCreate、 ::safe::interpInit、 和 ::safe::interpConfigure。 任 何 選 項 都 可 縮 寫 爲 它 的 最 小 的 無 歧 義 的 名 字 。 選 項 的 名 字 是 大 小 寫 不 敏 感 的 。
-accessPath
directoryList 這 個 選 項
設 置 目 錄 的 列
表 , 安 全 解 釋
器 可 以 從 中 source
和 load 文 件 。 如
果 未 指 定 這 個
選 項 , 或 者 它
被 給 定 爲 一 個
空 列 表 , 安 全
解 釋 器 將 使 用
的 目 錄 同 與 它
的 主 解 釋 器 用
於 自 動 裝 載 的
目 錄 。 關 於 虛
擬 路 徑 、 記 號
和 訪 問 控 制 的
詳 情 請 參 見 下
面 的 SECURITY 安 全 章
節 。
-statics boolean 這 個 選
項 指 定 是 否 允
許 這 個 安 全 解
釋 器 裝 載 靜 態
連 接 包 (如 load {}
Tk)。 缺 省 值 是
true : 允 許 安 全 解
釋 器 裝 載 靜 態
連 接 包 。
-noStatics 這 個 選 項 是
-statics false 的 一 個 方
便 的 簡 寫 , 它
指 定 不 允 許 這
個 安 全 解 釋 器
裝 載 靜 態 連 接
包 。
-nested boolean 這 個 選
項 指 定 是 否 允
許 這 個 安 全 解
釋 器 把 包 裝 載
到 它 自 己 的 子
解 釋 器 中 。 缺
省 值 是 false : 不 允
許 安 全 解 釋 器
把 包 裝 載 到 它
自 己 的 子 解 釋
器 中 。
-nestedLoadOk 這 個 選 項
是 -nested true 的 一 個
方 便 的 簡 寫 ,
它 指 定 允 許 安
全 解 釋 器 把 包
裝 載 到 它 自 己
的 子 解 釋 器 中
。
-deleteHook script 當 給 這
個 選 項 以 一 個
非 空 的 script 的 時
候 , 它 將 在 實
際 刪 除 這 個 從
解 釋 器 之 前 在
主 解 釋 器 中 被
求 值 , 並 加 上
這 個 安 全 解 釋
器 的 名 字 作 爲
一 個 補 充 的 參
數 。 給 予 一 個
空 值 則 去 除 任
何 當 前 爲 這 個
安 全 解 釋 器 安
裝 的 刪 除 回 調
(hook)腳 本 。 缺 省 值
({})是 沒 有 任 何
刪 除 回 調 腳 本
。
別 名 ALIASES
在 安 全 解 釋 器 中 提 供 了 下 列 別 名 :
source fileName
如 果 找 到 了 要
求 的 這 個 Tcl 源 文
件 , 則 把 它 source(裝
載 )到 安 全 解 釋
器 中 。 source 別 名
只 可 以 從 給 這
個 安 全 解 釋 器
的 虛 擬 路 徑 中
的 目 錄 source 文 件 。
關 於 在 有 效 文
件 名 上 的 限 制
的 更 多 信 息 請
參 見 SECURITY 安 全 章
節 。
load fileName 如 果 找 到
了 要 求 的 這 個
共 享 的 目 標 文
件 , 則 把 它 動
態 的 裝 載 到 安
全 解 釋 器 中 。
爲 了 能 成 功 的
找 到 它 , 文 件
名 必 須 包 含 在
給 這 個 安 全 解
釋 器 的 虛 擬 路
徑 中 提 及 的 一
個 記 號 的 名 字
。 還 有 , 這 個
共 享 的 目 標 文
件 必 須 包 含 一
個 安 全 入 口 點
; 詳 情 請 參 見
load 命 令 的 手 冊
條 目 。
file ?subCmd args...?
file 別 名 提 供 到 file命 令 的 子 命 令 的 一 個 安 全 子 集 的 訪 問 ; 它 只 允 許 dirname、 join、 extension、 root、 tail、 pathname 和 split 子 命 令 。 關 於 這 些 子 命 令 的 詳 情 請 參 見 file 命 令 的 手 冊 條 目 。
encoding ?subCmd args...?
enconding 別 名 提 供 到 encoding 命 令 的 子 命 令 的 一 個 安 全 子 集 的 訪 問 ; 它 不 允 許 設 置 系 統 編 碼 , 不 允 許 其 他 子 命 令 包 括 system 檢 查 當 前 編 碼 。
exit 刪 除 調 用 它 的 腳 本 並 停 止 它 的 計 算 , 但 這 個 解 釋 器 存 在 於 其 中 的 那 個 Tcl |
進 程 不 被 終 止 。
安 全 SECURITY
Safe Base 不 嘗 試 完 全 的 防 止 煩 惱 (annoyance)和 拒 絕 服 務 攻 擊 。 這 些 形 式 的 攻 擊 妨 礙 應 用 或 用 戶 臨 時 的 使 用 計 算 機 來 完 成 有 用 的 工 作 , 例 如 消 耗 所 有 可 利 用 的 CPU 時 間 或 所 有 可 利 用 的 屏 幕 real estate。 這 些 攻 擊 儘 管 很 惡 劣 , 但 一 般 不 如 Safe Base 主 要 防 護 的 完 整 性 和 隱 私 攻 擊 那 麼 重 要 。 除 了 在 interp 手 冊 頁 中 定 義 的 安 全 命 令 集 之 外 , 在 安 全 解 釋 器 中 可 獲 得 的 命 令 還 包 括 給 source、 load、 exit 的 作 爲 中 介 的 (mediate)別 名 以 及 file 和 encoding 命 令 的 安 全 子 集 。 安 全 解 釋 器 還 可 以 自 動 裝 載 代 碼 並 可 以 請 求 裝 載 包 。 因 爲 這 些 命 令 中 的 一 些 命 令 訪 問 本 地 文 件 系 統 , 存 在 着 對 它 的 目 錄 結 構 的 潛 在 的 信 息 泄 露 。 爲 了 防 止 這 個 問 題 , 接 受 文 件 名 作 爲 參 數 的 命 令 在 安 全 解 釋 器 中 使 用 記 號 來 替 代 真 實 的 目 錄 名 。 在 主 解 釋 器 中 介 一 個 要 求 例 如 source 一 個 文 件 的 時 候 , 把 這 些 記 號 轉 換 成 實 際 路 徑 名 。 在 主 解 釋 器 中 維 護 這 個 虛 擬 路 徑 系 統 , 針 對 每 個 用 ::safe::interpCreate 建 立 的 或 用 ::safe::interpInit 初 始 化 的 安 全 解 釋 器 , 這 個 路 徑 把 在 安 全 解 釋 器 中 可 訪 問 的 記 號 映 射 成 在 本 地 文 件 系 統 上 的 真 實 路 徑 名 , 這 樣 就 防 止 了 安 全 解 釋 器 去 獲 取 關 於 這 個 解 釋 器 在 其 上 執 行 的 主 機 的 文 件 系 統 結 構 的 知 識 。 可 以 提 供 給 從 解 釋 器 中 的 source 和 load 別 名 的 有 效 的 文 件 名 參 數 只 能 是 下 面 這 種 形 式 的 路 徑 : [file join token filename] (比 如 , 在 使 用 本 地 文 件 路 徑 格 式 的 時 候 : 在 Unix 上 是 token/filename, 在 Windows 上 是 token\filename, 在 Mac 上 是 token:filename ), 這 裏 的 token 表 示 accessPath 列 表 中 的 一 個 目 錄 而 filename 是 在 這 個 目 錄 中 一 個 文 件 (不 允 許 訪 問 子 目 錄 )。 在 一 個 安 全 解 釋 器 中 , 當 在 要 source 或 裝 載 一 個 文 件 的 一 個 請 求 中 使 用 一 個 記 號 的 時 候 , 檢 查 這 個 記 號 並 把 它 轉 換 成 真 實 路 徑 名 , 並 在 文 件 系 統 上 定 位 要 被 source 或 裝 載 的 文 件 。 安 全 解 釋 器 不 能 獲 取 關 於 文 件 系 統 上 在 其 下 存 儲 這 個 文 件 的 實 際 路 徑 名 的 知 識 。 爲 了 進 一 步 防 止 潛 在 的 對 偶 然 的 包 括 在 可 以 被 安 全 解 釋 器 source 的 文 件 集 中 的 敏 感 文 件 的 信 息 泄 露 , 限 制 source 別 名 爲 訪 問 滿 足 下 列 約 束 的 文 件 : 文 件 名 必 須 是 十 四 個 字 符 或 更 短 , 必 須 不 包 含 多 於 一 個 的 點 (“.”), 不 許 終 止 於 擴 展 .tcl 或 是 被 調 用 的 tclIndex。 初 始 的 訪 問 路 徑 列 表 中 的 每 個 元 素 將 分 配 一 個 記 號 , 它 們 將 被 設 置 在 從 解 釋 器 的 auto_path 中 並 且 這 個 列 表 的 第 一 個 元 素 將 被 設 置 爲 這 個 從 解 釋 器 的 tcl_library。 如 果 未 給 出 訪 問 路 徑 參 數 或 者 是 一 個 空 列 表 , 缺 省 的 行 爲 是 讓 從 解 釋 器 訪 問 的 包 與 主 解 釋 器 已 經 訪 問 了 的 包 相 同 (更 精 確 的 描 述 : 只 允 許 用 Tcl 寫 成 的 包 (因 爲 它 們 將 在 從 解 釋 器 中 運 行 所 以 不 可 能 是 危 險 的 )和 提 供 Safe_Init 入 口 點 的 C 擴 展 )。 爲 此 , 用 主 解 釋 器 的 auto_path 來 構 造 從 解 釋 器 的 訪 問 路 徑 。 爲 了 從 解 釋 器 能 成 功 的 裝 載 Tcl 庫 文 件 (它 自 身 包 括 自 動 裝 載 機 制 ), 如 果 需 要 的 話 , 把 tcl_library 增 加 或 移 動 到 在 從 解 釋 器 的 訪 問 路 徑 中 的 第 一 個 的 位 置 上 , 這 樣 從 解 釋 器 的 tcl_library 將 與 主 解 釋 器 的 相 同 (它 的 真 實 路 徑 對 從 解 釋 器 仍 是 不 可 見 的 )。 爲 了 使 自 動 裝 載 對 於 從 解 釋 器 和 主 解 釋 器 在 缺 省 的 情 況 下 以 相 同 的 方 式 工 作 , 在 主 解 釋 器 auto_path 中 的 每 個 目 錄 的 第 一 層 子 目 錄 將 被 添 加 (如 果 未 曾 包 含 的 話 )到 從 解 釋 器 的 訪 問 路 徑 中 。 你 總 是 可 以 通 過 顯 式 的 使 用 -accessPath 標 誌 指 定 你 的 目 錄 列 表 , 而 不 是 依 賴 於 這 個 缺 省 機 制 , 來 指 定 一 個 更 受 限 制 的 路 徑 , 它 的 子 目 錄 永 遠 不 能 被 查 找 。 在 首 次 建 立 或 初 始 化 (例 如 通 過 interpConfigure -accessPath list)之 後 變 更 accessPath 的 時 候 , 將 在 安 全 解 釋 器 中 自 動 的 求 值 auto_reset 來 使 它 的 auto_index 與 新 的 記 號 列 表 同 步 。
參 見 SEE ALSO
interp(n), library(n), load(n), package(n), source(n), unknown(n)
關 鍵 字 KEYWORDS
alias, auto-loading, auto_mkindex, load, master interpreter, safe interpreter, slave interpreter, source
[中 文 版 維 護 人 ]
寒 蟬 退 士
[中 文 版 最 新 更 新 ]
2001/11/07
《 中 國 Linux 論 壇 man 手 冊 頁 翻 譯 計 劃 》 :
跋
本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh