Farklı kullanıcı ve koşu ekranı olarak sudo


167

Bugün çalıştığım ekranın farklı bir kullanıcı olarak çalıştığını öğrendim!

yani

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails: Cannot open your terminal '/dev/pts/0'

"Monitor" kullanıcısı olarak çalışan bir betiğim var. Çıktıyı ekranda görmek için bir ekran oturumunda çalıştırıyoruz. Sorun şu ki, kendi hesabına giriş yapan çok sayıda kullanıcımız var (yani, bob, james, susie, vb ...) ve sonra "monitor" kullanıcısına sudo yaptılar. Onlara "monitör" kullanıcısına erişim izni verilmesi söz konusu değildir.


13
Aldığınız hata bu mu? "'/ Dev / pts / 0' terminalinizi açamıyor - lütfen kontrol edin."
Jim,

evet bu o. Neden olduğunu anlıyorum ama bir geçici çözüm var mı?
luckytaxi

4
Komutlarınız hakkında bir yorum - İnsanların çalıştığını görüyorum sudo su "user" -. Neden kullanmaz sudo -u user -s?
Andrew Aylett

2
@Jim: Eksik hata mesajını sağlamak için +1.
Dennis Williamson,

1
@Andrew Çoğu erkek tanıyorum sudo su- bence insanların alıştıkları şey buydu (benim durumumda herhangi bir sudo bayrağı bilmene gerek yok çünkü sudo su- sudo man sayfasını okudum sanmıyorum :)
voretaq7

Yanıtlar:


245

Ekranı başlatmadan önce kullanacağınız script /dev/nullkullanıcı olarak çalıştırmayı deneyin su- bu bir getto küçük kesmesidir, ancak ekranı mutlu etmelidir.


5
Re: güvenlik çıkarımları, hiçbiri farkında değilim (ama bunun hiç olmadığı anlamına gelmez :) - IIRC bu, yeni bir terminal cihazı açmanın "script" in yan etkisine dayanır (kullanıcı çağırırken). ve betiğin çıktısını / dev / null dizinine gönderdiğinizden beri yakalayacak hiçbir şey yok. Ayrıca, tty grubuna (IMHO) kullanıcı eklemekten kesinlikle daha güvenlidir
voretaq7

2
@nalply Açıkçası, eğer bir Unix sistem yöneticisi iseniz kafa karıştırıcı birden fazla mermi bulmamalısınız - ki bu, scriptbaşlatmak için kullanılabilir screen. O zaman sadece iki kez çıkmanız gerekir (bir kez screen, bir kez için su). ( scriptOkumak için zaman ayırırsanız, bu adam sayfanın sizin için açıklığa kavuşturduğu bir şeydir ...)
voretaq7

10
Ya da sadece koş sudo -u bob script -q -c 'screen -dr myscreen' /dev/null. O zaman çıkacak / ayrılacak sadece bir terminaliniz var.
Andy Shulman

4
Teşekkürler, bu beni kurtardı. Peki bu neden düzeltiyor? Anladığım kadarıyla stdout'tan ... hiçbir yere kadar her şeyi basıyor. Ve bu bir şekilde ekranı düzeltir.
sudo

3
@sudo İşini yapmak için script, koşturan kullanıcının sahip olduğu kendi tty cihazını açar (bak /devve çalıştırdıktan sonra göründüğünü göreceksiniz script). screendaha sonra bu tty cihazını kapar (çalışan kullanıcının kendisine aittir, screenböylece erişmekte hiçbir sıkıntısı olmaz). Tamamen kesmek işi ama işe yarıyor. Makinelerimden bazılarına baktığımda, ekranın yeni sürümleri göründüğü gibi, setuid-root'u da kuruyor gibi görünüyor, ama etrafta yüzen bir setuid-root çiftinin olduğu anlamına geliyor.
voretaq7

33

Yaptığım screenkullanıcılar için bir sarmalayıcı işlevi kullanıyorum sudo su. Bu, kullanıcılara eklediğim sarmalayıcı işlevidir ~/.bashrc:

İşlev ekranı () {
  / usr / bin / script -q -c "/ usr / bin / ekran $ {*}" / dev / null
}

Bu, kullanmak screenisteyebileceğim tüm seçenekleri ve parametreleri kullanmamı sağlıyor. Bu işlevi sistem genelinde yerleştirmeyi düşünüyorum.


1
Mükemmel çalışıyor. Bu sistem genelinde isteyenler için bunu /etc/bash.bashrc dosyasına eklemenizi tavsiye ediyorum - tüm kullanıcılar arasında çalışıyor.
Someguy123

2
Bu, argümanların doğru şekilde ekrana getirilmemesini, aksi halde iyi bir çözüm sunmayacaktır.
ağustos

7

Yine de ana makineye SSHing olduklarını varsayarak, ~ monitor / .ssh / yetkili_keys dosyasında monitör hesabına erişmesi gereken her kullanıcı için genel ssh anahtarlarını ekleyebilirsiniz. Sonra her kullanıcının uzak makinesinde çalıştırabilirler

ssh -t monitor@remote.machine ekranı -RD


Bu da iyi bir yaklaşım - Yetkili anahtarlar dosyasında zorunlu komutları belirtmeniz gerekecek (luckytaxi'nin "onlara 'izleyici' kullanıcısına söz konusu değil" sorusu açık değilken "yukarıdaki notta) - zorunlu komutlar bunları yalnızca ekran oturumuna ekleme)
voretaq7

2
Cevabımda nasıl konuşacağımdan emin değildim, çünkü "onlara erişim izni vermek ... sorun değil" dedi, ama aynı zamanda "..." monitör "kullanıcısına sızdılar. Ancak katılıyorum, yetkililerdeki komut kısıtlamasını zorlamak buna dikkat etmeli.
Alex,

7

Bu hata hakkında konuştuğumuzu varsayalım:

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.

İşte bir liner (örneğin, "alias gobob" olarak kullanılabilir):

sudo su - bob -c "script -c bash /dev/null"'

Açıklama:

Bu kullanıcı bob olarak bir kabuk (giriş kabuğu gibi) başlayacaktır. scriptBir bash çağırması söylenen ( bob veya ksh olabilir) kullanıcı bob başlar ve oturumun bir kopyası atılır.


0

Muhtemelen söz konusu cihazdaki izinleri değiştirmek veya bu cihazı okuma iznine sahip olan bir gruba monitör eklemek zorunda kalacaktım, bu benim ilk eğilimim olacaktı. Ancak, bunun yapmanın güvenlik etkilerini değerlendirmek zorunda kalacaksınız.


0

Sen diyorsun ki:

sudo su "monitor" -

Sondaki çizgi hakkında merak ediyorum. Genellikle yaparım:

sudo su - username

Çizgi (su adam sayfası başına) suya "kabuğunu bir giriş kabuğu yapmasını" söyler. Bu, normal kabuk başlatma komut dosyalarının tümünü kaynaklayacağı ve PATH ve HOME gibi şeyleri uygun şekilde ayarlayacağı anlamına gelir.


3
Hayır! sudo su - usernameve sudo su username -aynı şeyi yapın.
Tim Ludwinski

-4

Ben sadece bu soruna çarptım. Sudo chmod +rw $(tty)çalıştırmadan önce ile çözüldü . Bu çözümün sorunu, herkesin bundan sonra terminalinize bağlanıp bağlayabilmesidir.


2
Harika bir çözüm gibi geliyor.
Evan Carroll,

10
@EvanCarroll Tüm dünyaya terminaline okuma ve yazma erişimi sağladığı bölüm dışında harika bir çözüm . Sadece küçük bir güvenlik problemi - Elbette şifreleri kabul etmeden önce terminal güvenliğini kontrol eden herhangi bir şey dışında ( gpgörneğin) hiçbir program bunu önemsemez . Ve şüphesiz, asla ttyparolaları izleyen ve
şifreleyen

Dikkatli olun : Bunu asla evde denemeyin! Bu tehlikeli!!!
ruizpauker
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.