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