Her tür bağlantı için ssh's umask nasıl kurulur


34

Ben kurulum OpenSSH en için bir yol arıyor oldum Umask için 0027tüm bağlantı türleri arasında tutarlı bir şekilde.

Bağlantı türlerine göre:

  1. sftp
  2. scp
  3. ssh ana bilgisayar adı
  4. ssh ana bilgisayar adı programı

3. ve 4. arasındaki fark, birincisinin, /etc/profilebilgiyi okumazken genellikle bilgileri okuyan bir kabuk başlatmasıdır .

Ayrıca bu yazıyı okuyarak , OpenSSH'nin yeni sürümlerinde mevcut olan -u seçeneğinin farkında oldum. Ancak bu işe yaramıyor.

Ayrıca /etc/profileşimdi içerdiğini de eklemeliyim umask 0027.

Gidiyor nokta nokta:

  • sftp - Burada belirtildiği gibi ayar -u 0027yapmak yeterli değildir.sshd_config

Bu parametreyi ayarlamazsam, sftp varsayılan olarak kullanır umask 0022. Bu, iki dosya varsa, yani:

-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

Onları hedef makineye koymak için sftp kullandığımda aslında alıyorum:

-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

Ancak ayarladığınızda -u 0027üzerinde sshd_configAslında olsun hedef makinenin:

-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

olması beklenmiyor, çünkü olması gerektiği gibi:

-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

Bunun neden olduğunu anlayan var mı?

  • scp - sftp'nin ayarlarından bağımsız olarak izinler her zaman olur umask 0022. Şu anda bunun nasıl değiştirileceği hakkında hiçbir fikrim yok.

  • ssh ana bilgisayar adı - burada geçerli kurulum /etc/profileanlamına gelen kabuk varsayılan olarak okuduğu için sorun yok umask 0027.

  • ssh ana bilgisayar adı programı - scp ile aynı durum .


Özetle, üzerinde izin maskesini ayarlama sftpkişiliklerinden sonucu ama olması gerektiği gibi değil, ssh hostnamebeklendiği okuma gibi çalışır /etc/profileve hem scpve ssh hostname programgörünüyorlar umask 0022bir yerlerde kodlanmış.

Yukarıdaki hususların herhangi birine ilişkin herhangi bir görüş açıktır.

EDIT: Elle openssh derleme gerektiren yamalardan kaçınmak istiyorum. Sistem, opensshmaverick paketleriyle Ubuntu Server 10.04.01 (lucid) LTS kullanıyor .

Cevap: poige tarafından belirtildiği gibi, pam_umask kullanarak numarayı yaptı.

Kesin değişiklikler şunlardı:

Eklenen satırlar /etc/pam.d/sshd:

# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session    optional     pam_umask.so umask=0027

Ayrıca, kaynak olup olmadıklarına bakılmaksızın tüm giriş kabuklarını etkilemek /etc/profileiçin aynı satırlara da eklenmiştir /etc/pam.d/login.

EDIT : Bazı yorumlardan sonra bu konuyu tekrar test ettim.

En azından Ubuntu'da (test ettiğim yerde), eğer kullanıcının kabuğunun init dosyalarında (.bashrc, .zshrc, ...) ayarlanmış farklı bir umask varsa, PAM umask'ı yok sayılır ve bunun yerine kullanıcı tanımlı umask kullanılır. Bu değişiklikler /etc/profile, kullanıcı init dosyalarındaki değişiklikleri açıkça belirtmediği sürece sonucu etkilememiştir.

Bu noktada tüm davranışlarda bu davranış olup olmadığı açık değildir.


Unode: "openssh'ın elle derlenmesini gerektiren yamaları önlemek istiyorum." Neden?
desasteralex

5
@desasteralex - Çünkü (eğer mümkünse) Kaynak tabanlı paketlere sahip olan ek bir bakım / yönetim görevine sahip olmaktan kaçınmak istiyorum ve çünkü openssh'i yama dışında başka bir yöntem kullanmanın başka bir yolu olmadığına inanmakta zorlanıyorum. Özel olarak düşünmek, herhangi bir sistem için oldukça temel bir güvenlik özelliğidir.
35'te

1
/Etc/pam.d/sshd (ve login) komutunu değiştirdikten ve ssh'yi yeniden başlattıktan sonra, davranış değişikliği göremiyorum. Burada belirtilen ancak ima edilmeyen başka ihtiyaç duyulan değişiklikler var mı?
Steve Clay

@mrclay - UsePAM yessshd_config'inizde var mı?
15’te

1
Kullanıcının .bashrc problemini çözmek için, içindeki umask komutunu takma adı kullanmayı deneyin /etc/profile. Gibi bir şeyalias umask=/bin/true
Tobia

Yanıtlar:


22

2 şeyi denemeyi önerebilirim:

  1. pam_umask
  2. LD_PRELOAD sarmalayıcısı (kendi kendine yazılmış?)

1
+1, pam_umask bugüne kadarki en basit çözüm gibi görünüyor
Flexo

pam_umask hile yapar. Cevabını yansıtmak ve hazırlamak soru Düzenlendi
Unode

Sadece stackoverflow.com/q/10220531/220060 kullanın . Ancak dikkatli olun, eğer bir şeyi yanlış yazarsanız, kendinizi sunucudan kilitlersiniz. Geçerli oturumunuzu kapatmadan önce her zaman tekrar giriş yapıp yapamayacağınızı kontrol edin.
saat

1
@Nalply tarafından yorumuna Ekleme: Bir yedek var emin olun kök , oturum açıyorlar kırma PAM aracı beri mümkün olmayacaktır sudoya sudo suya da benzeri.
Zero3

13

İşte size kullanıcı bazında istediğinizi yapmanıza izin verecek bir çözüm. Yalnızca yerel sshdözellikleri kullanır ve yerel olarak bakılan yamalar ile uğraşmayı gerektirmez. Bu çözüm, ForceCommandher ssh bağlantısına bir ortam kurulum komut dosyası eklemek ve ardından orijinal komutu çalıştırmak için sshd davranışından yararlanır .

İlk önce, sisteminizde bir yerde aşağıdaki içeriklere sahip bir komut dosyası oluşturun:

#!/bin/sh

umask 0027
exec /bin/sh -c "${SSH_ORIGINAL_COMMAND:-$SHELL}"

Bu örneğin amaçları için bunu aradığınızı varsayacağım /usr/bin/umask-wrapper.

Şimdi, bunu ayarlamak için birkaç seçeneğiniz var. Bunun tüm kullanıcılar için zorunlu bir yapılandırma olmasını istiyorsanız (ki biraz olası görünmüyorsa), sshd yapılandırmanızı aşağıdakileri içerecek şekilde değiştirebilirsiniz:

ForceCommand /usr/bin/umask-wrapper

Bunun yalnızca bazı kullanıcılara uygulanmasını istiyorsanız, bir Matchblok kullanabilirsiniz (bu işlem sizin sonuna gider sshd_config):

Match User user1,user2
ForceCommand /usr/bin/umask-wrapper

Bunun kullanıcı tarafından kontrol edilebilir bir davranış olmasını istiyorsanız, o zaman belirli tuşlar için bu davranışı seçmek command=üzere bir authorized_keydosyadaki seçeneği kullanabilirsiniz . Örneğin, bunu test ederken authorized_keys, dosyama şuna benzeyen bir giriş ekledim :

command="/home/lars/bin/umask-wrapper" ssh-rsa AAAAB3NzaC1 ... umask-test

Ve işte testimin bazı sonuçları:

Komutsuz kullanarak ssh:

localhost$ ssh remotehost
remotehost$ touch umask-test/file1
remotehost$ ls -l umask-test/file1
-rw-r-----. 1 lars lars 0 Feb  2 06:02 file1

sshBir komutla kullanma :

localhost$ ssh remotehost touch umask-test/file2
localhost$ ssh remotehost ls -l umask-test/file2
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file2

Kullanarak scp:

localhost$ touch file3
localhost$ ls -l file3
-rw-r--r--  1 lars  staff  0 Feb  2 06:03 file3
localhost$ scp file3 remotehost:umask-test/file3
localhost$ ssh remotehost ls -l umask-test/file3
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file3

Kullanarak sftp:

localhost$ sftp remotehost
sftp> put file3 umask-test/file4
sftp> ls -l umask-test/file4
-rw-r-----    0 500      500             0 Feb  2 06:05 umask-test/file4

İşte buyur. Bunun aradığın davranış olduğuna inanıyorum. Bu çözüm hakkında herhangi bir sorunuz varsa, ek bilgi vermekten memnuniyet duyarım.


Her ne kadar bu yöntem işe yarasa da, biraz bakım kabusu gibi görünüyor. Yine de, Pam'in kullanılamadığı durumlar için +1.
Unode

3
Bunları korumanın zor olduğunu bilmiyorum. PAM tabanlı bir çözüme göre birincil avantaj, herhangi bir özel ayrıcalık gerektirmemesidir - bunu, yönetici müdahalesi olmadan kendi hesabınız için ayarlayabilirsiniz.
larsks

Seçilmiş bir kullanıcı listesi tutmayı düşünüyordum, ama aslında bu düz kullanıcı kurulumu üzerinde çalışmanın yönünü fark etmedim. İlk okuduğumda ForceCommand'ın "gerekli" olduğunu ve "onu kurmanın bir yolu" olmadığını düşündüm. command=gerçekten de ssh'ın temiz bir özelliği.
Şubesini

5

Ayarı merkezileştirmek için biraz farklı bir yaklaşım kullandım.

Bu, şunlara eklendi /etc/pam.d/common-session:

session    optional     pam_umask.so

Bu, değiştirildi /etc/login.defs:

UMASK           0027

2

Pam_umask 'ı ssh ile çalışıyorum ama scp veya sftp ile almadım.

Sarıcı yöntemi ayrıca sftp veya scp için hiçbir şey yapmaz. Çoğu dağıtımın buna önceden ayarlanmış olması nedeniyle 027'nin iyi bir örnek olduğundan emin değilim. 002'yi deneyin ve işe yarayıp yaramadığına bakın.


1

Kendi umask'ını ayarlamayan programlar, onu başlatan uygulamanın umask'ını devralır. Sshd'yi tamamen durdurun, maskenizi 0027'ye ayarlayın, sonra tekrar başlatın. (Gelecekte yeniden başlatmak için umask komutunu init betiğine ekleyebilirsiniz.)

Scp ile çalışmak için test edilmiştir.


Üzgünüm DerfK, ancak bu başarı olmadan denediğim ilk şeylerden biriydi. Tüm oturum açma kabukları var umask 0027( /etc/profileokurlarsa), ancak ssh'yi yeniden başlatmak scp'yi veya ssh'yi etkilemez.
11’ü

1

Eğer pam_umaskSFTP oturumları etkileyecek gibi görünmüyor, o zaman kontrol UsePamolarak ayarlanır Yesiçinde /etc/ssh/sshd_configdosyanın.

Parola doğrulamasını devre dışı bıraktıysanız ve UsePamayarlandıysanız veya varsayılan olarak ayarlandıysanız No. Sen ayarlamak isteyebilirsiniz ChallengeResponseAuthentication Noiçinde sshd_configaksi takdirde yanlışlıkla o sistem üzerinden bir şifre doğrulaması sağlayabilir, çünkü dosyada.


1

Yukarıdaki user188737 kullanıcısının cevabına ek bir not:

Bu demeden gitmek, ama eğer olabilir değil kullanarak openssh-sunucu paketi ve adres elle OpenSSH derlenmiş, emin ileterek "PAM desteği etkinleştir" yapmak --with-pamyapılandırma bayrağı.

Aksi takdirde, UsePAM=yessshd_config dosyasında, artı olarak yapılacak değişiklikler /etc/pam.d/*de dikkate alınmayacaktır sshd.

Sonunda, önerilen PAM çözümlerinden hiçbirinin etkileşimli olmayan SFTP bağlantıları üzerinden test etmeyi neden etkilemediği bana nihayet doğdu ...


1

Umask ana işlemden, sshd'yi /etc/rc.d/rc.sshdbaşlatmak / durdurmak / yeniden başlatmak için kullanılan bir Slackware sisteminde miras alındığından, umask 0027doğrudan "sshd_start" veya "sshd_restart" ın üzerine veya hatta alternatif olarak, herhangi bir noktaya doğrudan bir satıra yerleştirebilirsiniz . ana yürütme bölümü başlar /etc/rc.d/rc.sshd:

case "$1" in
'start')
  umask 0027
  sshd_start
  ;;
'stop')
  sshd_stop
  ;;
'restart')
  umask 0027
  sshd_restart
  ;;
*)

Veya, alternatif olarak, dosyanın üstünde:

#!/bin/sh
# Start/stop/restart the secure shell server:
umask 0027

0

Solaris 11'deki larsks sshd_config seçeneklerinde olası bir iyileşmeyi test ettim.

Yönetilecek kullanıcılarla bir grup oluşturun ve betiği config dosyasının içine taşıyın, benim durumumda umask'ı 0002'ye ayarlamak istedim.

sonuçta ortaya çıkan yapılandırma ....

Match Group managedgroup
ForceCommand /bin/sh -c 'umask 0002; ${SSH_ORIGINAL_COMMAND:-$SHELL}'

0

Bu sorunla, özellikle scp kullanarak bir dosyayı kopyaladıktan sonra dosya izinleriyle uğraşıyorum ve sonunda kopyadan sonra izinleri değiştirmek için sadece ssh kullanmak benim başıma geldi.

İşte çözüm:

  1. Dosyanızı kopyalayın: localhost$ scp filename remotehost:umask-test/filename
  2. Onarım izni: localhost$ ssh remotehost "chmod go+r umask-test/filename"

Hepsinden iyisi, bu çözümü etkilemek için kök erişimi gerekmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.