gksu kullanarak root olmak

Başlatan adubel, 14 Temmuz 2010 - 15:32:44

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

adubel

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.

heartsmagic

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.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

adubel

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:)

heartsmagic

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.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

adubel

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:):)

ironic

İ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


heartsmagic

@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?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sem

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?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

hitokiri

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

sem

@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.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

bytan

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.
Umut en büyük kötülüktür; işkenceyi uzatır. - F.N.


Bir şey ne ise odur, bu kadar. Öyleyse, iki şey arasında bağdaşıklık varsa, bu aralarında iletişim kuruyorlar demek değildir.
"... kavrayışını bilgi ile derinleştir ..."
PF @ ST

sem

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...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

adubel

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.



heartsmagic

@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ü :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

adubel

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.

heartsmagic

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?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

adubel

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 :)

bytan

Hepimiz kendimizce ayrı bir taraftan tutup yorumlamışız. :)
Umut en büyük kötülüktür; işkenceyi uzatır. - F.N.


Bir şey ne ise odur, bu kadar. Öyleyse, iki şey arasında bağdaşıklık varsa, bu aralarında iletişim kuruyorlar demek değildir.
"... kavrayışını bilgi ile derinleştir ..."
PF @ ST

heartsmagic

Kullanıcının yetkisini ölçmek için garip bir yöntem diyeceğim anca iş uzayacak :) Bırakıyorum burada soru sormayı :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

adubel

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.

eribol

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.

sem

gksu "deneme" -d > dosya
Şeklinde olabilir mi? Emin değilim ama denemek lazım...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

adubel

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ı?

eribol

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.

adubel

#24
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.