Kullanıcının içeriğini görmeden bir kabuk betiği çalıştırmasına izin verilsin mi?


1

Bir gmail hesabı kullanarak e-posta gönderen bir kanca olması istiyorum. Açıkçası, bende veya root dışında e-posta gönderen betiği okuyabilmek istemiyorum, çünkü içinde bir şifre var, işte denedim:

-rwsr-xr-x  1 james james   58 Feb 18 12:05 incoming.email.sh
-rwx--x--x  1 james james  262 Feb 18 12:04 send-incoming-email.sh

incoming.email.shkanca olarak yürütülen dosya nerede :

#! /bin/bash
/path/to/send-incoming-email.sh

Ancak, başka bir kullanıcı olarak çalıştırmayı denediğimde hatayı alıyorum:

/bin/bash: /path/to/send-incoming-email.sh: Permission denied

send-incoming-email.shBen kendim olarak çalıştırdığınızda dosya gayet iyi çalışıyor.

Yapmaya çalıştığım şey mümkün mü, yoksa bir kabuk betiğinden yürütülen komutlara yayılmayacak mı?

Sistem Ubuntu 10.04.2 LTS'dir.

Yanıtlar:


3

Çözümünüzün olduğu gibi çalışması gerekirse, basit bir kesmek, kabuk betiği yerine kısa bir C programı kullanmak olacaktır:

int main(){
setuid(geteuid());
system("/path/to/send-incoming-email.sh");
}

Ve o setuid var, böylece yarış koşullarından kaçınır ve aynı zamanda betiğin yürütülmesini root olarak atmanıza izin verir.

Bu, şu ana kadarki en iyi çözüm değil, ancak sorunu tanımlandığı gibi çözecektir.


setuid(geteuid())gerekli, öyle görünüyor.
Grawity

Oldukça doğru, iyi yakalayış! Bunu yansıtacak şekilde düzenlendi.
Jeremy Sturdivant

Başka bir kullanıcı olarak çalıştırdığınızda Yine de izin reddedildi olsun: /bin/bash: /path/to/send-incoming-email.sh: Permission denied(izinler: -rwsr-xr-x 1 james james 7227 Feb 18 16:45 incoming.email)
James

Açıklığa kavuşturmak için, başka bir kullanıcıdan incoming.email kullanıyorsunuz ve bu mesaj sonuçlandı Setuid işlemini test etmek için gelen e-posta betiği yerine "id" çalıştırmayı deneyin ve gelen e-posta betiğinin doğrudan kullanıcınızdan çalıştığından emin olun.
Jeremy Sturdivant

2

Linux, setuidolası yarış koşullarından kaçınmak için kabuk komut dosyalarının bitini görmezden gelecektir .


Unix / Linux sistemlerinde e-posta göndermenin "uygun" yolu, Postfix , Exim4 veya Sendmail gibi bir MTA'yı yapılandırmak ve SMTP kimlik doğrulama karmaşasını işlemesine izin vermektir. - aynı zamanda "röle okunur" MTAs vardır esmtp , msmtp , SSMTP . Bunların tümü, örneğin Gmail sunucuları üzerinden SMTP geçişini ("smarthost") kimlik doğrulama ile yapabilir. Çok kullanıcılı bir makinede daha zor hale gelir, ancak yine de uygulanabilir.

(Bir MTA yapılandırıldığında, veriyi ileterek bir e-posta gönderme yapılır /usr/sbin/sendmail rcpt@address.)

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.