Ubuntu Türkiye

Yazılım => Programlama => Kabuk (sh,bash,*csh,ksh,zsh) => Konuyu başlatan: adubel - 14 Temmuz 2010 - 15:32:44

Başlık: gksu kullanarak root olmak
Gönderen: adubel - 14 Temmuz 2010 - 15:32:44
Merhaba
gksudo "Modüllere Erişmek İçin"
sleep 1
x=`whoami`
echo $x
if [ "$x" = "root" ]; then
echo "oldu"
else
echo "patladı"
fi

şeklinde betiğim var.
Ve sizinde farkedeceğiniz gibi whoami nin cevabı kullanıcı adı olarak geliyor sudo su dediğimiz zamanki gibi root kullanıcına geçemiyorum.
gksu kullanarak nasıl olurda tüm sistemde root olurum. Yani whoami nin cevabı nasıl root olarak gelir. Yardımcı olursanız sevinirim.

Not Değiştirme:yeni denemeler yaptım

visudo daki
Defaults timestamp_timeout=0 dı 3 yaptım
ayrıca gksu komutunun altına sudo su yaztım.
sistemde root oldum fakat kullanıcı değiştiği için betiğim çalışmayı kesti.
kısca sorumu şöyle değiştireyim. Yazdıgım bir betiğin içinde gksu kullanarak (ne yazıkki o pencerenin görünmesi lazım) root şifresinin dogrulugunu nasıl kontrol edebilirim.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: heartsmagic - 14 Temmuz 2010 - 20:23:21
Tam olarak ne yapmak istiyorsun? Ortada biraz karışıklık var gibi. Görünmesi gerekiyor dediğin pencere gksu'nun penceresi mi?
sudo'nun denetlenmesi bile oldukça sıkıntılıyken gksu nasıl olur bilemiyorum fakat senin ilk satırlarda verdiğin betik şeklinde olmaz. Zira sen orada gksu işletiyorsun! (ki onu da anlayamadım, zira ilk satır bir garip) ardından ikinci satırda normal kullanıcı ile whoami çekiyorsun. Normal kullanıcınla yaptığın için haliyle senin kullanıcı adın dönecektir. Alttaki if de patlayacaktır. Bunun yerine betiğin sudo ile çalıştırılıp çalıştırılmadığı denetlenebilir. Ardından işleme devam edilir. Örnek:

if [ `id -u` -eq 0 ]
then
            echo "Root hakkı var."
            nautilus
            else
            echo "Root hakkı yok"
            exit 1
fi


Bu betik sudo ile çalıştırılınca nautilus'u yönetici kipinde açar. sudo'suz çalıştırılırsa nautilus açılmaz.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 14 Temmuz 2010 - 22:31:28
Yanıtın için teşekür ederim.
Yapmaya çalıştıgım şeyi detaylı olarak anlatmaya çalışayım. Kullanıcının root şifresini denetlemeye çalışıyorum. Fakat bunu denetlemek için görsel bir pencere kullanmak zorundayım. root olup olmaması benim için önemli değil. Önemli olan benim onun root şifresini doğru girdiğini anlamam.
Pencere kullanmam gerektiği için aklıma gksudo geldi. Buraya ileti gönderdikten sonra zenitiyle birkaç denemem oldu vede onlarda yukarıdaki yaptıklarım gibi başarısızdı.
Kısacası kullanıcını root şifresinin dogrulugunu denetlemem gerekiyor. Ama forumdaki daha önceki bikaç başlıgımdan da belli oldugu gibi daha yeni bash yazmaya başladım ve hemen cogu yerde tıkanıyorum. Şimdiden teşekür ederim.

Not ilk satırda gksudo "Modüllere Erişmek İçin"
komutu yazdıgım komutlardan bir kısmını kopyala yapıştır yaptıgım için garip gelmiştir."modüllere erişmek için" cümlesi sadece denemeydi
Soruna odaklandıgım için dikkat edememişim:)
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: heartsmagic - 14 Temmuz 2010 - 23:04:41
Benim de kabuk programlamadan pek anladığım söylenemez. Sadece meseleyi daha iyi irdelemek için uğraşıyorum. Bu betik kullanıcının kendisi tarafından mı çalıştırılacak sistem üzerinde, yoksa sen ayrı bir kullanıcı olarak hedefindeki kullanıcı için bir betik mi çalıştıracaksın? Gerçi her iki durumda da parola denetlemesi yapamazsın. Ayrıca kullanıcının root olup olmadığına bakmak istemen de garip olur, zira kullanıcı root ise root'tur :) Bu 1=1'i denetlemek gibi olur. root=root mu? Evet.

Burada mantık yukarıdaki örnekte verdiğim üzere kullanıcının id değerinin o an 0 olup olmadığına bakmandır.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 14 Temmuz 2010 - 23:16:11
Sistem kendisi tarafından çağıracak. Mesela sistemimde ahmet diye bir kullanıcı var. Benim belirlediğim yerlere ulaşmaya çalıştıdında bu betik devreye girecek ve root olup olmadıgını daha dogrusu şifresini doğru girip girmediğini kontrol edecek. Farkındayım yapmaya çalıştıgım şey biraz garip ama yapmak zorundayım:):)
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: ironic - 15 Temmuz 2010 - 00:09:06
İlginç bir istek. Şu şekilde çıktıyı denetleyebilirsin.

Betik işleri yerine diğer kullanıcıların dosya iznini değiştirirsin. Kullanıcı root olmadan dosyayı açamaz.



gksu xxxxx

if [ $? -eq 1 ]; then
    echo "Şifre yanlış"; exit 1
elif [ $? -eq 255 ];  then
      echo "İptal edildi"; exit 1
fi

Başlık: Ynt: gksu kullanarak root olmak
Gönderen: heartsmagic - 15 Temmuz 2010 - 00:40:38
@adubel, açıklama yapmaya çalışmana rağmen yine de kapalı konuşuyorsun. Bu yer dediğin bir dizin mi? Kullanıcı uçbirimden mi ulaşacak, yoksa bir arayüzden mi? sudo ile yetkileri mi almaya çalışacak?
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: sem - 15 Temmuz 2010 - 06:28:04
Alıntı yapılan: adubel - 14 Temmuz 2010 - 23:16:11
Mesela sistemimde ahmet diye bir kullanıcı var. Benim belirlediğim yerlere ulaşmaya çalıştıdında bu betik devreye girecek ve root olup olmadıgını daha dogrusu şifresini doğru girip girmediğini kontrol edecek.
Bilmiyorum yanlış mı anladım da şu takıldı benim kafama da... Kişi belli bir yere girmeye çalıştığı zaman root olup olmadığı kontrol edilecek demişsiniz ya da şifresini doğru girip girmediği... Kişi ilgili dosyalara ulaşmadan önce örneğin "sudo -i" komutu ile root olabilir zaten burada da şifresi komut tarafından kontrol edilecektir. Yani yapmaya çalıştığınız şey aslında zaten yapılmıyor mu?
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: hitokiri - 15 Temmuz 2010 - 07:07:35
Alıntı YapBilmiyorum yanlış mı anladım da şu takıldı benim kafama da... Kişi belli bir yere girmeye çalıştığı zaman root olup olmadığı kontrol edilecek demişsiniz ya da şifresini doğru girip girmediği... Kişi ilgili dosyalara ulaşmadan önce örneğin "sudo -i" komutu ile root olabilir zaten burada da şifresi komut tarafından kontrol edilecektir. Yani yapmaya çalıştığınız şey aslında zaten yapılmıyor mu?
burada amaç sanırım döngü oluşturmak
yani ;
gksu uygulamanın çalışması için şifre istedi ama şifre yanlış
nomralde şifre yanlış ta olsa gksu senin şifren yanlış ha di bi daha die sormuyor
bunu yapmak içinde şifrenin doğrumu değilmi olduğunu bilmek gerek burda yetkiye bakılarak çözüm getirilmiş :)
yani
gksu zzzz
while true;
do
if [ $? -eq 1 ]; then
    gksu xxx --message="hatalı şifre yeniden deneyin falan flilan sanırım amaç :))";
elif [ $? -eq 255 ];  then
      echo "İptal edildi";break ;
fi
done
exit
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: sem - 15 Temmuz 2010 - 07:35:04
@hitokiri eğer senin dediğin gibi ise evet yanlış anlamışım ben. Ben belirli dizinlere şifre koyulacak ve o dizinlere root dışında ulaşılamayacak gibi algıladım.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: bytan - 15 Temmuz 2010 - 21:47:17
Ben de tam olarak anlamadım. Normalde bir betik çalıştırılır, betik root haklarına ihtiyaç duyarsa bunu kullanıcıya sorar, sonrasında ise root yetkileriyle donatıltığında ne yapacaksa yapar. "Bu kullanıcı root şifresini biliyorsa, işlemleri yapmasına izin vereyim" diye bir şey yok.

Alıntı Yaproot şifresinin dogrulugunu nasıl kontrol edebilirim.
Alıntı YapÖnemli olan benim onun root şifresini doğru girdiğini anlamam. Kısacası kullanıcını root şifresinin dogrulugunu denetlemem gerekiyor.
Alıntı Yaproot olup olmadıgını daha dogrusu şifresini doğru girip girmediğini kontrol edecek.

Root şifresinin doğruluğunu sen kontrol edemezsin, doğruluğunu sen denetleyemezsin, şifresini doğru girip girmediğini de kontrol edemezsin. Tüm bunları sistem yapar ve geriye @ironic ve @heartsmagic'in verdiği kodlardaki bilgilerle öğrenilebilecek yanıtlar döndürür.

Diğer türlü, dediğin gibi olsaydı, root haklarıyla çalıştırdığımız her yazılım/betik, bizim sistemimizde bulunan root kullanıcısının şifresini elde etmiş olurdu.

Ancak senin dediğin gibi de yapabilmek için, gksu öncesinde bir aşama daha olmalı ve kullanıcıya şifresini sen sordurmalısın. Gksu vb sorduğunda o şifreyi öğrenemezsin.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: sem - 16 Temmuz 2010 - 00:26:41
Ben şu konuyu anlamadım gksu komutuyla yapılan işlemlerde root şifresini doğru girdiğini denetlemek istiyorum demişsiniz fakat bu komut ile açılan program root şifresini değil kullanıcı şifresini istiyor. Ama gksu ya da gksudo komutunu sadece root şiresi bilen kişilerin kullanabilmesini istiyorsanız şu bir alternatif olabilir. gksu programı nerede? Örneğin /usr/bin/gksu diyelim. Buradaki programı PATH yolları dışında  kalan bir dizine aktarırsınız. Daha sonra yeni bir gksu programcığı yazarak /usr/bin/ içine atarsınız. Yazdığınz kodda da root şifresini sorarsınız doğru, ise gerçek gksu programını bu programcık içinden çağırırsınız. Bu şekilde denetlenebilir gibi...
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 16 Temmuz 2010 - 00:32:55
Yapmak istediğim şeyi yaptım. Sanırsam iyi anlatamadım vede sisteme pek hakim olamadıgım için sizleri farklı yönlerdirdim. Yardımlarınız için teşekür ederim.

gksudo "deneme"
sudo echo "denemelerlen"  #iki kez sudo ile komut girdirdim çünkü loglarda üst üste girdirince aynısından sukar kez girdi diye tutuyor
sudo echo "hobaa"
gh=`whoami`
ti=`date +"%H:%M"`
echo  $ti
cd /var/log/
x=`cat auth.log | grep $ti | grep "COMMAND=/bin/echo denemelerlen"`
cd /home/$gh/Masaüstü
echo -e $x > lenn
k=`cut -d';' -f3 /home/$gh/Masaüstü/lenn`
echo "$k"
if [ "$k" = " USER=root " ]; then
echo "oldu"
fi
rm lenn


Not: Betik ve yaklaşımım size pek farklı gelebilir ama daha yeni yeni oluyor bazı şeyler. Tekrar teşekürler.


Başlık: Ynt: gksu kullanarak root olmak
Gönderen: heartsmagic - 16 Temmuz 2010 - 01:05:03
@adubel, senin amacın belirli bir komutu kullanıcının root hakkıyla çalıştırıp çalıştırmadığını bulmak mıydı? Eğer öyleyse evet bu günlük dosyası doğru yer olmuş. Fakat inan öyle bir anlattın ki, herkes farklı şeyler düşündü :)
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 16 Temmuz 2010 - 01:45:52
Tekrar kusura bakmayın. Bash altında daha önce açtıgım başlıkta da böyle bir anlaşılmama durumu olmuştu. Fakat ne yazıkki elimden gelenin en iyisi bu:S klavyeden birilerine birşeyler anlatamıyorum ki günlük yaşantımdada bundan baya bir çekiyorum. :)
Yardımlarınız için tekrar teşekür ederim.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: heartsmagic - 16 Temmuz 2010 - 02:55:32
Ben doğru anlamışım değil mi? Mesele kullanıcının bu betiği veya herhangi bir uygulamayı değil de, senin takip etmek istediğin bir uygulamayı root ile çalıştırıp çalıştırmadığını anlamak? Zira eğer herhangi bir uygulama içinse dolambaca gerek yok, zaten ilgili log dosyasından ayıklanabilir bu. Ancak sen gksu falan katıyorsun araya, bir şekilde belirli bir uygulama için yapıyorsun sanırım bunu?
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 16 Temmuz 2010 - 13:14:24
Evet üzerinde çalıştıgım bir proje var. Burada bazı fonksiyonlar sistemde ve programda çok derin değişiklikler yapıyor. Fonksiyonları çağırırken bu betikle kullanıcının yetkisini ölçeceğim. Gksu koymamın sebebi tamamen arayüze katkı sağlamak. hem şifredi dışardan kendi yazdıgım pencere ile alıp bunu betiğe göndermek ve o pencere için kod yazmak yorucu olacaktı. Hem tek bir yerde değil baya bi yerde kullancagım o yüzden gksu kullandım. Kısacası kolaya kaçtım :)
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: bytan - 16 Temmuz 2010 - 19:27:40
Hepimiz kendimizce ayrı bir taraftan tutup yorumlamışız. :)
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: heartsmagic - 18 Temmuz 2010 - 03:56:49
Kullanıcının yetkisini ölçmek için garip bir yöntem diyeceğim anca iş uzayacak :) Bırakıyorum burada soru sormayı :)
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 18 Temmuz 2010 - 22:24:20
O zaman ben bir soru daha sorayım :). Yeni başlık açsammı diye düşündüm ama bu konu ile o kadar farklı olmadıgına karar verdim.
Örneğin
gksu "deneme" -d
şeklinde bir kullanım yaptıgımda bana verilen bir debug cıktısı var. Benim bunları dosyaya yazdırmam gerekiyormuş. Bunu nasıl yapabilirim. Ben uğraştım ama hiçbir sonuç elde edemedim. Dosya değil değişkene bile atamadım. Bu konuda yardımcı olabilirmisiniz.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: eribol - 18 Temmuz 2010 - 23:16:56
Sorunuzdaki -d parametresi komuttan komuta ("deneme" kısmına) göre farklı işlem içerebilir. gksu yalnızca deneme komutunu root yetkileriyle çalıştırır fakat sonraki parametreler komuta göre işlev görür.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: sem - 18 Temmuz 2010 - 23:18:02
gksu "deneme" -d > dosya
Şeklinde olabilir mi? Emin değilim ama denemek lazım...
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 18 Temmuz 2010 - 23:29:29
Alıntı yapılan: sem0900 - 18 Temmuz 2010 - 23:18:02
gksu "deneme" -d > dosya
Şeklinde olabilir mi? Emin değilim ama denemek lazım...

Evet denemiştim zaten bunu ama ne yazık ki işe yaramıyor.


Alıntı yapılan: eribol - 18 Temmuz 2010 - 23:16:56
Sorunuzdaki -d parametresi komuttan komuta ("deneme" kısmına) göre farklı işlem içerebilir. gksu yalnızca deneme komutunu root yetkileriyle çalıştırır fakat sonraki parametreler komuta göre işlev görür.

Evet işte tam bu dediğiniz sebep yüzünden benim bunları dosyaya kaydetmem gerekiyor. ("deneme" yerine) yazacagım komuta göre debug bilgilerini bir yerde arşivlemem lazım.
Ama bu dediğiniz isteğim şeyin imkansız olduğu anlamına gelmiyor değil mi? Yani bir şekilde yolu var mı?
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: eribol - 18 Temmuz 2010 - 23:40:26
Benim bildiğim debug çalışınca zaten bir döküman(çıktı) elde ediliyor ve istenirse de gösteriliyor. En kötü ihtimal elle kopyalanabilir ancak sanırım siz bunu komutla yapmayı düşünüyorsunuz. Yöntemi vardır muhakkak lakin ben bilmiyorum.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: adubel - 18 Temmuz 2010 - 23:45:55
Evet ne yazık ki komutla otomatik yapması gerek. Umarım yardım edebilecek biri çıkar.

#Çözümünü buldum

gksu -d "deneme" 2> temp.out


Buradaki "2" yazdığımız yerdeki rakama göre cıktı veriyor. Fakat ben hangi rakama göre ne oluyor bilemiyorum. Merak ettim araştırıp öğreneceğim. Öğrenince de ilk işim sizlerle paylaşmak olacak. Tekrar teşekkür ederim yardımcı olmaya çalıştığınız için.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: eribol - 18 Temmuz 2010 - 23:48:20
http://manpages.ubuntu.com/manpages/intrepid/man1/gdb.1.html gdb sanırım sizin sorunuzun cevabı.
Başlık: Ynt: gksu kullanarak root olmak
Gönderen: ironic - 19 Temmuz 2010 - 12:09:22
2 ile işlemdeki standart hataları  yönlendirirsin. 1 standart çıktıdır.

gksu -d "deneme" > temp.out

bu şekilde standart çıktıyı temp.out a yönlendirirsin. Standart hatalar o dosyaya yönlenmez..

Her iki çıktıyı da dosyaya yönlendirmek için

gksu -d "deneme" > temp.out 2>&1