newsence
來源篩選

Disable Your SSH access accidentally with scp

Hacker News

This article discusses a technical scenario where using the scp command can inadvertently lead to losing SSH access to a server. It explores the underlying configuration issues and code behaviors that cause this lockout.

newsence

使用 scp 時不小心停用 SSH 存取權限的風險

Hacker News
4 天前

AI 生成摘要

這篇文章討論了在使用 scp 指令時,可能會不小心導致失去伺服器 SSH 存取權限的技術情境。內容探討了導致此種鎖定狀況的底層配置問題與程式碼行為。

背景

這篇討論源於一位開發者分享的慘痛經驗:在使用 scp 指令遞迴複製檔案到遠端伺服器的家目錄時,意外導致 SSH 存取權限失效。這類問題通常發生在權限設定不當的目錄被同步到伺服器後,觸發了 SSH 安全機制中對目錄權限的嚴格要求,進而導致使用者被鎖在系統之外。

社群觀點

針對這次意外,社群首先聚焦於 scp 的行為邏輯。有網友指出,若在指令中使用萬用字元如 ./* 而非直接指定當前目錄 .,或許能避免將目錄本身的權限屬性一併帶入。然而,爭議的核心在於 scp 是否應該在未加上 -p(保留權限)參數的情況下,就自動套用來源端的權限。部分資深用戶認為,除非是新建目錄,否則 scp 的這種行為並不符合直覺,甚至有網友將其歸類為 OpenSSH 的設計缺陷。事實上,這確實是一個已知的行為,且在 OpenSSH 10.3 版本中針對此類權限覆蓋問題進行了修正。

除了技術細節,社群也對開發環境的安全性提出質疑。有人好奇為何本地端會存在權限設為 777(全開放)的目錄,這在現代開發流程中相當罕見。對此,其他開發者補充了幾種可能性,例如掛載 NTFS 分割區時,由於檔案系統不相容,常會預設將所有檔案標註為最高權限;或是像 /tmp 這類具備黏滯位元(sticky bit)的特殊目錄。為了預防這類低級錯誤,有經驗的系統管理員分享了自己的防禦性腳本,例如在 Bash 登出腳本中加入自動修正 authorized_keys 權限的指令,雖然這無法解決非互動式的 scp 鎖定問題,但能有效減少手動操作帶來的風險。

更深層的討論則轉向了對 scp 工具本身的淘汰建議。有觀點認為 scp 已經是過時且充滿缺陷的遺留產物,其底層邏輯源自古老的 Berkeley R-Utilities。現代的 OpenSSH 已經開始將 scp 的後端重寫為基於 SFTP 協定,以提供更一致且安全的行為。專家建議,若 SFTP 無法滿足需求,使用 tar 配合管道傳輸通常是更可靠的替代方案。此外,PuTTY 專案開發的 pscp 也被提及是比原生 OpenSSH 工具更佳的替代品,因為它早在多年前就預見了這一趨勢並優先採用 SFTP 伺服器。

最後,社群對這種「意外鎖定」展現了高度共鳴。許多人認為,不小心把自己鎖在伺服器外是系統管理員的必經之路,就像第一次發現伺服器剛上線就遭受攻擊,或是嘗試從零建構 Linux 系統一樣,都是職涯中極具代表性的洗禮。這種錯誤雖然令人沮喪,但透過公開分享失敗經驗,反而能讓社群共同學習如何應對權限管理的陷阱。

延伸閱讀

  • OpenSSH 關於 SCP 轉向 SFTP 協定的技術背景說明:https://lwn.net/Articles/835962/
  • 具備更高加密安全性的輕量化 SSH 伺服器:tinysshd