üzgünüm, sudo çalıştırmak için bir tty olmalı


13

Bu soruyu Stack Overflow'da zaten sormuştum , ancak benden buraya göndermem istendi. Aynı şeyi yapıyor.

Bu komutu java programımı kullanarak çalıştırdım.

sudo -u <username> -S pwd

Bu çıktıyı aldım-

command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo

/ Etc / sudoers dosyasını düzenlemeyi denedim ama zaten içeriyor

<username>       ALL=(ALL)       NOPASSWD: ALL

Sonra, bunun / etc / sudoers içinde aşağıdaki kodu yorumlayarak yapılabileceğini öğrendim

# Defaults requiretty

Ayrıca, varsayılan olarak, başka bir kullanıcı olarak bir komutu yürütmeye çalışırken sudo, kendi şifremizi sağlamalıyız. Ancak bu / etc / sudoers-

Defaults targetpw

Benim sorum, yukarıdaki komutumu herhangi bir yerde herhangi bir değişiklik yapmadan, yani varsayılan ayarlara sahip olarak java'da yürütmek mümkün mü?


1
Bu yüzden sudo için oldukça çelişkili Alternatifi mi soruyordunuz ?
slhck

6
requirettyVarsayılan olarak etkinleştirildiyse dağıtım belirli görünüyor . sudoKendi belgelerine göre "varsayılan olarak kapalı" dır.
mpy

Yanıtlar:


3

Java'da kabuk komutlarını nasıl çalıştıracağımı bilmiyorum ama ssh komutu için -t seçeneğine bakıyorum

-t force pseudo-tty allocation.

Komutu ssh üzerinden root olarak çalıştırmam gerektiğinde yaptığım şey (doğrudan root girişini devre dışı bırak ve sudo tarafından gerekli tty)


1
Her ne kadar bu yaklaşım sorunu ilk bakışta çözebilse de, sorunun ne ile ilişkili olduğu açık değildir. Daha ayrıntılı açıklayabilir misiniz?
pabouk

1
Herhangi bir varsayılan ayarı değiştirmeye gerek kalmadan sorunu çözmek için +1.
Luke

1

Benim sorum, yukarıdaki komutumu herhangi bir yerde herhangi bir değişiklik yapmadan, yani varsayılan ayarlara sahip olarak java'da yürütmek mümkün mü?

sudo -u -S pwd

Kısa cevap hayır, sudo'nun işleri şu anda olduğundan farklı yapmasını sağlamak için ayarları değiştirmeniz gerekecektir.

sudo bunun için yanlış araç olabilir. Sudo'nun kuralları, sistem yöneticilerinin ek / istenmeyen ayrıcalıklar elde etmek için kötüye kullanılması zor olan yüksek ayrıcalıklar elde etmenin bir yolunu yapılandırmasına yardımcı olmak için vardır.

Sudo'nun sizin için ne yaptığını düşünüyorsanız:

  1. kimliği doğrulamak için şifre ister
  2. ayrıcalıkları yükseltmek
  3. isteğe bağlı olarak başka bir kullanıcı olarak ayrıcalıklar edinin
  4. erişim kazanmak veya komutları çalıştırmak için sudo loglarını kullanır

Java'nızın, bu kullanıcılar veya kendiniz için şifre sağlamadan rastgele komutlar olarak rastgele komutlar çalıştırmasını istiyorsanız, esasen sudo'nun yerini alırsınız. Bu durumda, kötüye kullanımı nasıl önleyeceğiniz konusunda kendi kurallarınızı oluşturmalısınız.

Bunu yapmanın temel olarak iki yolu vardır:

  1. java'nızı yükseltilmiş ayrıcalıklarla çalıştırın ve dikkatle ihtiyacınız olan ayrıcalıkları alıp geri verin (bkz. setuid () seteuid () C işlev çağrıları).
  2. istediğiniz zaman yükseltilmiş ayrıcalıkları almak için harici bir program çalıştırın

# 1 durumunda, java programınız sudo'nun yaptığı şeyi yerine getirir ve kötüye kullanımdan korumak için kendi kurallarınızı uygulamanız gerekir.

# 2 yapmak için sudo dışında programlar var. Bir örnek https://code.google.com/archive/p/exec-wrapper/downloads adresinde bulunabilir.

Bu kullanışlı kabuk komut dosyası, başka bir komut (genellikle komut dosyası) çalıştırmak için bir C programı oluşturur. Daha sonra C programını bir ikili dosyaya derler ve o setuid kökünü işaretler veya gerçekten herhangi bir kullanıcıya setuid olabilir. (mod: 4555 ve sahip: kök)

İzin veren bir dosya sisteminde olduğunuz sürece, ikili programı çalıştırmak, ikili programın kendisine ait olan kullanıcı kimliği olarak yapılandırılmış komutu çalıştırır.

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.