Kullanıcı1'in şifresiz “su - user2” yapmasına izin ver


51

martinKullanıcının martin-testşifre olmadan kullanıcıya geçmesine izin vermem gerekiyor

su - martin-test

Bunun yapılandırılabileceğini düşünüyorum /etc/pam.d/su. Zaten bu dosyada uncommented olabilecek bazı çizgiler var. Ancak, martingruba kullanıcı ekleme fikrinden hoşlanmıyorum wheel. martinGeçebileceğimden daha fazla ayrıcalık vermek istemiyorum martin-test. Ben de kullanmak istemiyorum sudo.

Kullanıcı ayrıcalıklarını martinminimumda tutarken bunu yapmanın en iyi yolu ne olabilir ?


2
Bu, sudoörneğin ile yapmak daha kolaydır sudo -u martin-test -i. Özellikle sormak için bir neden var sumı?
jordanm

sudoSadece bu yüzden yüklemek istemiyorum (normalde kullanmıyorum sudove özellikle hoşuma gitmiyor). Ve bunu kullanmanın pamdaha temiz ve daha şeffaf bir yol olduğunu düşünüyorum.
Martin Vegter,

3
@MartinVegter Senaryo cevabından da anlaşılacağı gibi, bunu bir çeşit pam mekanizması ile yapmak çok çirkin. Gerçekten bu tam olarak ne anlama sudogeldiğiydi. Normal olarak kullanmamanın dışında itirazlar nelerdir?
Patrick,

1
Temiz bir çözüm mümkün ise pam, bunu tercih ederim sudo. sudoTek olasılık buysa , bundan da iyidir. İtirazlarım sudoçoğunlukla ideolojiktir: Kullanıcının yönetim yaptığı fikrinden hoşlanmıyorum sudo foo. Yönetim yapmam gerektiğinde, root olarak giriş yapıyorum. Aksi takdirde kullanıcı olarak oturum açıyorum, Bu iki farklı rol karıştırılmamalıdır. Ayrıca, zaten pamaltyapı yüklü. setuidGüvenlik hataları doğurabilecek başka bir program kurmak istemiyorum .
Martin Vegter

5
@ MartinVegter sudo fooBelirli komutlar için yapmanız gerekmez . Sudo sudo -shangi bir kabuk başlatacak vardır . sudo, bazı pam hilelerinden çok daha fazla güvenlik sağladığının anlamı olan çok yaygın bir yardımcı programdır . Ayrıca, görevler için bir kök kabuğu almanın, belirli komutları başlatmaktan çok daha güvensiz olduğunu savunuyorum. Bir kabuk başlattığınızda, her şeyi kök olarak çalıştırırsınız . Bu şeylerden herhangi birinin (basit gibi ls) bir güvenlik açığı varsa, o zaman bir güvenlik açığı açtınız.
Patrick

Yanıtlar:


61

Aşağıdaki satırları, pam_rootok.sosatırın hemen altına ekleyin /etc/pam.d/su:

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin

Bu çizgiler pam_succeed_if.somodülü kullanarak kontrol eder . Ayrıca , çizgiler hakkında daha fazla bilgi edinmek için Linux-PAM yapılandırma dosyası sözdizimine bakın auth.

  • İlk satır olmadığını denetler hedef kullanıcı olduğunu martin-test. Öyleyse, hiçbir şey olmuyor ( success=ignore) ve mevcut kullanıcıyı kontrol etmek için bir sonraki satıra devam ediyoruz . Değilse, bir sonraki satır atlanacak ( default=1) ve normal kimlik doğrulama adımlarıyla sonraki satırlarda devam ediyoruz.
  • İkinci satır, geçerli kullanıcının olup olmadığını kontrol eder martin. Eğer öyleyse, sistem kimlik doğrulama işlemini başarılı olarak görür ve return ( sufficient). Değilse, hiçbir şey olmuyor ve normal kimlik doğrulama adımlarıyla sonraki satırlarda devam ediyoruz.

Ayrıca subir grubu kısıtlayabilirsiniz , burada grup şifre olmadan allowedpeopleyapabilirsiniz su:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople

1
Eğer belli bir grupta ise yetkilendirmek istiyorsanız: Yeterli pam_succeed_if.so kullanıcı içgrup GRUBU auth
shrimpwagon

@gnp Süper Teşekkürler !! İCinga üzerinde nrpe ile çalışmak, bazı komutları farklı kullanıcı olarak çalıştırmak zorunda! Çok yardımcı oldum !!!!!! Teşekkürler!!!!!
saravanakumar


Değişikliklerin nasıl uygulanacağına dair bilgi eklemek iyi olurdu.
Kyslik

@Kyslik ne demek istiyorsun? Gerekli dosyaların nasıl düzenleneceğine ilişkin talimatlar cevabında ...
GnP

12

Grupları değiştirmek veya kullanmak istemiyorsanız sudo, pam_execharici komut dosyalarını bir pam aşamasında yürütmek için adı verilen bir pam modülü kullanın .

Satırdan /etc/pam.d/susonraki satırınıza bir satır ekleyin pam_rootok.so:

auth       sufficient pam_exec.so quiet /path/to/script

/path/to/script 755 (rwxr-xr-x) izinlerine ve aşağıdaki içeriğe sahiptir:

#!/bin/bash
if [ "$PAM_TYPE" == "auth" ] && \
[ "$PAM_USER" == "martin-test" ] && \
[ "$PAM_RUSER" == "martin" ]; then
  exit 0
else
  exit 1
fi

Öyleyse, bu senaryo başarıyla var ise su:

  • kimlik doğrulama bağlamında denir,
  • arayan kullanıcı martinve
  • kimliği doğrulamak için kullanıcı martin-test.

Görmek:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 

1
pam_access, bir betiğe güvenmeden benzer işlevsellik sağlamak için kullanılabilir. (pam_access yapmak için yapılan şey budur)
jsbillings

1
@ jsbillings Bunu (bazı detayları ile) başka bir cevap haline getirir misiniz?
Hauke ​​Lager

1
Durumumdan /etc/pam.d/sufaydalanabilmem için nasıl değişiklik yapmalıyım pam_access?
Martin Vegter

3
@ jsbillings Aslında pam_accessbunu yapamaz. Ne zaman suPam yığını geçiyor, bu kadar değiştirirken kullanıcı, değil geçiyorsanız kullanıcı şekilde yapıyor. Aşağıdaki gibi bir kural eklemek Yani + : martin : ALL, bu sağlayacaktır herkes değişiyor için martin . Eğer değiştirseniz bile martinüzere martin-test, hala herkes bunu izin verir. Hem geldiğiniz kullanıcıyı, hem de değişmekte olduğunuz kullanıcıyı analiz etmeniz gerekir. Gerçekten, bu tam olarak ne sudoiçin ...
Patrick

0

Kök hesaba erişiminiz yoksa, ancak bir komutu çalıştırmak için kullanmak istediğiniz kullanıcının şifresine sahipseniz, aşağıdakileri yapabilirsiniz.

  • Bu size toto'nun şifresini soracak: su - toto -c whoami
  • Bu olmaz: ssh toto @ localhost whoami

Sadece genel anahtarınızı toto onaylı anahtarlarına yükleyin.


Düşünceli cevap .. Ancak, birisinin koşmayı denemek istediği komut zaten makinede. Yani aynı sunucuya sshing hiçbir anlamı yoktur.
Raja Anbazhagan

-1

Benim basit çözümüm:

sudo login -f martin-test

Her ne pahasına olursa olsun sudo'dan kaçınmak istiyorsanız, bunu bir betiğe koymak mümkün olmalı.

  1. root'a ve root haklarına sahip ( setuid bayrağını kullanarak )
  2. sudo olmadan da herkes tarafından uygulanabilir.

Ancak, bunun gerçekten çalışmasını sağlamak için chown rootve chmod +s ToTest.shbitlerini çözemiyorum:

#!/usr/bin/env bash
echo howdy, I am $(whoami)
sudo login -f martin-test

Yankı bana söylediği gibi hala normal kullanıcım olarak çalışıyorum. Ve hala sudo şifresi gerektirir. Kök olarak çalışıyor olsaydı sudo, son satırda biri kaçabilirdi ...


Bir kabuk (veya başka bir komut dosyası) betiğindeki setuid bayrağı Linux'ta ve iyi nedenlerden dolayı çalışmaz. Çalışan bir suid bayrağına sahip olan yukarıdaki betiğin hemen bir tuzak olacağına dikkat edin: "env" üzerinden bash yapar (kendi kendini yenerek), çünkü nerede basholduğunu bilmediğinizi düşünürseniz, nerede envolduğunu veya neden olduğunu bildiğinizi varsayarsınız. var olup olmadığını bile?). Fakat sonunda, bashbunun tam olarak ne olacağını bilmiyorsunuz . Çağrılan kullanıcının dizininden gelebilir ve kaynak kodundan bir dakika önce derlenmiş olabilir. Nereye gittiğimi gördün mü? Veya kullanıcı geçersiz kılabilir whoami...
David Tonhofer

Beynim şu anda bu konulardan tam olarak kavramak için çok uzakta, ancak ayrıntılı açıklamalar için hala teşekkür ediyor.
Frank Nocke
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.