Apakah server OpenSSH SFTP menggunakan umask atau mempertahankan izin sisi klien setelah menempatkan perintah (lingkungan chroot)?

13

Saya tahu pertanyaan ini sudah dibahas, tetapi dengan membaca posting saya tidak dapat menemukan jawabannya, karena beberapa mengatakan "ya umask dapat bekerja", dan yang lain mengatakan "OpenSSH menempatkan perintah selalu menjaga izin"

Sebelumnya hanya untuk tepat:

  • Saya menggunakan OpenSSH 5.9 pada RHEL 6.2
  • Saya telah mengkonfigurasi server SFTP chroot, menggunakan internal-sftpsubsistem, dengan -u 0002untuk umask
  • Saya tepat saya tidak menggunakan opsi -patau-P

Dari apa yang saya baca di satu sisi: ada banyak cara untuk mendefinisikan umask untuk transfer SFTP:

  • option -udari internal-sftp(atau sftp-server), karena OpenSSH 5.4
  • buat wrapper untuk sftp-server(di mana kami secara eksplisit mengatur umask - ini tidak cocok untuk lingkungan chroot btw)
  • tambahkan konfigurasi tertentu dalam pam.d/sshdfile

Di sisi lain saya telah membaca:

Klien dan server OpenSSH SFTP melakukan transfer izin (sebagai ekstensi) dan membuat file jarak jauh dengan izin di sisi lokal. AFAICT, tidak ada cara untuk menonaktifkan perilaku ini.

Jadi saya melakukan tes berikut:

Di klien saya, saya membuat file MYFILEdan direktori MYDIRdengan izin 600 dan 700.

Kemudian dengan sftpperintah:

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)

Jika saya mengubah izin dari MYFILEdan MYDIRdi sisi klien, dan mengunggah lagi, saya mendapatkan izin baru di sisi server.

Saya mencoba pam.dsolusinya juga, tetapi tidak mengubah apa pun.

Jadi sekarang saya bingung:

Dari apa yang saya uji dan bagian dari apa yang saya baca, saya akan mengatakan OpenSSH selalu menjaga izin. Tetapi karena ada banyak posting yang mengatakan bahwa umask dapat didefinisikan, saya dapat membayangkan saya melakukan hal yang salah dalam konfigurasi pengujian saya.

Saya akan menghargai umpan balik yang berpengalaman.

Terima kasih.

drkzs
sumber

Jawaban:

12

Pertama, umask adalah tentang server, bukan klien. Jadi menanyakan apakah putperintah klien OpenSSH menggunakan umask salah. Anda harus bertanya apakah server OpenSSH menggunakan umask saat membuat file sebagai hasil dari pengunggahan SFTP.

Bagaimanapun, apa yang dilakukan klien OpenSSH SFTP:

  • puttanpa -Ptanda, ia meminta server untuk membuat file dengan izin yang sama seperti yang dimiliki file lokal. Server OpenSSH kemudian (secara implisit oleh aturan * nix) menerapkan umask.

  • putdengan -Pflag, dimulai sama, tetapi setelah pengunggahan selesai, klien meminta server untuk secara eksplisit (kembali) mengatur izin ke file lokal yang sama yang memiliki ("chmod" permintaan). Untuk "chmod", umask tidak berlaku.

  • mkdir, ia meminta server untuk membuat direktori dengan izin 0777. Umask secara implisit berlaku.

Bagaimanapun, saya percaya bahwa umask 0002 tidak berpengaruh pada file dengan izin 0600, karena ini saling eksklusif. Anda harus mencoba umask Anda terhadap file dengan izin seperti 0644.

Jadi sebenarnya, itu harus bekerja, jika Anda memiliki sistem Anda dikonfigurasi seperti yang Anda jelaskan. Lihat bukti dari kotak saya (Ubuntu dengan OpenSSH 6.2p2)

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

Melihat perbedaan dalam izin setelah putvs 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

Btw, spesifikasi SFTP terbaru mendefinisikan perilaku klien dan server mengenai umask. Seperti yang Anda lihat, OpenSSH sebenarnya melanggar itu, meskipun OpenSSH mengimplementasikan SFTP versi 3 yang belum menyebutkan umask.

7.6. Izin

...

Server TIDAK HARUS menerapkan 'umask' ke bit mode; tetapi harus mengatur bit mode seperti yang ditentukan oleh klien. Klien HARUS menerapkan 'umask' yang sesuai ke bit mode sebelum mengirimnya.

Martin Prikryl
sumber
Saya sudah mencoba dengan banyak izin berbeda, pada awalnya saya memiliki 755 untuk direktori saya di sisi klien, dan ingin mendapatkan 775 sebagai gantinya. Tapi itu tidak berhasil. Saya setuju dengan Anda untuk -P dengan membaca dokumentasi, tetapi bahkan tanpa bendera itu saya selalu mendapatkan di server izin yang sama dari klien (apa pun izinnya)
drkzs
terima kasih atas komentarnya, saya mencoba meningkatkan judul dan memperbaiki beberapa istilah
drkzs
Seharusnya benar-benar berfungsi, lihat pembaruan saya.
Martin Prikryl
Ya, contoh Anda tidak berfungsi ... tetapi jika Anda mengubah umask ke 0002 itu tidak lagi. Mungkin posting ini menimbulkan masalah yang sama? kecuali fakta saya di openssh5.9 dan opsi umask harus bekerja. Perbedaan antara dengan konfigurasi SSHD Anda dan milik saya adalah bahwa saya tidak menggunakan ForceCommand, jadi saya menentukan umask di baris subsistem. (Saya akan mencoba memposting konfigurasi dan hasilnya, tetapi tes jaringan tidak mudah dijangkau)
drkzs
1
Untuk memperjelas hal itu: The server SHOULD NOT apply a 'umask' hanya berlaku ketika klien mengirimkan izin-informasi . Ketika klien tidak mengirim informasi izin, itu perilaku yang diharapkan untuk menerapkan umask!
heiglandreas