Saya telah mencari cara untuk setup OpenSSH umask untuk 0027
secara konsisten di semua jenis koneksi.
Berdasarkan jenis koneksi yang saya maksudkan:
- sftp
- scp
- ssh nama host
- program nama host ssh
Perbedaan antara 3. dan 4. adalah bahwa yang pertama memulai sebuah shell yang biasanya membaca /etc/profile
informasi sementara yang terakhir tidak.
Selain itu dengan membaca posting ini saya menjadi sadar akan opsi -u yang hadir dalam versi OpenSSH yang lebih baru. Namun ini tidak berhasil.
Saya juga harus menambahkan itu /etc/profile
sekarang termasuk umask 0027
.
Poin demi poin:
- sftp - Pengaturan
-u 0027
disshd_config
seperti yang disebutkan di sini , tidak cukup.
Jika saya tidak mengatur parameter ini, sftp menggunakan secara default umask 0022
. Ini berarti bahwa jika saya memiliki dua file:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Ketika saya menggunakan sftp untuk meletakkannya di mesin tujuan, saya benar-benar mendapatkan:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
Namun ketika saya mengatur -u 0027
pada sshd_config
mesin tujuan saya benar-benar mendapatkan:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
yang tidak diharapkan, karena sebenarnya harus:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
Adakah yang mengerti mengapa ini terjadi?
scp - Secara independen dari apa yang diatur untuk sftp , izin selalu
umask 0022
. Saat ini saya tidak tahu bagaimana cara mengubahnya.ssh hostname - tidak ada masalah di sini karena shell membaca
/etc/profile
secara default yang berartiumask 0027
dalam pengaturan saat ini.ssh hostname program - situasi yang sama dengan scp .
Singkatnya, menetapkan umask pada sftp
mengubah hasil tetapi tidak sebagaimana mestinya, ssh hostname
bekerja seperti yang diharapkan membaca /etc/profile
dan keduanya scp
dan ssh hostname program
tampaknya telah di- umask 0022
hardcode di suatu tempat.
Setiap wawasan tentang salah satu poin di atas dipersilahkan.
EDIT: Saya ingin menghindari tambalan yang memerlukan kompilasi openssh secara manual. Sistem ini menjalankan Ubuntu Server 10.04.01 (lucid) LTS dengan openssh
paket - paket dari maverick.
Jawaban: Seperti yang ditunjukkan oleh poige, menggunakan pam_umask melakukan trik.
Perubahan pastinya adalah:
Baris ditambahkan ke /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Juga, untuk mempengaruhi semua shell login terlepas dari apakah mereka sumber /etc/profile
atau tidak, baris yang sama juga ditambahkan /etc/pam.d/login
.
EDIT : Setelah beberapa komentar saya menguji ulang masalah ini.
Setidaknya di Ubuntu (tempat saya menguji) tampaknya jika pengguna memiliki set umask berbeda dalam file init shell mereka (.bashrc, .zshrc, ...), umas PAM diabaikan dan umask yang ditetapkan pengguna digunakan sebagai gantinya. Perubahan tidak /etc/profile
mempengaruhi hasil kecuali jika pengguna secara eksplisit sumber perubahan tersebut di file init.
Tidak jelas pada titik ini apakah perilaku ini terjadi di semua distro.
UsePAM yes
di sshd_config Anda?/etc/profile
. Sesuatu sepertialias umask=/bin/true
Jawaban:
Saya dapat menyarankan mencoba 2 hal:
sumber
sudo
atausudo su
atau sejenisnya.Berikut adalah solusi yang akan memungkinkan Anda melakukan apa yang Anda inginkan berdasarkan per pengguna. Ini hanya menggunakan
sshd
fitur asli dan tidak perlu mucking dengan tambalan yang dikelola secara lokal. Solusi ini memanfaatkanForceCommand
perilaku sshd untuk menyisipkan skrip pengaturan lingkungan ke setiap koneksi ssh, dan kemudian menjalankan perintah asli.Pertama, buat skrip di suatu tempat di sistem Anda dengan konten berikut:
Untuk keperluan contoh ini saya akan menganggap Anda telah memanggil ini
/usr/bin/umask-wrapper
.Sekarang, Anda memiliki beberapa opsi dalam pengaturan ini. Jika Anda ingin ini menjadi konfigurasi wajib untuk semua pengguna (yang tampaknya agak tidak mungkin), Anda dapat memodifikasi konfigurasi sshd Anda dengan memasukkan yang berikut:
Jika Anda hanya ingin ini berlaku untuk beberapa pengguna, Anda dapat menggunakan
Match
blok (ini berlaku di akhir Andasshd_config
):Jika Anda ingin ini menjadi perilaku yang dapat dikontrol pengguna, maka Anda dapat menggunakan
command=
opsi dalamauthorized_key
file untuk memilih perilaku ini untuk kunci tertentu. Misalnya, saat menguji ini saya menambahkan entri keauthorized_keys
file saya yang terlihat seperti ini:Dan inilah beberapa hasil tes saya:
Menggunakan
ssh
tanpa perintah:Menggunakan
ssh
dengan perintah:Menggunakan
scp
:Menggunakan
sftp
:Dan begitulah. Saya percaya ini adalah perilaku yang Anda cari. Jika Anda memiliki pertanyaan tentang solusi ini, saya akan dengan senang hati memberikan rincian tambahan.
sumber
command=
memang fitur yang rapi dari ssh.Saya mengambil pendekatan yang sedikit berbeda untuk memusatkan pengaturan.
Ini ditambahkan ke
/etc/pam.d/common-session
:Ini diubah dalam
/etc/login.defs
:sumber
Saya sudah mendapatkan pam_umask untuk bekerja dengan ssh, tetapi tidak dengan scp atau sftp.
Metode wrapper juga tidak melakukan apa pun untuk sftp atau scp. Saya tidak yakin 027 adalah contoh yang baik karena sebagian besar distro telah mengatur umask untuk itu. Coba dengan 002 dan lihat apakah itu berhasil.
sumber
Program yang tidak mengatur umask mereka sendiri mewarisi umask dari aplikasi yang memulai itu. Hentikan sshd sepenuhnya, atur umask Anda ke 0027, lalu mulai lagi. (Anda dapat menambahkan perintah umask di skrip init untuk reboot selanjutnya.)
Diuji untuk bekerja dengan scp.
sumber
umask 0027
(jika mereka membaca/etc/profile
) tetapi restart ssh tidak mempengaruhi scp atau ssh.Jika
pam_umask
tampaknya tidak mempengaruhi sesi SFTP Anda, maka periksa apakahUsePam
diatur keYes
dalam/etc/ssh/sshd_config
file.Jika Anda telah menonaktifkan otentikasi kata sandi dan
UsePam
ditetapkan atau tidak diubah keNo
. Anda mungkin ingin mengaturChallengeResponseAuthentication No
dalamsshd_config
file karena jika tidak, Anda dapat secara tidak sengaja mengaktifkan otentikasi kata sandi melalui sistem itu.sumber
Catatan tambahan untuk jawaban pengguna188737 di atas:
Ini mungkin tidak perlu dikatakan, tetapi jika Anda tidak menggunakan paket openssh-server , dan telah secara manual mengkompilasi OpenSSH, pastikan Anda "Aktifkan dukungan PAM" dengan melewati
--with-pam
flag konfigurasi.Jika tidak,
UsePAM=yes
di sshd_config, ditambah perubahan apa pun untuk/etc/pam.d/*
secara efektif akan diabaikan olehsshd
.Akhirnya saya sadar mengapa tidak ada solusi PAM yang direkomendasikan yang mempengaruhi pengujian melalui koneksi SFTP non-interaktif ...
sumber
Karena umask diwarisi dari proses induk, pada sistem Slackware yang digunakan
/etc/rc.d/rc.sshd
untuk memulai / menghentikan / memulai kembali sshd, Anda dapat dengan mudah menempatkannyaumask 0027
pada baris langsung di atas "sshd_start" atau "sshd_restart", atau sebagai alternatif, pada titik mana pun sebelum bagian eksekusi utama dimulai, di/etc/rc.d/rc.sshd
:Atau, sebagai alternatif, di bagian atas file:
sumber
Saya baru saja menguji kemungkinan peningkatan opsi larsks sshd_config pada solaris 11
Setup grup dengan pengguna yang akan dikelola dan pindahkan skrip ke file konfigurasi itu sendiri, dalam kasus saya saya ingin mengatur umask ke 0002.
konfigurasi yang dihasilkan menjadi ....
sumber
Saya telah bergumul dengan masalah ini, khususnya dengan izin file setelah menyalin file menggunakan scp , dan akhirnya saya sadar untuk hanya menggunakan ssh untuk mengubah izin setelah salinan.
Ini solusinya:
localhost$ scp filename remotehost:umask-test/filename
localhost$ ssh remotehost "chmod go+r umask-test/filename"
Terbaik dari semua, tidak ada akses root diperlukan untuk mempengaruhi solusi ini.
sumber