OpenSSH SFTP 伺服器是否在 put 命令(chroot 環境)後使用 umask 或保留客戶端權限?
我知道這個問題已經討論過了,但是通過閱讀文章我無法找到答案,因為有人說“是的 umask 可以工作”,而其他人說“OpenSSH put 命令總是保留權限”
首先要準確地說:
- 我在 RHEL 6.2 上使用 OpenSSH 5.9
- 我已經配置了一個 chrooted SFTP 伺服器,使用
internal-sftp
子系統,-u 0002
用於 umask- 我精確我不使用
-p
or-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)
如果我在客戶端更改和的權限
MYFILE
,MYDIR
然後再次上傳,我會在伺服器端獲得新的權限。我也嘗試了
pam.d
解決方案,但沒有任何改變。所以現在我很困惑:
根據我的測試和閱讀的部分內容,我會說 OpenSSH 始終保留權限。但是由於有很多文章說可以定義 umask,我可以想像我在測試配置中做錯了事。
我會很感激一些有經驗的回饋。
謝謝你。
首先,umask 是關於伺服器而不是客戶端的。所以詢問
put
OpenSSH 客戶端的命令是否使用 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”。