Ssh

OpenSSH SFTP 伺服器是否在 put 命令(chroot 環境)後使用 umask 或保留客戶端權限?

  • May 21, 2021

我知道這個問題已經討論過了,但是通過閱讀文章我無法找到答案,因為有人說“是的 umask 可以工作”,而其他人說“OpenSSH put 命令總是保留權限”

首先要準確地說:

  • 我在 RHEL 6.2 上使用 OpenSSH 5.9
  • 我已經配置了一個 chrooted SFTP 伺服器,使用internal-sftp子系統,-u 0002用於 umask
  • 我精確我不使用-por-P選項

**從我一方面閱讀的內容來看:**有很多方法可以為 SFTP 傳輸定義 umask:

  • (or ) 的選項-u,從 OpenSSH 5.4 開始internal-sftp``sftp-server
  • 創建一個包裝器sftp-server(我們在其中明確設置了 umask - 這不適合 chrooted 環境順便說一句)
  • pam.d/sshd在文件中添加特定配置

另一方面,我讀過:

OpenSSH SFTP 客戶端和伺服器確實傳輸權限(作為擴展)並在本地創建具有權限的遠端文件。AFAICT,沒有辦法禁用此行為。

所以我做了以下測試:

在我的客戶端上,我創建了權限為 600 和 700 的文件MYFILE和目錄。MYDIR

然後使用sftp命令:

mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)

如果我在客戶端更改和的權限MYFILEMYDIR然後再次上傳,我會在伺服器端獲得新的權限。

我也嘗試了pam.d解決方案,但沒有任何改變。

所以現在我很困惑:

根據我的測試和閱讀的部分內容,我會說 OpenSSH 始終保留權限。但是由於有很多文章說可以定義 umask,我可以想像我在測試配置中做錯了事。

我會很感激一些有經驗的回饋。

謝謝你。

首先,umask 是關於伺服器而不是客戶端的。所以詢問putOpenSSH 客戶端的命令是否使用 umask 是錯誤的。由於 SFTP 上傳而創建文件時,您應該詢問 OpenSSH 伺服器是否使用 umask。

無論如何,OpenSSH SFTP 客戶端的作用是:

  • put沒有-P標誌,它要求伺服器創建一個與本地文件具有相同權限的文件。然後 OpenSSH 伺服器(通過 *nix 規則隱式)應用 umask。
  • put使用該-P標誌,它以相同的方式啟動,但在上傳完成後,客戶端要求伺服器明確(重新)將權限設置為與本地文件具有相同的權限(“chmod”請求)。對於“chmod”,umask 不適用。
  • mkdir,它要求伺服器創建一個權限為 0777 的目錄。umask 隱式應用。

無論如何,我相信 umask 0002 對權限為 0600 的文件沒有影響,因為它們是互斥的。您應該針對具有 0644 等權限的文件嘗試使用 umask。

所以實際上,如果您按照描述的方式配置系統,它應該可以工作。從我的盒子中查看證據(帶有 OpenSSH 6.2p2 的 Ubuntu)

Match user user2
 ChrootDirectory /home/user2/chroot
 ForceCommand internal-sftp -u 0077
 AllowTcpForwarding no
 PermitTunnel no
 X11Forwarding no

put查看vs.之後的權限差異put -P

user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser    0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password: 
Connected to localhost.
sftp> cd somefolder 
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-------    1 1003 1001    0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-r--r--    1 1003 1001    0 Oct 23 15:34 file.txt

順便說一句,最新的 SFTP 規範定義了客戶端和伺服器關於 umask 的行為。如您所見,OpenSSH 實際上違反了這一點,儘管 OpenSSH 實現了 SFTP 版本 3,但尚未提及 umask。

7.6. 權限

伺服器不應該對模式位應用“umask”;但應設置客戶端指定的模式位。客戶端必須在發送模式位之前應用適當的“umask”。

引用自:https://serverfault.com/questions/639042