Linux Essentials Sertifikasyon Sınavına Hazırlık – Modül 5
Merhaba arkadaşlar, bir önceki makalemizde Scripting, Network ve Computer hardware gibi konuları incelemiştik. Bu makalemizde ise Creating User/Group, Security, Ownership ve Permissions, konularına değineceğiz.
Modül 4 için bakınız: https://www.cozumpark.com/linux-essentials-sertifikasyon-sinavina-hazirlik-modul-4/
Modül 5 konuları;
1. Sistem ve Kullanıcı Güvenliği
2. Kullanıcı ve Grup Oluşturma
3. Sahiplik ve İzinler
4. Özel Dizinler ve Dosyalar
Sistem ve Kullanıcı Güvenliği
NOT: Makale boyunca bazı argümanlar arasında teknik bir sorundan dolayı boşluk bırakmam gerekti. Örneğin, /etc/ passwd, /etc/ shadow, /etc/ gshadow gibi. Görsellerde doğru olarak gösterilmiştir. Lütfen dikkat edelim.
Linux işletim sistemlerinde, güvenliği sağlamak için kullanıcı hesapları tasarlanmıştır. Sistemdeki her kişi, dosya/dizin erişimine izin veren, kullanıcılar, gruplar ve diğer herkese verilen izinler kullanılarak, kullanıcı oturum açmaktadır. Bu izinler kök (root) kullanıcı tarafından düzenlenebilir.
Kullanıcı hesapları ayrıca dosyalara/dizinlere erişim sağlamak için de kullanılabilen en az bir gruba bağlıdır. Kullanıcı ve grup hesabı verileri, veritabanı dosyalarında saklanır. Bu dosyanın içeriğini bilmek, hangi kullanıcıların sistemdeki dosyalara ve dizinlere erişimi olduğunu daha iyi anlamamıza yardımcı olur. Bu veritabanı dosyaları ayrıca bir kullanıcın sisteme giriş yapma ve sisteme erişimini etkileyecek hayati güvenlik bilgileri içermektedir.
Birkaç komut, kullanıcı ve grup hesabı bilgilerini görmenin yanı sıra, uygun yetkiye sahipseniz bir kullanıcı hesabından diğerine geçmenize olanak tanır.
Yönetim Hesapları
Yönetici veya kök ayrıcalıkları gerektiren bir komutu yürütmenin birçok farklı yolu vardır. Sistemde kök kullanıcı olarak oturum açmak, yönetici olarak komutları yürütmenize izin verir. Bu erişim, potansiyel olarak tehlikelidir. Eğer root olarak oturum açtığınızı unutup, sorunlara neden olabilecek komutlar çalıştırırsanız, sisteminiz zarar görebilir. Komutlar yalnızca yönetici ayrıcalıklarına ihtiyaç duyuyorsa root olarak çalıştırmalısınız. Kurs boyunca root hesabını kullanmadık. Doğrudan root olarak oturum açılması önerilmez.
Root hesabı devre dışı bırakılırsa, sudo komut kullanılarak yönetim komutları yürütülebilir. Root hesabı etkinleştirilirse normal bir kullanıcı, su komutu ile root hesabına geçiş yapabilir.
Kullanıcı Değiştirme
su komutu farklı bir kullanıcı olarak kabuğun çalışmasını sağlar.
su [options] [username]
Oturum açma kabuğu üç yoldan belirtilebilir.
su –
su -l
su –login
Varsayılan olarak, bir kullanıcı adı belirtilmezse, su komutu root kullanıcı olarak yeni bir kabuk açar. Aşağıdaki iki komut root olarak bir kabuk başlatmanızı sağlar. Komutu çalıştırdıktan sonra root kullanıcısı yeni kabuğu başlatmak için kullanıcının parolasını sağlamalıdır. Eğer hesap parolasını bilmiyorsanız, su komutu başarısız olur.
su
su root
Yerel kabuk ve kullanıcı hesabına dönmek için exit komutunu kullanmamız yeterlidir. Unutmayın root hesabı, diğer hesapların hepsine sorgusuz erişebilir.
Ayrıcalıklı Komutları Yürütme
sudo komutu kullanıcıları başka bir kullanıcı olarak komutları çalıştırmasına izin verir.
sudo [options] command
root kullanıcının doğrudan veya su komutu aracılığıyla, oturum açmasına izin vermeyen dağıtımlarda, sudo komutu, yükleme işlemi bir root kullanıcı hesabı çalıştırıyormuş gibi yürütmek için kullanılır. Örneğin, UBUNTU
cat /etc/shadow
sudo komutu, root kullanıcı olarak komutu yürütmek için, root parolası yerine kullanıcının kendi parolasını ister. Bu güvenlik özelliği, kullanıcının bilgisayarını gözetimsiz ve yetkisiz yönetim erişimini engelleyebilir. Kullanıcı 5 dk’dan kısa aralıklar ile komutları yürütmeye devam ettiği sürece tekrar parola istemeyecektir. Biraz önceki komutu sudo ile tekrar yürütelim. Bu sefer bize mehmetoz kullanıcısının parolasını soracak.
sudo cat /etc/shadow
Komutu tekrar yürüttüğümde sürem (5dk) dolmadığı için herhangi bir parola istemeyecektir.
sudu komutunun kullanılması, girdi olarak günlük dosyasına yerleşir. Her girdi, komutu yürüten kullanıcı adını, yürütülen komutu ve zaman bilgilerini tutar. sudo komutunun en büyük avantajı biraz öncede bahsettiğimiz gibi yanlış bir komutun çalıştırılma riskini azaltmasıdır.
Kullanıcı Hesapları
/etc dizininde sisteme tanımlı kullanıcı ve grup hesaplarını içeren bir kaç metin dosyası bulunmaktadır. Örneğin, sistemde kullanıcı hesaplarının olduğunu /etc/passwd dosyasıdır. Bu dosya hesaplar bazı bilgileri tanımlar. passwd dosyasının son 3 satırına bakalım.
tail -3 /etc/passwd
Yukarıdaki görselde her satır, tek bir kullanıcıya ait bilgileri içerir. Veriler iki nokta üst üste karakterleriyle alanlara ayrılır. Şimdi detaylı olarak inceleyelim.
İlk alan, kullanıcının adını içerir. Bu ad, sistemde oturum açarken ve dosya sahipliği ls-l komutuyla görüntülendiğinde kullanılır.
Parola yer tutucusu (x) bir zamanlar kullanıcının parolası bu konumda saklanıyordu, ancak şimdi x alanı sistemin parolasının /etc/shadow dosyasında olduğunu göstermektedir.
Her hesaba bir kullanıcı kimliği (UID) atanır. Kullanıcı adları sistem tarafından doğrudan kullanılmaz, genellikle hesabı bunun yerine UID ile tanımlanır. Örneğin, dosyalar kullanıcı adlarına değil, UID’lere aittir.
Aşağıdaki alan ise, kullanıcının o grubun bir üyesi olduğunu gösterir. Kullanıcı bu gruba ait olan herhangi bir dosya üzerinde özel izinlere sahip olduğu anlamına da gelmektedir. Bir kullanıcı birden fazla gruba üye olabileceği için aslında bu kısım birincil grup kimliği de diyebiliriz.
Bu alan ise, gerçek adı veya diğer faydalı bilgiler dahil olmak üzere kullanıcı hakkında bilgiler içerebilir. Kullanıcı oluştururken herhangi bir bilgi girmediğim için görselde gözükmemektedir.
Bu alan, kullanıcının ev dizininin yolunu tanımlar. Normal kullanıcılar için bu genellikle olur. Root kullanıcının genellikle ev dizin farklı bir yerdedir. (/root)
Son alanımız ise, kullanıcının oturum açma kabuğunu yolunu gösterir. Varsayılan olarak, kullanıcı bir komut satırı ortamında her oturum açtığında veya bir terminal penceresi açtığında bu kabuğa yerleştirilir. Linux kullanıcıları için, en yaygın olan bash kabuğudur.
NOT: Sistemde belirli bir kullanıcının tanıplı olup olmadığını kontrol etmenin etkili bir yolu, grep komutu kullanarak /etc/passwd dosyasını aramaktır.
grep -i mehmet /etc/passwd
Parolalar
Daha önce belirttiğimiz gibi shadow dosyası kullanıcıların parolalarıyla ilgili hesap bilgilerini içerir. Ancak normal kullanıcılar güvenlik nedeniyle shadow dosyasının içeriğini görüntüle yetkisine sahip değildir. sudo komutu ile son 3 satırı görüntüleyelim.
sudo tail -3 /etc/shadow
İlk alan, /etc/passwd dosyasındaki hesap adıyla eşleşen hesabın kullanıcı adını içerir.
Parola alanı hesap için hash algoritması içermektedir. Bu çok uzun dize, tek yönlüdür, yani orjinal parolayı belirlemek için tersine çevrilemez. Sistem hesaplarının bu alanda bir yıldız hesabı vardır.
Bu alanda, parolanın en son değiştirildiği zamanı temsil eden bir sayı içerir. Bu sayı garip olsa da 1 Ocak 1970‘den bu yana geçen günlerin sayısıdır. (Epoch olarak adlandırılır.) Bu değer, kullanıcının parolası değiştirildiğinde otomatik olarak oluşturulur. Bu dosyanın geri kalan alanları tarafından sağlanan parola yapılandırma özellikleri tarafından kullanılır.
Parola değişiklikleri arasındaki minumum gün sayısını gösterir. Bu alanda sıfır değeri, kullanıcının her zaman parolasını değiştirebileceği anlamına gelir. Eğer farklı bir sayı belirtilir ise kullanıcı parolasını değiştirdikten sonra, belirtilen gün kadar tekrar parolasını değiştiremeyeceği anlamına gelir.
Parolanın geçerli olduğu maksimum gün sayısıdır. Kullanıcıların parolalarını düzenli olarak değiştirmeye zorlanan kısımdır. Bu alanda 30 yazdığını varsayarsak, kullanıcının hesabının kilitlenmemesini önlemek için en az 30 gün içinde bir parolasını değiştirmesi gerektiği anlamına gelir.
NOT: Bu alan maksimum 99999 olarak ayarlanabilir. Bu da yaklaşık 274 yıldır ve kullanıcı parola değiştirmek zorunda kalmaz.
Parola sona ermesinden önce, sistemin kullanıcıyı uyaracağı gün sayısını gösterir. Örneğin, uyarı alanı 7 olarak yazıldığını varsayarsak, maksimum zaman çerçevesinde herhangi bir zamanda kullanıcı, oturum açma işlemleri sırasında parolasını değiştirmesi için uyarılır.
Kullanıcı uyarılır görmezden gelirse ve parola zaman aralığı aşarsa, hesabı kilitlenir. Bu durumda, etkin olmayan alan, kullanıcının parolasının değiştirilebileceği bir “yetkisiz kullanım” süresi sağlar. Ancak yalnızca oturum açma sırasında.
Son kullanma tarihi, 1 Ocak 1970 tarihinden itibaren hesabın süresinin dolacağı günü gösterir. Süresi dolan bir hesap kilitlenir ve silinmez. Yani yönetici hesap kilidini açmak için parolayı sıfırlayabilir. Bu alanı ayarladığınızda gerçek tarihten epoch tarihe dönüştürmek için internette bir kaç ücretsiz araç bulabilirsiniz.
Sistem Hesapları
Kullanıcılar sistemde normal kullanıcı hesaplarını kullanarak oturum açarlar. Bu hesapların UID değerleri dağıtımlara göre 500 ve 1000‘den büyüktür. root kullanıcı sisteme özel erişimi vardır. Bu erişim, 0 UID ile hesaba bağlanır.
Kullanıcıların oturum açması için tasarlanmamış ek hesaplar vardır. Tipik olarak UID 1’den UID 499’a kadar olan bu hesaplar, sistem hesapları olarak adlandırılır ve sistemde çalışan hizmetlere hesaplar sağlamak üzere tasarlanmıştır.
Sistem hesaplarının etc/passwd
ve etc/passwd
dosyalarında diğer hesaplardan farklı bazı alanlar vardır. Örneğin, sistem hesapları, genellikle dosya oluşturmak veya depolamak için kullanılmadıklarından nadiren ana dizinlere sahiptir. etc/passwd
dosyasında sistem hesaplarında nologin olduğunu görebilirsiniz. Bu kullanıcılar aynı zamanda oturum açamayacakları anlamına gelmektedir.
etc/passwd dosyasında ise, sistem hesaplarında genellikle parola yerine bir yıldız vardır.
Bu hesaplar sistemin doğru çalışması için gereklidir. Sistem hesaplarını silmek size sorunlar çıkaracaktır. Bu yüzden her sistem hesabının ne yaptığını öğrenmeden müdahale etmeyin.
Grup Hesapları
Bir sisteme erişim düzeyimiz sadece kullanıcı hesapları tarafından belirlenmez. Her kullanıcı, sisteme erişim düzeyini de etkileyebilecek bir veya daha fazla grubun üyesi olabilir.
Geleneksel olarak, UNIX sistemleri, kullanıcıları toplam 16’dan fazla gruba üye olmamak üzere sınırlandırılmıştır. Ancak son Linux çekirdekleri, 65 bin’in üzerinde grup üyeliğine sahip kullanıcıları desteklemektedir. /etc/ passwd
dosya bir kullanıcı için birincil grup üyeliğini tanımlar. Ek grup üyeliği ve grupların hepsi dosyasında etc/ group
tanımlanır. Şimdi de group dosyasını içeriğini inceleyelim.
ilk alan kullanıcı adlarında olduğu gibi grup adını içerir. Sistem yine grup adları yerine grup kimliklerini kullanır.
Linux’te gruplar içinde parolalar vardır, ancak nadiren kullanılırlar. Yönetici bir grup parolası oluşturulursa, etc/ gshadow
dosyasında saklanacaktır. Bu x alanındaki parola bu dosyada olmadığını belirtmek için kullanılır.
Her grup, bu alana yerleştirilirken benzersiz bir grup kimliği (GID) ile ilişkilendirilir.
Son alan ise, gruba kimin üye olduğunu belirtmek için kullanılır. Birincil grup üyeliği /etc/ passwd
dosya tanımlanırken, ek gruplara atanan kullanıcıların kullanıcı adları /etc /group
dosyasının bu alanına yerleştirilir. Aşağıdaki görselde daha iyi anlaşılması için geçici olarak mehmetoz kullanıcısını root grubuna üye yaptım.
Bir kullanıcı adının aynı zamanda bir grup adı olarak görünmesi ve bir kullanıcının aynı ada sahip bir gruba üye olması çok yaygındır. Belirli bir grup hakkında bilgileri görüntülemek için grep veya getent komutlarını kullanabilirsiniz.
Kullanıcı Bilgileri
id komutu ile belirttiğimiz kullanıcı için, kullanıcı ve grup bilgilerinin çıktılarını yazdırabiliriz.
id [seçenek] [kullanıcı adı]
Herhangi bir değişken olmadan id komutunu sistemde çalıştırdığımızda mevcut kullanıcı hakkında bilgi verir. id komutu ile mehmetoz kullanıcısını belirterek kısaca inceleyelim.
id komutunun çıktısı her zaman önce kullanıcı kimliğini ve kullanıcı adını listeler.
id mehmetoz
Aşağıdaki görselde ise grup kimliği ve grup adını göstermektedir.
Son kısımda ise kullanıcının dahil olduğu grupları ve grup kimliklerini içermektedir. Biraz önce root grubuna dahil etmiştik. id komutu ile hangi kullanıcının hangi gruplara dahil olduğunu görebiliyoruz.
Yalnızca kullanıcının birincil grubunu yazdırmak için -g seçeneğini, ikincil grup üyeliklerini yazdırmak için ise -G seçeneğini kullanmalıyız.
Aşağıdaki görseldeki gibi, id komutunun sağlamasını yaptığımızda doğru sonuç verdiğini rahatlıkla görebiliriz.
who komutu
Diğer bir kullanışlı komutumuz ise who, hangi kullanıcıların sistemde oturum açtığını ve oturum açma saatlerini bu komut görebiliriz.
who komutun çıktısını inceleyelim.
Aşağıdaki görselde ilk sütun, oturum açan kullanıcının adını göstermektedir.
Diğer sütun ise, kullanıcının hangi terminal penceresinde çalıştığını gösterir.
Terminal adı tty ile başlıyorsa, bu normal bir komut satırı terminali ve yerel bir girişin olduğunu göstermektedir. pts ile başlıyorsa, bu kullanıcının uçbirim kullandığını veya uçbirim görevi gören bir işlemi çalıştırdığını gösterir. Daha net anlaşılması adına cozumpark kullanıcısıyla putty üzerinde oturum açtım. Bu kısımda ek olarak kırmızı renkle karaladığım kısımda etki alanı adı veya IP adresi içeriyorsa kullanıcı uzaktan oturum açmıştır.
Son olarak kullanıcının ne zaman oturum açtığını gösterir.
Kullanıcılar ve sistemde yaptıkları hakkında daha fazla bilgiye ihtiyaç duyulan durumlar olabilir. w komutu şu anda daha sistemdeki kullanıcılar hakkında daha ayrıntılı listesini sağlar.
Ayrıca, sistem durumunun bir özetini de sağlar.
w komutun ilk çıktı satırı, uptime komutu ile aynıdır. O anki saati, sistemin ne kadar süredir çalıştığını, o anda oturum açmış olan toplam kullanıcı sayısını ve son 1, 5 ve 15 dakikalık süreler üzerinden ortalama sistem üzerindeki yükü gösterir. Yük ortalaması, 100 değerinin bu süre boyunca tam CPU kullanımı anlamına geldiği CPU kullanımıdır.
Aşağıdakiler, w komutun çıktısının geri kalanını açıklayalım.
Sütun–>Misal–>Açıklama
USER—–oracle—–Oturum açan kullanıcı
TTY——-tty2—–Kullanıcın çalıştığı terminal penceresi.
FROM—-example.com—–Kullanıcın giriş yaptığı yer.
LOGIN—10:00—-Kullanıcın oturum açtığı saat.
IDLE——45:00—-Son komutun çalıştırılmasından bu yana kullanıcının ne kadar süredir boşta kaldığı.
JCPU——0.02s—-Oturum açıldığından beri çalıştırılan tüm işlemler tarafından kullanılan toplam cpu süresi.
PCPU——0.01s—-Geçerli işlem için toplam cpu süresi.
WHAT—–bash—–Kullanıcın çalıştırdığı mevcut işlem.
Yukarıdaki 0.01(s) karakteri saniyeyi temsil eder.
last komutu
last komutu /var/log/wtmp dosyasından tüm oturum açma geçmişini okur ve varsayılan olarak tüm girişleri ve yeniden başlatma kayıtlarını görüntüler. Yeniden başlatma kayıtlarının ilginç bir ayrıntısı ise oturum açma konumu yerine önyüklenen Linux çekirdeğinin sürümünü görüntülemesidir. /var/log/wtmp dosyası, sisteme giriş ve çıkış yapan tüm kullanıcıların günlüğünü tutmaktadır.
last komutu who ve w komutuna göre farklıdır. Varsayılan olarak, yalnızca mevcut oturumları değil, önceki oturumların da kullanıcı adını, terminalini ve oturum açma konumunu gösterir. who ve w komutlarından farklı olarak, kullanıcının sisteme giriş yaptığı tarih ve saati görüntüler. Kullanıcı sistemde oturumu kapattıysa, kullanıcının oturum açtığı toplam süreyi gösterecek, aksi takdirde hala oturum açmış olarak gösterecektir.
Kullanıcı ve Grup Oluşturma
İşletim sistemi yüklerken, çoğumuz normal bir kullanıcı oluşturur ve bu kullanıcıya yönetici komutlarını yürütme izni veririz. Çoğu Linux sistemi bir kullanıcının oturum açmasına izin verecek ve aynı zamanda dolaylı olarak root kullanıcı olarak komutları etkin bir şekilde yürütme yeteneğine sahip olacak şekilde yapılandırılır.
Bilgisayar yalnızca bir kişi tarafından kullanılacaksa, yalnızca normal bir kullanıcı hesabına sahip olmak yeterli olabilir. Bununla birlikte, bir bilgisayarın birden fazla kişi tarafından paylaşılması gerekiyorsa, onu kullanan her kişi için ayrı bir hesabın olması en doğrusudur. Bireylerin kendi hesaplarının olması avantajlıdır. sudo komutu belirli yönetim komutlarını çalıştırabilme yeteneği vermek üzere yapılandırılabilir. Kullanıcıların, sudo yönetici komutlarını gerçekleştirmek için komutu kullanmaları gerekiyorsa, kullanıcılar bu komutları gerçekleştirdiğinde sistem günlüklerine kaydeder.
Kullanıcı oluşturmaya başlamadan önce grupları nasıl kullanacağınızı planlamalısınız. Kullanıcılar zaten var olan gruplardaki üyeliklerle oluşturulabilir veya kullanıcılar mevcut gruplarda üyeliklere sahip olacak şekilde değiştirilebilir. Hangi kullanıcıları ve grupları istediğinizi önceden planladıysanız, önce kendi gruplarınızı oluşturmak ve kendi grup üyelikleri ile kullanıcılarınızı oluşturmak daha verimli olacaktır. Aksi takdirde, önce kullanıcılarınızı ve ardından gruplarınızı oluşturursanız, kullanıcılarınızı gruplarınızın üyesi yapmak üzere değiştirmek için fazladan zaman harcamanız gerektirir.
Gruplar
Bir grup oluşturmanın en yaygın nedeni, kullanıcıların dosyaları paylaşması için iyi bir yol sağlamaktır. Örneğin, aynı proje üzerinde birlikte çalışan ve proje dosyalarında depolanan belgeler üzerinde çalışma yapmak isteyen bir kaç kişi varsa. Bu gibi senaryolarda, bu kişileri ortak bir grubun üyesi yapılabilir, grup üyelerinin dosyalara erişmesine izin veren dizin üzerinde izinler ayarlanabilir.
Bir grup oluşturduktan veya değiştirdikten sonra /etc/ group dosyasını, grep komutuyla grup yapılandırma bilgililerini görüntüleyerek değişiklikleri görebilirsiniz. Ağ tabanlı kimlik doğrulama hizmetleriyle çalışıyorsanız, getent komutu hem yerel hemde ağ tabanlı grupları gösterecektir.
grep mehmetoz /etc/group
Grup Oluşturma
Yeni bir grup oluşturmak için groupadd komutu kullanabiliriz. Komutu çalıştırmak için kök kullanıcı yetkisine sahip olmamız gerekir. Komut sadece oluşturulacak grubun adını gerektirir. -g seçeneği ile yeni bir grup kimliği belirtmemiz gerekmektedir.
su root
groupadd [-g gid] [grup adi]
Hemen bir tane örnek yapalım. Grup kimlik numarası 1001 olan ve proje1 adından bir grup oluşturalım.
groupadd -g 1003 proje1
Eğer -g seçeneğini belirtmezsek groupadd komutu otomatik olarak yeni bir grup kimliği sağlayacaktır. Bunu /etc/group dosyasına bakarak mevcut en yüksek GID numarasından bir değer yüksek olan bir sayı kullanır.
groupadd proje2
Bazı Linux dağıtımlarında, özellikle RHEL tabanlı olanlarda, bir kullanıcı kimliği (UID) oluşturulduğunda bu kullanıcının tek üyesi olduğu bir kullanıcı özel grubu (UPG) da oluşturulur. Bu dağıtımlarda, UPG’nin UID’si ve ID’si eşleşmelidir. Bu nedenle, oluşturduğunuz bir GID ile bir UID ile eşleşecek şekilde oluşturulmuş bir UPG numarası arasında çakışmayı önlemek için, UID’ler oluşturmayı beklediğiniz aynı sayısal aralıklarda GID’ler oluşturmaktan kaçınmalısınız.
500 (RHEL) veya 1000 (DEBIAN) altındaki GID’ler sistem kullanımı için ayrılmıştır. Daha düşük GID değeri atamak istediğiniz zamanlar olabilir. Bunun için -r seçeneği, yeni gruba en düşük standart GID’den daha düşük bir seçenektir.
groupadd -r proje3
getent group proje3
Grup adlandırırken bazı hususlara dikkat etmemiz gerekir. Bunlar;
1- Adın ilk karakteri bir alt çizgi “_” karakteri veya bir küçük harf alfabetik “a-z” karakter olmalıdır.
2- Çoğu Linux dağıtımında 32 karaktere kadar izin verilir, ancak bazı dağıtımlar 16′dan fazlasını kabul etmeyeceği için 16’dan fazla karakter sorun olabilir.
3-Son karakter kısa çizgi “-” olmamalıdır.
Not: groupadd komutu yukarıdaki husuları uygulamadığınız zaman hata vermeyebilir. Anca sistem hizmetlerinin düzgün çalışması için kurallara uymakta fayda var.
Grubu Değiştirme
groupmod komutu ile bir grubun adını veya GID’ini değiştirebilirsiniz. Adı değiştirmek için -n seçeneğini GID için ise -g seçeneğini kullanmalıyız.
Grubun adını değiştirmek, eski adı bile ve yeni adı bilmeyen kullanıcılar için sorun olabilir. Ancak grubun adının değişmesi, dosyalara erişimde herhangi bir soruna neden olmaz. (Dosyalar grup adlarına değil GID’lere aittir.)
Grup adını değiştirmek için, -n seçeneğinden sonra yeni grup adını sonrasında ise değiştirilecek grup adını vermemiz yeterlidir.
groupmod [-n] [yeni_grupadi] [eski_grupadi]
Bir grubun GID’ini değiştirirseniz, o grupla ilişkili tüm dosyalar artık o grupla ilişkilendirilmez. Aslında, bu grupla ilişkili tüm dosyalar artık herhangi bir grup adıyla ilişkilendirilmeyecektir. Bunun yerine, bu dosyaların sahibi aşağıda gösterildiği gibi yalnızca bir GID’ye ait olacaktır.
Grup Silme
Bir grubu silmek istediğimizde groupdel komutunu kullanmamız yeterlidir. Komutu çalıştırdığımızda o gruba ait tüm dosyaların artık kalmayacağını unutmayın. Yalnızca tamamlayıcı gruplar silinebilir. Yani herhangi bir kullanıcı için birincil grup olan herhangi bir grup silinemez. Tabiki bir kullanıcının birincil grubu değiştirilebilir ve ardından da silinebilir.
groupdel proje1
Kullanıcılar
Kullanıcı hesap bilgileri /etc/passwd dosyasında, kullanıcı kimlik doğrulama bilgileri ise /etc/shadow dosyasında saklanır. Yeni bir kullanıcı oluşturmak, bu dosyaların her birini manuel olarak yeni bir satır ekleyerek gerçekleştirilebilir, ancak bu önerilerin bir durum değildir.
Yeni bir kullanıcı eklemek için uygun bir komut kullanılarak, bu dosyalar otomatik ve güvenli bir şekilde değiştirilebilir. Bu dosyaları manuel olarak değiştirirseniz, tüm kullanıcıların normal şekilde oturum açmasını engelleyebilecek bir hata yapma riskiyle karşı karşıya kalabilirsiniz.
Sisteminiz için kullanıcılar oluşturmaya başlamadan önce, useradd komutuyla varsayılan olarak kullanılan pratik değerleri doğrulamalı veya oluşturmalısınız. Bu ayarlar, useradd komut tarafından kullanılan yapılandırma dosyaları bulunabilir.
Kullanıcıları eklemeden önce bu yapılandırma dosyalarındaki değerlerin makul olmasını sağlamak, kullanıcıları ekledikten sonra kullanıcı hesabı ayarlarını düzeltmek zorunda kalmanıza ve zamandan tasarruf etmenize yardımcı olabilir.
Hesap Hususları
useradd komutu için gerekli olan tek argüman, hesabın sahip olmasını istediğiniz addır. Kullanıcı adı, grup adları ile aynı kurallara uymalıdır.
Kullanıcı adlandırırken bazı hususlara dikkat etmemiz gerekir. Bunlar;
1- Adın ilk karakteri bir alt çizgi “_” karakteri veya bir küçük harf alfabetik “a-z” karakter olmalıdır.
2- Çoğu Linux dağıtımında 32 karaktere kadar izin verilir, ancak bazı dağıtımlar 16′dan fazlasını kabul etmeyeceği için 16’dan fazla karakter sorun olabilir.
3-Son karakter kısa çizgi “-” olmamalıdır.
Hesap adı her kullanıcı için benzersiz olması gerektiği unutmayalım.
useradd [yeni_kullaniciadi]
Belirli bir UID’ye sahip bir kullanıcı oluşturduğunuzda, sistem genellikle oluşturduğunuz sonraki kullanıcı için UID’yi birer birer arttırır. Diğer sistemlerle bir ağa bağlıysa, tutarlı erişim sağlamaya yardımcı olmak için bu UID’yi tüm sistemlerde aynı olmasını sağlamak isteyebiliriz.
-u seçeneğini useradd komutuna eklersek, UID numarasını belirlemesini sağlayabiliriz. UID’ler tipik olarak sıfırdan dört milyarı aşan herhangi bir yerde olabilir, ancak eski sistemlerde en yüksek uyumluluk için önerile maksimum UID değeri 60.000’dir.
useradd -u 1020 [yeni_kullanıcıadi]
root kullanıcısı, 0 hesabının özel ayrıcalıklara sahip olmasına izin veren bir UID’ye sahiptir. UID’si 0 olan herhangi bir hesap, etkili bir şekilde yönetici olarak hareket edebilir.
Sistem hesapları genellikle arka planda çalışan hizmetleri çalıştırmak için kullanılır. Hizmetlerin kök kullanıcı olarak çalıştırılmaması nedeniyle, güvenliği ihlal edilmiş bir hizmet hesabıyla verilebilecek zarar sınırlıdır. Hizmetler tarafından kullanılan sistem hesapları genellikle ayrılmış aralıktaki UID’leri kullanır. Bu kuralın istisnası olan bir sistem hesabı, 65534 UID’ye sahip olan nfsnobody kullanıcısıdır.
Hizmet hesapları için kullanılan ayrılmış aralık zamanla genişlemiştir. 1 ile 99 arasındaki UID’ler için ayrılmıştı. Daha sonra, 1 ile 499 arasında olacak şekilde genişletildi. Dağıtımlar arasındaki mevcut eğilim, sistem hesaplarının 1 ile 999 arasında UID’ye sahip herhangi bir hesap olması, ancak 1-499 aralığının ayrıca hala yaygın olarak kullanılmaktadır.
Yeni bir sistem kurarken, 1000’den düşük olmayan UID’leri başlatmak, birçok sistem hizmeti için yeterli UID bulunduğundan emin olmak ve size ayrılmış aralıkta birçok GID oluşturma yeteneği vermek iyi bir uygulamadır.
Birincil Grup
UPG özelliğine sahip dağıtımlarda bu grup, yeni oluşturulan kullanıcı hesabının UID’si ve kullanıcı adı ile eşleşen bir GID ve grup adı ile otomatik olarak oluşturulur. UPG kullanmayan dağıtımlarda, birincil grup normalde varsayılan olarak kullanıcılar GID değer 100 olan grubu kullanır.
Birincil grubu belirtmek için useradd komutu ile -g seçeneği kullanarak grubun adı veya GID’i belirtebilirsiniz. Örneğin birincil grubu belirtmek için aşağıdaki örneği uygulayın.
useradd -g [grup_adi] [kullanıcı_adi]
Tamamlayıcı Grup
Kullanıcıyı bir veya daha fazla ek grubun üyesi yapabiliriz. -G seçeneği ile virgülle ayrılmış bir şekilde grup adları veya numaraları ile kullanılabilir. Aşağıdaki örnekte admin kullanıcısı ortak ve root grubuna üye edilmiştir.
Ana Dizin
Varsayılan olarak, çoğu dağıtım kullanıcının ana dizinini, genellikle belirten dosya home altında kullanıcı hesabıyla aynı ada sahip olarak oluşur. Örneğin, ahmet adlı bir kullanıcı oluşturduğunuzda kullanıcının ana dizini aşağıdaki gibi olacaktır. Yani /home/ahmet
useradd komutu için, kullanıcının ana dizinini oluşturmayı etkileyecek birkaç seçenek vardır.
1- Eğer CREATE_HOME ayarlı değilse, kullanıcının ev dizini otomatik olarak oluşturulmaz. Ya da CREATE_HOME ayarlı ise ve siz ev dizini oluşmasını istiyorsanız -m seçeneğini kullanabilirsiniz.
2- Eğer CREATE_HOME /etc/login.defs dosyası yes olarak ayarlı ise ev dizini otomatik olarak oluşturulur.
Yukarıdaki yazılanlara örnek olması adına, CREATE_HOME yes kısmını no olarak değiştirdim ve kemal adında bir kullanıcı oluşturdum. Aşağıdaki görseldeki gibi kullanıcının ev dizini oluşmadı. Eğer CREATE_HOME kısmı no ise ev dizini oluşturmak istiyorsanız -m seçeneği kullanmak daha doğrudur.
Bu örnekte ise CREATE_HOME no olarak ayarlanmış bir dağıtımda -m seçeneği ile ev dizini oluşturabildiğimize bakalım.
useradd komutunu kullanarak bir kaç örnek yapalım. Aşağıdaki örnekte, UID’si 1030, birincil kullanıcı grubu ortak, ek grup üyeliği admin, açıklama kısmında Destek Elemanı ve cihan adından bir kullanıcı oluşturulmuştur.
useradd -u 1030 -g ortak -G admin -m -c ‘Destek Elemani’ cihan
NOT: Yukarıdaki örnekte hesabın geçerli bir parolası olmadığını unutmayalım.
Parolalar
İyi bir parola seçmek çok önemli olduğu gibi bu sadece bir başlangıçtır. Parolanızı kimseyle paylaşmamalısınız. Eğer parolanızı bir yere yazmayı seçerseniz, kasa veya kasa gibi bir yerde güvenli bir şekilde saklamalısınız. Kötü şifre oluşturmak çok kolaydır. Parolanızda sizinle ilgili herhangi bir bilgi kullanırsanız, bu bilgiler başkaları tarafından da öğrenilebilir veya keşfedilebilir ve bu da parolanızın kolayca ele geçirilmesine neden olabilir. Şifreniz asla adınız, göbek adınız, soyadınız, doğum gününüz, telefonunuz, evcil hayvan adınız, ehliyetiniz veya kimlik kartı gibi sizinle veya tanıdığınız kişilerle ilgili bilgiler içermemelidir.
Bir hesap için bir şifre seçmeye çalışırken göz önünde bulundurmanız gereken çok sayıda faktör vardır:
- Uzunluk : /etc/login.defs dosyası, yöneticinin parolanın minimum uzunluğunu belirlemesine izin verir. Bazıları parola ne kadar uzun olursa o kadar iyi olacağına inanırken, bu gerçekten doğru değildir. Çok uzun parolalarla ilgili sorun, kolayca hatırlanmamaları ve sonuç olarak genellikle kolayca bulunabilecekleri ve tehlikeye atılabilecekleri bir yere yazılmalarıdır.
- Kompozisyon : İyi bir parola, alfabetik, sayısal ve sembolik karakterlerin birleşiminden oluşmalıdır.
- Ömür : Bir parolanın kullanılabileceği maksimum süre, çeşitli nedenlerle sınırlı olmalıdır.
a- Bir hesabın güvenliği ihlal edilirse ve parolanın geçerli olduğu süre sınırlanırsa, saldırgan, parola geçersiz hale geldiğinde nihayetinde erişimini kaybeder.
b- Bir hesap kullanılmıyorsa, parola artık geçerli olmadığında otomatik olarak devre dışı bırakılabilir.
c- Saldırganlar olası her parolayı deneyerek “kaba kuvvet” saldırısı yapmaya çalışıyorsa, saldırının başarılı olabilmesi için parola değiştirilebilir.
Ancak, bir kullanıcının parolasını çok sık değiştirmesini istemek, aşağıdakiler dahil güvenlik sorunları oluşturabilir.
a- Kullanıcının seçtiği şifrenin kalitesi zarar görebilir.
b- Kullanıcı parolasını kağıda yazmaya başlayarak parolanın bulunma olasılığını artırabilir.
c- Nadiren kullanılan kullanıcı hesaplarının süresi dolabilir ve sıfırlanması için yönetimle ilgilenilmesi gerekebilir.
Kullanıcıların şifrelerini ne sıklıkta değiştirmeye zorlanması gerektiğine ilişkin görüşler farklılık gösterir. Çok hassas hesaplar için, parolaların 30 günde bir gibi daha sık değiştirilmesi önerilir. Öte yandan, hassas bilgilere erişimi olmayan kritik olmayan hesaplar için, sık sık değişiklik yapma ihtiyacı daha azdır. Minimum riske sahip hesaplar için, 90 günlük bir süreye sahip olmak daha makul kabul edilir.
passwd komutu
Bir kullanıcı şifresini değiştirmenin birkaç yolu vardır. Kullanıcı passwd komutu çalıştırabilir, yönetici passwd ve kullanıcı adını bağımsız değişken olarak sağlayarak komutu çalıştırabilir veya grafik araçları da mevcuttur.
Yönetici passwd komutunu ilk parolayı ayarlamak veya hesabın parolasını değiştirmek için kullanabilir. Komut başarıyla tamamlanırsa, /etc/shadow dosyası kullanıcının yeni şifresiyle güncellenecektir.
Normal kullanıcıların birçok şifre kuralına uyması gerekirken, kök kullanıcının yalnızca bir kuralı izlemesi gerekir. Şifre boş bırakılamaz. Kök kullanıcı, normalde normal kullanıcılar için geçerli olan diğer tüm parola kurallarını ihlal ettiğinde, ekrana bir uyarı yazdırılmasına ve kuralın uygulanmamasına neden olur.
Mehmet öz kullanıcısında olduğum için sadece passwd komutunu çalıştırmamız yeterlidir. Örneğin, root kullanıcısında olsaydık diğer kullanıcıların parolalarını değiştirmek veya oluşturmak için komutunun yanına kullanıcı adını vermemiz yeterli olacaktı.
passwd [kullanici_adi]
Yöneticinin bir kullanıcı hesabı için bir parola belirlediğini varsayarsak, kullanıcı bu hesap adı ve parolasıyla oturum açabilir. Kullanıcı bir terminali açtıktan sonra, kendi şifresini değiştirmek için hiçbir argüman olmadan passwd komutu çalıştırabilir. Mevcut şifrenizi yazdıktan sonra, ardından yeni şifreyi iki kez girmeniz gerekmektedir.
Kök kullanıcının ayrıcalıklarını kullanarak, şifrelenmiş parolalar ve parolayla ilgili diğer bilgiler, /etc/shadow dosya görüntülenerek görüntülenebilir . Normal kullanıcıların bu dosyanın içeriğini göremediğini unutmayın.
$passwd
chage komutu
chage komutu, /etc/shadow dosyasında bulunan parola eskime bilgilerini yönetmek için birçok seçenek sunar.
chage seçeneklerinin bir kısmı:
-l seçeneği ile Hesap yaşlandırma bilgilerini listeler.
-d seçeneği ile Son şifre değişikliğinin tarihini şu şekilde ayarlanır.
-E seçeneği ile Hesabın süresi dolacak şekilde ayarlanabilir.
-h seçeneği ile chage komutunun yardım kısmını görüntüler.
-m seçeneği ile Parolanın değiştirilebilmesi için minimum gün sayısını ayarlanabilir.
-M seçeneği ile Parolanın değiştirilmesinden önce maksimum gün sayısını ayarlanabilir.
-W seçeneği ile Bir uyarı görüntülemeye başlamak için, parolanın süresinin dolmasına kalan gün sayısını ayarlanır.
Örnek olarak, bir kullanıcının parolasının geçerli olduğu maksimum gün sayısını 30 olacak şekilde ayarlayalım.
chage -M 30 mehmetoz
Diğer bir örnekte ise hesap yaşlandırma bilgilerini kontrol edelim.
chage -l mehmetoz
usermod komutu
Bir kullanıcı hesabında değişiklik yapmadan önce, kullanıcı o anda oturum açmışsa, bazı komutların bir kullanıcı hesabını başarılı bir şekilde değiştirmeyeceğini bilmek önemlidir. Yapabileceğiniz diğer değişiklikler, kullanıcı oturum açmışsa etkili olmayacaktır, ancak kullanıcı oturumu kapatıp tekrar oturum açtığı anda etkili olacaktır. Örneğin, grup üyeliklerini değiştirirken, yeni üyelikler, kullanıcı bir sonraki oturum açışına kadar kullanıcı tarafından kullanılamayacaktır.
Usermod komutu, mevcut bir kullanıcı hesabını değiştirmek için birçok seçenek sunar. Bu seçeneklerin çoğu, hesabın oluşturulduğu sırada useradd komutuyla da kullanılabilir.
usermod seçeneklerinin bir kısmı:
-d seçeneği ile kullanıcı için yeni bir ana dizin olarak ayarlanabilir.
-e seçeneği ile hesap sona erme tarihini olarak ayarlanabilir.
-g seçeneği ile birincil grup olarak ayarlayın.
-G seçeneği ile ek grupları içinde belirtilen bir listeye ayarlayabilirsiniz.
-a seçeneği ile kullanıcının ek gruplarını -G seçenek tarafından belirtilenlerle ekleyebilirsiniz.
-l seçeneği ile kullanıcının oturum açma adını değiştirebiliriz.
-L seçeneği ile kullanıcının hesabını kilitlenir.
-s seçeneği ile hesap için oturum açma kabuğunu belirtin.
-u seçeneği ile kullanıcının yeni UID’sini belirtin.
-U seçeneği ile kilitlediğimiz kullanıcının hesap kilidini açabiliriz.
Bu seçeneklerden bazıları, kullanıcı yönetimini nasıl etkiledikleri için tartışılmaya değerdir. Kullanıcının sahip olduğu dosyalar artık kalmayacağından, kullanıcının UID’sini -u seçeneğiyle değiştirmek çok sorunlu olabilir. Öte yandan, -l ile kullanıcı için yeni bir oturum açma adı belirtilmesi dosyaların sahipsiz kalmasına neden olmaz.
Bir kullanıcının userdel komutuyla silinmesi, kullanıcının sistemdeki dosyalarını ortada bırakabilir ya da kaldırabilir. Bunun yerine hesabı silmek yerine, usermod komutu ve -L seçeneği ile hesab kilitlenmelidir. Bir hesabı kilitlemek, hesabın kullanılmasını engeller ancak dosyaların sahipliği kalır.
Yardımcı grupları yönetme konusunda bilinmesi gereken bazı önemli şeyler var. -A seçeneği olmadan -G seçeneğini kullanırsanız, kullanıcının ait olacağı tüm grupları listelemelisiniz. Tek başına -G seçeneğinin kullanılması, kullanıcının ait olduğu tüm eski tamamlayıcı gruplardan yanlışlıkla bir kullanıcının çıkarılmasına neden olabilir.
-G ile -a seçeneğini kullanırsanız, yalnızca kullanıcının ait olacağı yeni grupları listelemeniz gerekir. Örneğin, kullanıcı mehmetoz şu anda ortak ve admin gruplarına aitse, hesabını diğer olarak root grubuna eklemek için aşağıdaki komutu yürütmeliyiz.
#usermode -G root mehmetoz
Kullanıcı Silme
Bir kullanıcıyı silmek için userdel komutu kullanılır. Bir kullanıcı hesabını sildiğinizde, kullanıcının ana dizinini de silip silmeyeceğimizi belirtmemiz gerekmektedir. Kullanıcıların dosyaları bizim için önemli olabilir. Ek olarak verilerini almadıysak, kullanıcı ve dosyalarını silme komutunu uyguladıktan sonra, eylemi tersine çevirmek mümkün değildir.
Kullanıcının ana dizinin silmeden sadece kullanıcıyı silmek için userdel [kullanıcı] komutunu çalıştırın.
userdel cihan
Ana dizinleri silmeden bir kullanıcıyı silmenin, kullanıcının ana dizin dosyalarının sahipsiz kalacağı ve vu dosyaların yalnızca eski UID ve GID’lerine ait olacağı anlamına geldiğini dikkat etmekte fayda var.
Kullanıcıyı, ana dizini ve posta kuyruğunuda silmek için userdel -r [kullanıcı] komutunu çalıştırın.
userdel -r ceyhun
NOT: Yukarıdaki komut, sadece kullanıcının ana dizindeki dosyalarını ve posta kuyruğunu siler. Kullanıcı, kendi ana dizinin dışındaki başka dosyalara sahipse, bu dosyalar silinmez ve artık dosya olarak kalacaktır.
Sahiplik ve İzinler
Dosya sahipliği, dosya güvenliği için kritiktir. Her dosyanın bir kullanıcı sahibi ve bir grup sahibi vardır. Bir dosyanın kullanıcı ve grup sahipliğinin nasıl belirleneceğine odaklanmalıyız. Ek olarak, dosyalar ve dizinler üzerindeki izinlerin nasıl değiştirileceği dahil olmak üzere dosya ve dizin izinleri kavramına bakacağız. Varsayılan izinler, başlangıçta oluşturulduklarında, dosyalara ve dizinlere verilen izinlerdir.
Dosya İzinleri
Varsayılan olarak, kullanıcılar oluşturdukları dosyaların sahibidir. Bu sahiplik değiştirilebilir ancak bu işlev yönetici ayrıcalıkları gerektirir. Çoğu komut genellikle kullanıcı sahibini bir ad olarak gösterse de, işletim sistemi kullanıcı sahipliğini bu kullanıcı adı için UID ile ilişkilendirir.
Her dosyanın ayrıca bir grup sahibi vardır. Varsayılan olarak, dosyayı oluşturan kullanıcının birincil grubu, tüm yeni dosyaların grup sahibidir. Kullanıcıların, sahip oldukları dosyaların grup sahibini ait oldukları herhangi bir grupla değiştirmelerine izin verilir. Kullanıcı sahipliğine benzer şekilde, bir dosyanın bir grupla ilişkilendirilmesi dahili olarak işletim sistemi tarafından ada göre değil, grubun GID’si tarafından yapılır.
Sahiplik, bir dosyayla ilişkili UID ve GID tarafından belirlendiğinden, bir kullanıcının UID’sini değiştirmek (veya kullanıcıyı silmek), orijinal olarak o kullanıcıya ait olan bir dosyanın gerçek kullanıcı sahibi olmayan bir dosya oluşturma etkisine sahiptir. /etc/passwd dosyasında, dosyanın sahibinin UID’siyle eşleşen bir UID yoksa, UID kullanıcı adı yerine dosyanın kullanıcı sahibi olarak görüntülenir. Aynısı gruplar için de geçerlidir.
İd komutu, hangi kullanıcı hesabını kullandığınızı ve hangi grupları kullanabileceğinizi doğrulamak için yararlı olabilir. Bu komutun çıktısını görüntüleyerek, kullanıcının kimlik bilgilerinin hem numara hem de ad olarak ifade edildiğini görebilirsiniz. İd komutunun çıktısı, geçerli kullanıcının UID’sini ve kullanıcı hesabı adını, ardından birincil grubun GID ve grup adını ve tüm grup üyeliklerinin GID’lerini ve grup adlarını görüntüler.
Yukarıdaki örnek, kullanıcının mehmetoz kullanıcı hesabı için 1001 UID’sine sahip olduğunu gösterir. Ayrıca, bu kullanıcı için birincil grubun, mehmetoz grubu için 1001 GID değerine sahip olduğunu gösterir. Kullanıcı hesabı ve birincil grup hesabı aynı sayısal tanımlayıcıya ve ada sahip olduğundan, bu kullanıcının bir Kullanıcı Özel Grubunda (UPG) olduğunu gösterir. Ek olarak, bu örnekteki kullanıcı bir tamamlayıcı gruba aittir. GID’si 0 olan root grubu.
id komutu grup üyelikleri dahil olmak üzere kimlik bilgilerini listeler. Yalnızca hangi gruplara ait olduğunuzu bilmek istiyorsanız, groups komutunu kullanabilirsiniz.
Dosya sahipliği, sistemdeki gizli dosyalar için de geçerlidir. Nokta ile başlayan gizli dosyalardır. Nokta klarakteri, ls komutunun -a seçeneği kullanılarak listelenir. Geçerli dizindeki tüm dosyaların ve alt dizinlerin sahipliği, ls -la komutu kullanılarak listelenebilir.
Listelenen ilk iki gizli dosyası sırayla, “.”(tek nokta) geçerli dizin ve “..” (iki nokta )ana dizin anlamına gelmektedir.
Aşağıdaki görsellerde ls -l komutunun çıktısı verilmiştir. Aşağıdaki sarı kısımları kısaca açıklayalım.
İlk kısım izinler. (Permissions)
İkinci kısım kullanıcı sahibi. (User Owner)
Üçüncü kısım ise grup sahibi. (Group Owner)
Grup Sahipliğini Değiştirme
Mevcut bir dosyanın grup sahibini değiştirmek için chgrp komutu kullanılabilir.
chgrp grup_adi dosya
Kök kullanıcı olarak, herhangi bir dosyanın grup sahibini herhangi bir gruba değiştirmek için chgrp komutu kullanılabilir. Yönetici ayrıcalıklarına sahip olmayan bir kullanıcı olarak, chgrp komutu yalnızca bir dosyanın grup sahibini, kullanıcının zaten üyesi olduğu bir gruba değiştirmek için kullanılabilir.
Bir kullanıcı, sahibi olmadığı bir dosyanın grup sahipliğini değiştirmeye çalışırsa, bir hata mesajı alır.
Bir dizin yapısındaki tüm dosyaların grup sahipliğini değiştirmek için, chgrp komutunda özyinelemeli -R seçeneğini kullanılır. Örneğin, aşağıdaki örnekteki komut, test dizininin grup sahipliğini ve test dizininin tüm dosyalarını ve alt dizinlerini değiştirecektir.
Yukarıdaki örnekte grup sahibi kontrol ettiğimizde mehmetoz olduğunu görebiliyoruz. chgrp komutunu -R seçeneği olmadan çalıştırıyorum. Aşağıda gözüktüğü gibi alt dosya/dizin grup sahibinin değişmediğini görebiliyoruz.
chgrp komutunu -R seçeneği ile kullandığımı zaman tüm alt dosya/dizin olarak başarılı bir şekilde uygulanmıştır.
ls komutunun -l seçeneğiyle bir dosyanın sahipliğini görüntüleyebilirsiniz, ancak sistem, sahiplik ve dosya izinlerini görüntülerken yararlı olan başka bir komut sağlar. stat komutu. Stat komutu, hem grup adına hem de GID numarasına göre grup sahipliğini sağlama dahil olmak üzere bir dosya hakkında daha ayrıntılı bilgi görüntüler.
stat dosya/dizin
Kullanıcı Sahipliğini Değiştirme
Chown komutu, kök kullanıcının dosya ve dizinlerin kullanıcı sahipliğini değiştirmesine izin verir. Normal bir kullanıcı, kendi dosyalarından birinin sahipliğini başka bir kullanıcıya vermek için bile, bir dosyanın kullanıcı sahibini değiştirmek için bu komutu kullanamaz. Bununla birlikte, chown komutu aynı zamanda, dosyanın kök veya sahibi tarafından gerçekleştirilebilen grup sahipliğinin değiştirilmesine de izin verir.
Chown komutunun çalıştırılmasının üç farklı yolu vardır. İlk yöntem, yalnızca dosyanın kullanıcı sahibini değiştirmek için kullanılır.
#chown kullanici_adi dosya/dizin
Örneğin, kök kullanıcı mehmetoz dosyasının kullanıcı sahipliğini kullanıcı kemal olarak değiştirmek isterse, aşağıdaki komut çalıştırılabilir.
İlk root kullanıcısına geçiş yapıyorum ve kullanıcı sahibini kontrol ediyorum.
chown komutunu kullanarak, mehmetoz dosyasının kullanıcı sahibini kemal kullanıcısı olarak değiştiriyorum.
İkinci yöntem, hem kullanıcıyı hem de grubu değiştirmektir; bu aynı zamanda kök ayrıcalıkları gerektirir. Bunu başarmak için, kullanıcıyı ve grubu iki nokta üst üste veya nokta karakteriyle ayırmalısınız.
chown user:group /path/file
chown user.group /path/file
İzinler
ls -l komutunun çıktısı, her satırın başında on karakter görüntüler. Bu karakterler dosyanın türünü ve dosyanın izinlerini belirtir. Örneğin, aşağıdaki komutun çıktısına bakalım.
Dosya Tipi
Her satırın ilk karakteri dosyanın türünü belirtir.
Aşağıdaki, dosya türü için olası değerleri açıklamaktadır.
– –>Boş olabilen veya metin veya ikili veri içeren normal bir dosya.
d –>Diğer dosyaların adlarını ve bunlara bağlanan bir dizin dosyası.
l –>Sembolik bağ, başka bir dosyaya gönderme yapan (işaret eden) bir dosya adıdır.
b –>Blok dosyası, verilerin veri blokları halinde okunduğu bir blok donanım cihazıyla ilgili olandır.
c –>Bir karakter dosyası, verilerin her seferinde bir bayt okunduğu bir karakter donanım cihazıyla ilgili olan dosyadır.
p –>Bir boru dosyası boru sembolüne benzer şekilde çalışır ve bir işlemin çıktısının boru dosyası aracılığıyla başka bir işlemle iletişim kurmasına izin verir, burada bir işlemin çıktısı diğer işlem için girdi olarak kullanılır.
s –>Bir soket dosyası, iki işlemin iletişim kurmasına izin verir, burada her iki işlemin de veri göndermesine veya almasına izin verilir.
İzin Grupları
“-“ sonraki dokuz karakter dosyanın izinlerini gösterir.
Bu dosyalar üzerinde ayarlanan izinler, bir kullanıcının dosyaya sahip olduğu erişim düzeyini belirler. Bir kullanıcı bir programı çalıştırdığında ve program bir dosyaya eriştiğinde, kullanıcının dosyaya doğru erişim haklarına sahip olup olmadığını belirlemek için izinler kontrol edilir.
İzinler, dosyaya erişmeye çalışabilecek farklı kullanıcıları temsil eden üç farklı rolde gruplandırılmıştır.
dosya/dizin grubunun bir üyesi değilseniz, izinleriniz başkaları olacaktır.
Kullanıcı Sahibi
2-4 arası karakterler, dosyanın sahibi olan kullanıcının izinlerini belirtir. Dosyanın sahibiyseniz, o dosyaya erişimi belirlemek için yalnızca kullanıcı sahibi izinleri kullanılır.
Grup Sahibi
5-7 arası karakterler dosyanın sahibi olan grubun izinlerini belirtir. Dosyanın sahibi değilseniz ancak dosyanın sahibi olan grubun bir üyesiyseniz, o dosyaya erişimi belirlemek için yalnızca grup sahibi izinleri kullanılır.
Diğer İzinler
8-10 arası karakterler, başkaları için izinleri veya bazen dünya izinleri olarak anılanları belirtir. Bu grup, dosya sahibi veya dosya grubunun üyesi olmayan tüm kullanıcıları içerir.
İzin Türleri
Her gruba üç temel izin türü atanır. okuma , yazma ve yürütme .
Kullanıcı Sahibi
Okuma = r
Yazma = w
Çalıştırma= x
Grup Sahibi
Okuma = r
Yazma = w
Çalıştırma= x
Diğer
Okuma = r
Yazma = w
Çalıştırma= x
İzinlerin kendisi aldatıcı bir şekilde basittir ve bir dosyaya veya bir dizine uygulanıp uygulanmadığına bağlı olarak farklı anlamlara sahiptir.
Okuma
Her grubun ilk karakteri okuma iznini temsil eder. Grubun okuma izni varsa bir “r” karakteri veya grup yoksa “– ” karakteri vardır. Bu, bir dosya üzerinde işlemlerin dosyanın içeriğini okumasına izin verir, yani içerikler görüntülenebilir ve kopyalanabilir. Bir dizinde, dizindeki dosya adları listelenebilir, ancak diğer ayrıntılar mevcut değildir.
Yazma
Her grubun ikinci karakteri yazma iznini temsil eder. Grubun yazma izni varsa “w” karakteri, yoksa bir “-“ karakteri vardır. İşlem tarafından bir dosyaya yazılabilir, böylece bir dosyadaki değişiklikler kaydedilebilir. w izninin, dosyada düzgün çalışması için gerçekten “r” izni gerektirdiğini unutmayın. Bir dizinde, dosyalar dizine eklenebilir veya dizinden kaldırılabilir. w izninin düzgün çalışması için dizinde x izni gerektirdiğini unutmayın.
Çalıştırma/Yürütme
Her grubun üçüncü karakteri yürütme iznini temsil eder. Grubun yürütme izni varsa bir “x” karakteri, yoksa bir “- ” karakteri vardır. Bir dosya, bir işlem olarak yürütülebilir veya çalıştırılabilir. Bir dizinde, kullanıcı dizine girmek için cd komutunu kullanabilir ve dizini dosyalara ve muhtemelen bu dizin altındaki alt dizinlere erişmek için bir yol adında kullanabilir.
İzinleri Değiştirme
chmod (mod değiştir) komutu, dosyalar ve dizinler üzerindeki izinleri değiştirmek için kullanılır. Bu komutla kullanılabilecek iki teknik vardır. sembolik ve sayısal. Her iki teknik de aşağıdaki temel sözdizimini kullanır.
chmod yeni_izin dosya_adi
Bir dosyanın izinlerini değiştirmek için ya dosyanın sahibi olmanız ya da kök kullanıcı olarak oturum açmanız gerekir.
izinler.txt adında, yeni bir dosya oluşturalım.
Sembolik Yöntem
Mevcut izinlerin bazılarını değiştirmek istiyorsanız, sembolik yöntemin kullanımı genellikle daha kolaydır. Bu yöntemle, dosyada hangi izinleri değiştirmek istediğinizi belirtirsiniz ve diğer izinler olduğu gibi kalır. Sembolik yöntemi kullanarak chmod komutunun yeni_izin argümanını belirtirken üç tür bilgi gereklidir. Değişikliklerin hangi izin gruplarına uygulanacağını belirtmek için aşağıdaki karakterlerden birini veya birkaçını kullanarak başlayın.
u –>kullanıcı sahibi
g –>grup sahibi
o –>diğerleri
a –>tümü
Ardından, izinleri nasıl değiştirileceğini belirtmek içim aşağıdaki operatörlerden birini seçiniz.
+ –>ekle
– –>kaldır
= –>eşittir
Son olarak, değiştirilecek izin türlerini belirtmek için aşağıdaki karakterleri kullanın.
r –> okuma
w –> yazma
x –> çalıştırma
Örneğin, grup sahibine izinler.txt adlı bir dosya üzerinde yazma izni vermek için aşağıdaki komutu kullanabilirsiniz.
chmod g+w izinler.txt
Yukarıdaki örnekte, yalnızca grup sahibinin izni değiştirildi. Diğer tüm izinler, chmod komutunun çalıştırılmasından önceki gibi kaldı.
Dosyanın izinlerinde birden çok değişiklik yapmak için değerleri birleştirebilirsiniz. Örneğin, kullanıcı ve grup sahibine yürütme izni ekleyen ve diğerleri için okuma iznini kaldıran aşağıdaki komutu göz önünde bulundurun.
chmod ug+x,o-r izinler.txt
Son olarak, belirtilen izinleri ekleyen ve belirtilmemiş olanların kaldırılmasına neden olan = karakterini kullanabilirsiniz. Örneğin, kullanıcı sahibine yalnızca okuma ve yürütme izinleri vermek, yazma iznini kaldırmak gibi.
chmod u=rx, izinler.txt
Sayısal Yöntem
Sayısal yöntem (sekizlik yöntem olarak da adlandırılır) bir dosyadaki birçok izni değiştirirken kullanışlıdır. Her izin türüne sayısal bir değer atanan sekizlik numaralandırma sistemine dayanır. Sektörde genelde bu yöntem kullanılmaktadır.
4 –>okuma
2 –>yazma
1 –>çalıştırma
0’dan 7’ye kadar sayıların bir kombinasyonu kullanılarak, tek bir izin grubu seti için olası okuma, yazma ve yürütme izinlerinin herhangi bir kombinasyonu belirtilebilir. Örneğin:
7 –>rwx
6 –>rw-
5 –>r-x
4 –>r–
3 –>-wx
2 –>–x
1 –>–x
0 –>—
yeni_izinler bağımsız değişkeni, her izin grubu için bir sayı olmak üzere üç sayı olarak belirtilir. İzinleri değiştirmek için sayısal yöntem kullanıldığında, dokuz iznin tümü belirtilmelidir. Bu nedenle, sembolik yöntem birkaç izni değiştirmek için genellikle daha kolaydır, sayısal yöntem ise daha sert değişiklikler için daha iyidir.
Örneğin, izinler.txt adlı bir dosyanın izinlerini rwxr-xr olacak şekilde ayarlamak için aşağıdaki komutu kullanabilirsiniz.
chmod 754 izinler.txt
Yukarıdaki örnekte, kullanıcı sahibi, okuma, yazma ve çalıştırma, grup sahibi okuma ve çalıştırma, diğerleri ise sadece okuma yetkisine sahip olacaktır.
Stat komutunu hatırlayın, ls -l komutundan daha ayrıntılı bilgi sağlar. Bu nedenle, bir dosyadaki izinleri görüntülerken ls -l komutu yerine stat komutunu kullanmayı düşünebilirsiniz. Stat komutunun büyük bir avantajı, aşağıda vurgulandığı gibi hem sembolik hem de sayısal yöntemleri kullanarak izinleri göstermesidir.
Varsayılan İzinler
umask komutu, bir dosya veya dizin oluşturulduğunda ayarlanan varsayılan izinleri belirlemek için kullanılan bir özelliktir. Varsayılan izinler, umask değeri izin verilen maksimum varsayılan izinlerden çıkarıldığında belirlenir. Maksimum varsayılan izinler dosyalar ve dizinler için farklıdır:
dosya –>rw-rw-rw-
dizinler –>rwxrwxrwx
Bir dosya oluşturulurken başlangıçta belirlenen izinler rw-rw-rw- değerini aşamaz. Bir dosya üzerinde yürütme iznine sahip olmak için, önce dosyayı oluşturmanız ve ardından izinleri değiştirmeniz gerekir.
umask komutu, geçerli umask değerini görüntülemek için kullanılabilir.
Yukarıdaki çıktının dökümü aşağıdaki gibidir.
İlk 0, umask’in sekizlik bir sayı olarak verildiğini gösterir.
İkinci 0, varsayılan kullanıcı sahibinin izinlerinden hangi izinlerin çıkarılacağını gösterir.
Üçüncü 0, varsayılan grup sahibinin izinlerinden hangi izinlerin çıkarılacağını gösterir.
Son sayı 2, varsayılan diğerinin izinlerinden hangi izinlerin çıkarılacağını gösterir.
Farklı kullanıcıların farklı şemsiyeleri olabileceğini unutmayın. Tipik olarak, kök kullanıcının normal kullanıcı hesaplarından daha kısıtlayıcı bir umask değeri vardır.
umask’in nasıl çalıştığını anlamak için, bir dosyanın umask değerinin 027 olarak ayarlandığını varsayın ve aşağıdakileri göz önünde bulundurun.
varsayılan dosya –>666
umask –>-027
sonuç –>640
027 umask, aşağıda gösterildiği gibi yeni dosyaların varsayılan olarak 640 veya rw-r —- izinleri alacağı anlamına gelir:
Dizinler için varsayılan izinler dosyalardan farklı olduğundan, 027’lik bir umask, yeni dizinlerde farklı başlangıç izinlerine neden olur.
varsayılan dizin –>777
umask –>-027
sonuç –>750
027 umask, aşağıda gösterildiği gibi dizin dosyalarının varsayılan olarak 750 veya rwxr-x — izinlerini alacağı anlamına gelir.
Yeni umask yalnızca o oturum sırasında oluşturulan dosya ve dizinlere uygulanır. Yeni bir kabuk başlatıldığında, varsayılan umask yeniden etkin olacaktır.
Bir kullanıcının umask’ini kalıcı olarak değiştirmek, o kullanıcının ana dizininde bulunan .bashrc dosyasını değiştirmeyi gerektirir.
Özel Dizinler ve Dosyalar
Çoğu durumda, temel Linux izinleri, okuma, yazma ve yürütme, bireysel kullanıcıların veya kuruluşların güvenlik ihtiyaçlarını karşılamak için yeterlidir. Ancak, birden çok kullanıcının aynı dizin ve dosyalar üzerinde rutin olarak çalışması gerektiğinde, bu izinler yeterli olmayabilir. Özel izinler setuid, setgid ve sticky bit bu sorunları gidermek için tasarlanmıştır.
Setuid
Setuid izni çalıştırılabilir bir ikili dosyada ayarlandığında, ikili dosya, onu çalıştıran kullanıcı olarak değil, dosyanın sahibi olarak çalıştırılır. Bu izin, normal kullanıcılar tarafından çalıştırılabilmeleri, ancak normal kullanıcının normalde erişemediği sistem dosyalarına erişim sağlayan kök izinleriyle çalıştırılmaları için bir dizi sistem yardımcı programında ayarlanır.
mehmetoz kullanıcısı /etc/shadow dosyasının içeriğini görüntülemeye çalıştığı zaman aşağıdaki gibi bir sonuç çıktısı olacaktır.
etc/shadow üzerindeki izinler, normal kullanıcıların dosyayı görüntülemesine (veya değiştirmesine) izin vermez. Dosyanın sahibi kök kullanıcıya ait olduğundan, yönetici bu dosyayı görüntüleme veya değiştirme izinlerini geçici olarak değiştirebilir.
Şimdi passwd komutunu hatırlayalım. Bu komut çalıştığında, /etc/shadow dosyasını değiştirir, bu imkansız görünür çünkü bu dosyaya erişmeye çalışan mehmetoz kullanıcısının çalıştırdığı diğer komutlar başarısız olur. Öyleyse, normalde bu kullanıcının dosyaya erişimi yokken mehmetoz kullanıcısı passwd komutunu çalıştırırken /etc/shadow dosyasını neden değiştirebilir? 🙂
Passwd komutu özel setuid izin setine sahiptir. passwd komutu çalıştırıldığında ve komut /etc/ shadow dosyasına eriştiğinde, sistem, dosyaya erişen kullanıcı, komutu çalıştıran kullanıcı değil, passwd komutunun (kök kullanıcı) sahibiymiş gibi davranır.
Bu izin setini ls -l komutunu çalıştırarak görebilirsiniz.
ls -l /usr/bin/passwd
Yukarıdaki ls komutunun çıktısına dikkat edin; setuid izni, normalde yürütme izninin temsil edileceği sahip izinlerinde “s” ile temsil edilir. Küçük harf s, hem setuid hem de yürütme izninin ayarlandığı anlamına gelirken, büyük harf “S”, kullanıcının yürütme izninin değil, yalnızca setuid olduğu anlamına gelir.
Okuma, yazma ve yürütme izinleri gibi, sembolik ve sekizlik yöntemler kullanılarak chmod komutuyla özel izinler ayarlanabilir.
Setuid iznini sembolik olarak eklemek için şunu çalıştıralım.
chmod u+s dosya
Setuid iznini sayısal olarak eklemek için, dosyanın mevcut izinlerine 4000 ekleyin (aşağıdaki örnekte dosyanın başlangıçta izni için 664 olduğunu varsayın.
chmod 4664 dosya
Setuid iznini sembolik olarak kaldırmak için şunu çalıştırın.
chmod u-s dosya
Setuid iznini sayısal olarak kaldırmak için, dosyanın mevcut izinlerinden 4000 çıkarın.
chmod 0664 dosya veya chmod 664
Önceden, üç basamaklı kodlar kullanarak sekizlik yöntemle izin ayarlanıyordu. Üç basamaklı bir kod sağlandığında, chmod komutu üç basamaklı koddan önceki ilk basamağın 0 olduğunu varsayar. Yalnızca dört basamak belirtildiğinde özel bir izin setidir.
Zaten özel bir izin seti olan bir dosyada izin değiştirilirken üç hane belirtilirse, ilk hane 0 olarak ayarlanacak ve özel izin dosyadan kaldırılacaktır.
Setgid
Setgid izni setuid’e benzer, ancak grup sahibi izinlerini kullanır. İki tür setgid izni vardır. Bir dosyada setgid ve bir dizinde setgid. Setgid işlevinin davranışı, bir dosya veya dizinde ayarlanmasına bağlıdır.
Dosyalarda Setgid
Bir dosyadaki setgid izni setuid’e çok benzer. Kullanıcının ek (geçici) grup erişimi sağlayacak şekilde yürütülebilir bir ikili dosyayı çalıştırmasına olanak tanır. Sistem, komutu çalıştıran kullanıcının etkin bir şekilde dosyanın sahibi olan gruba ait olmasına izin verir, ancak yalnızca setgid programında bulunur.
Çalıştırılabilir bir dosyadaki setgid iznine iyi bir örnek /usr/bin/write komutudur. Grup sahibinin yanı sıra bu dosyanın izinlerine de dikkat edelim.
Bu dosyanın, grubun yürütme konumundaki s’lerin varlığıyla ayarlandığını görebilirsiniz. Bu çalıştırılabilir dosyanın tty grubuna ait olması nedeniyle, bir kullanıcı bu komutu çalıştırdığında, komut, tty grubunun sahip olduğu gruba ait dosyalara erişebilir.
Bu erişim önemlidir, çünkü /usr/bin/write komutu terminallere mesajlar gönderir, bu da aşağıdaki gibi dosyalara veri yazarak gerçekleştirilir.
tty grubunun yukarıdaki dosyalar üzerinde yazma iznine sahip olduğunu, ancak tty grubunda olmayan kullanıcıların (“diğerleri”) bu dosyalar üzerinde izinlerinin olmadığını unutmayın. Setgid izni olmadan, /usr/bin/write komutu başarısız olur.
Dizinlerde Setgid
Bir dizinde ayarlandığında, setgid izni dizinde oluşturulan dosyaların otomatik olarak dizine sahip olan gruba ait olmasına neden olur. Bu davranış, yeni dosya grubu sahipliğinin normalde işleyişine aykırıdır, çünkü varsayılan olarak yeni dosyalar, dosyayı oluşturan kullanıcının birincil grubuna ait gruptur.
Ek olarak, setgid izin setiyle bir dizin içinde oluşturulan tüm dizinler sadece setgid dizininin sahibi olan gruba ait değildir, aynı zamanda yeni dizinde de setgid otomatik olarak ayarlanır. Diğer bir deyişle, bir dizin setgid ise, o dizin içinde oluşturulan tüm dizinler setgid iznini devralır.
Varsayılan olarak, ls komutu bir dizinde yürütüldüğünde, dizinde bulunan dosyalar hakkında bilgi verir. Dizinin kendisi hakkındaki bilgileri görüntülemek için -d seçeneğini ekleyin. -l seçeneği ile kullanıldığında setgid izninin ayarlanıp ayarlanmadığını belirlemek için kullanılabilir. Aşağıdaki örnekte, /tmp/setgitdizin isimli dizininin setgid izin setine sahip olduğunu ve bunun mehmetoz grubuna ait olduğunu gösterir. Anlaşılması adına ben kendim oluşturdum sizde gözükmeyecektir. Birazdan kendiniz Setgid’i ayarlayabileceksiniz.
Uzun bir listede setgid izni, grup yürütme pozisyonundaki bir s ile temsil edilir. Küçük harf, hem setgid hem de grup yürütme izinlerinin ayarlandığı anlamına gelir.
Büyük S harfi, yalnızca setgid ve grup yürütme izninin ayarlandığı anlamına gelir. Grupta izinlerin yürütme konumunda büyük harf S görürseniz, bu, setgid izninin ayarlanmış olmasına rağmen, grubun onu kullanmak için yürütme iznine sahip olmadığı için gerçekten etkin olmadığını gösterir.
Bir yönetici neden bir setgid dizini kurmak istesin? İlk olarak, aşağıdaki kullanıcı hesaplarını göz önünde bulundurun.
Kullanıcı fatih, ik grubunun bir üyesidir.
Kullanıcı merve, evrak grubunun bir üyesidir.
Kullanıcı gülsüm, fatura grubunun bir üyesidir.
Bu senaryoda, bu üç kullanıcının ortak bir proje üzerinde çalışması gerekir. Yöneticiye, birlikte çalışabilecekleri, ancak başka hiç kimsenin dosyalarına erişemeyeceği bir paylaşılan dizin oluşturmasını isterler. Yönetici şunları yapar:
- Ortak adında yeni bir grup oluşturur.
- Ortak grubuna Fatih, Merve ve Gülsüm’ü ekler.
- /home/ortak adında yeni bir dizin oluşturur.
- / home/ortak dizininin grup sahibini ortak grubu yapar.
- /home/ortak dizinine aşağıdaki izinleri verir: rwxrwx —
Sonuç olarak, fatih, merve ve gülsüm /home/ortak dizinine erişebilir ve dosya ekleyebilir. Bununla birlikte, olası bir sorun vardır. Fatih, /home/ortak dizininde bir dosya oluşturduğunda, yeni dosyanın sahibi birincil grubuna aittir.
Ne yazık ki, Merve ve Gülsüm /home/ortak dizinine erişebilirken, Fatih’in dosyasıyla hiçbir şey yapamazlar. Bu dosya için onların izinleri diğer izinlerdir (—).
Yönetici setgid iznini /home/ortak dizinine ayarlarsa, Fatih bir dosya oluşturduğunda, takım grubuna sahip olur. Sonuç olarak, Merve ve Gülsüm, grup sahibi izinleri (r–) aracılığıyla dosyaya erişebilir.
Kesinlikle, Fatih dosyayı oluşturduktan sonra grup sahipliğini veya diğer izinleri değiştirebilir, ancak çok sayıda yeni dosya oluşturulursa bu sıkıcı hale gelir. Setgid izni bu durumu kolaylaştırır.
Setgid’i Ayarlama
Setgid iznini sembolik olarak eklemek için aşağıdaki sözdizimini kullanılır.
chmod g+s dosya veya dizin
Setgid iznini sayısal olarak eklemek için, dosyanın mevcut izinlerine 2000 ekleyin (aşağıdaki örnekte dosyanın başlangıçta izni için 664 olduğunu varsayın.)
chmod 2664 dosya veya dizin
Setgid iznini sembolik olarak kaldırmak için şunu çalıştırın.
chmod g-s dosya veya dizin
Setgid iznini sayısal olarak kaldırmak için dosyanın mevcut izinlerinden 2000’i çıkarın.
chmod 0664 veya chmod 664
Sticky Bit
Yapışkan bit izni, diğer kullanıcıların paylaşılan bir dizinde sahip olmadıkları dosyaları silmelerini önlemek için kullanılır. Bir dizine yazma izni olan herhangi bir kullanıcının o dizinde dosya oluşturabileceğini ve dosyanın sahibi olmasa bile dizindeki herhangi bir dosyayı silebileceğini hatırlayın!
Yapışkan bit izni, dizindeki yazma iznini değiştirerek dosyaların diğer kullanıcılarla paylaşılmasına izin verir, böylece kullanıcılar yine de dizine dosya ekleyebilir ve silebilir, ancak dosyalar yalnızca dosyanın sahibi veya kök kullanıcı tarafından silinebilir.
Yapışkan bit dizinlerinin kullanımına iyi bir örnek, /tmp ve /var/tmp dizinleri olabilir. Bu dizinler, herhangi bir kullanıcının geçici bir dosya oluşturabileceği konumlar olarak tasarlanmıştır.
Bu dizinlerin tüm kullanıcılar tarafından yazılabilir olması amaçlandığından, yapışkan biti kullanacak şekilde yapılandırılırlar. Bu özel izin olmadan kullanıcılar, diğer kullanıcılara ait olanlar da dahil olmak üzere bu dizindeki tüm dosyaları silebilirler.
ls -l komutunun çıktısı, diğer izin grubunun yürütme bitinde yapışkan biti karakter olarak görüntüler:
drwrwxrw”t”
ls -ld /tmp
Küçük harf t, hem yapışkan bit hem de yürütme izinlerinin diğerleri için ayarlandığı anlamına gelir. Büyük T harfi, yalnızca yapışkan bit izninin ayarlandığı anlamına gelir. Büyük S, setuid veya setgid izinleriyle ilgili bir sorunu belirtirken, büyük T harfinin, grup sahibinin yürütme iznine sahip olması koşuluyla, bir soruna işaret etmesi gerekmez.
Sticky Bit iznini sembolik olarak ayarlamak için aşağıdaki gibi bir komut yürütün.
chmod o+t dosya veya dizin
Sticky Bit iznini sayısal olarak ayarlamak için dizinin mevcut izinlerine 1000 ekleyin (aşağıdaki örnekteki dizinin izinleri için başlangıçta 664 olduğunu varsayın)
chmod 1664 dosya veya dizin
Sticky Bit iznini sembolik olarak kaldırmak için şunu çalıştırın.
chmod o-t dosya veya dizin
Sticky Bit iznini sayısal olarak kaldırmak için dosyanın mevcut izinlerinden 2000’i çıkarın.
chmod 0664 veya chmod 664
LINKS
Dosya sistemlerinde derinlemesine alt dizinlerde bir dosyanın olduğunu düşünün. Örnek,
/usr/share/Evraklar/ozel/example/folder1/Folder2/2021/aralık/example.txt
Ahmet kullanıcısı bu dosyayı düzenli olarak günceller ve erişmesi gerekir. Uzun dosya adı yazmak tahmin edeceğiniz gibi ideal bir çözüm değildir. Ancak dosya bu konumda bulunması gerekiyor. Sürekli güncellediği için, bu dosyayı kopyalamakta çözüm olmadığını varsayalım. Böyle durumlarda links (bağlantılar) kullanışlı olmaktadır. Derin bir şekilde gömülü olan bağlantılı bir dosya oluşturabilirsiniz. Bu yeni dosya , ana dizine veya başka bir uygun konuma yerleştirilebilir. Bağlantı dosyasına eriştiğinizde, example.txt dosyasının içeriğinin değişeceğini unutmayın.
Başka bir kullanım alanı da dosya sisteminde disk alanı yetersiz hale geldiğinde dosyaları başka bir dosya sistemine taşıdıktan sonra eski dosya/dizin yolunu kullanan kişi ve uygulamaların hala eski yol üzerinden erişmeleri için kullanılır.
Dosyalar ve dizinler arasında link oluşturmak için “ln” komutu kullanılır.
NOT: ln komutu, orijinal dosya ile aynı yetkilendirmeye sahip yeni bir dosya kaydı oluşturur.
Sabit ve sembolik olarak 2 çeşit bağlantı vardır. Her bir bağlama yöntemi, aynı genel erişimle sonuçlanır, ancak farklı teknikler kullanır. Her yöntemin artıları ve eksileri vardır, bu nedenle her iki tekniği ve bunları ne zaman kullanacağınızı bilmek önemlidir.
Sabit (Hard) Bağlantılar
Oluşturulan her dosya için, dosya sisteminde dosyanın meta verilerini depolayan bir veri bloğu vardır. Meta veriler, izinler, sahiplik ve zaman damgaları gibi dosya hakkındaki bilgileri içerir. Meta veriler, dosya adını veya dosyanın içeriğini içermez, ancak dosyayla ilgili hemen hemen tüm diğer bilgileri içerir.
Bu meta verilere dosyanın inode tablosu denir. İnode tablosu ayrıca, verilerin depolandığı veri blokları adı verilen dosya sistemindeki diğer bloklara işaretçiler içerir.
Bir bölümdeki her dosyanın inode numarası adı verilen benzersiz bir kimlik numarası vardır. ls -i komutu, bir dosyanın inode numarasını görüntüler.
Kullanıcılar ve gruplar gibi, bir dosyayı tanımlayan şey, adı değil, kendisine atandığı numaradır. İnode tablosu dosya adını içermez. Her dosya için, bir inode numarası ile bir dosya adı arasında bir ilişki içeren bir dizinin veri alanında (veri bloğu) depolanan bir giriş de vardır.
/etc dizini için veri bloğunda, bu dizindeki tüm dosyaların ve bunlara karşılık gelen inode numaralarının bir listesi olacaktır.
/etc/ passwd
dosyasına erişmeye çalıştığınız da , sistem bu tabloyu dosya adını bir inode numarasına çevirmek için kullanır. Daha sonra dosya için inode tablosundaki bilgilere bakarak dosya verilerini alır.
Genel olarak hard link özellikleri;
•Orjinal dosya ile link oluşturulan dosyanın birebir aynısı iki farklı dosya oluşur. Birisinde yapılan işlem diğerine de yansır.
•Parametre kullanılmadan ln komutu kullanılırsa hard link oluşturulmuş olur.
•Orijinal dosya silinse bile, verilere diğer dosya üzerinden erişilebilir.
•Hard link dosya sistem ile doğrudan alakalıdır.
•Sadece aynı dosya sistemi üzerinde yapılabilir.
•Farklı dosya sistemleri arasında link oluşturulacaksa sadece sembolik link kullanılabilir.
Sabit bağlantılar oluşturmak için, ln
komut iki bağımsız değişkenle kullanılır. İlk bağımsız değişken, bağlanılacak mevcut bir dosya adıdır, hedef olarak adlandırılır ve ikinci bağımsız değişken, hedefe bağlanacak yeni dosya adıdır.
ln hedef yeni_baglanti_adi
ls -li komutunu çalıştırdığınızda, izinler ile kullanıcı sahibi arasındaki her dosya için görünen numara bağlantı sayısıdır.
Yukarıdaki görseldeki gibi, sabit bağlantılar, aynı inode’a işaret eden iki dosya adıdır. Hem 1hardlink hem de 1newhardlink dosyası aynı inode numarasına sahip olduğundan, aslında aynı dosyadırlar. Dosya verilerine her iki dosya adını kullanarak erişebilirsiniz.
Sembolik (Soft) Bağlantılar
Yumuşak bağlantı olarak da adlandırılan sembolik bağlantı, başka bir dosyaya işaret eden bir dosyadır. Halihazırda sistemde /etc dizininde bulunan birkaç sembolik bağlantı vardır:
Genel olarak Softlink özellikleri;
•Bağlantı sadece orijinal dosyayı gösteren bir isimdir.
•MS Windows sistemlerindeki karşılığı kısa yol oluşturmaktır.
•Sembolik link üzerinden dosyaya erişilemez.
•Sembolik link oluşturmak için –s parametresi kullanılır.
Önceki örnekte, /etc/grub.conf “dosyası ../boot/grub/grub.conf dosyasına” işaret etmektedir. Dolayısıyla, /etc/grub.conf dosyasının içeriğini görüntülemeye çalışırsanız, işaretçiyi izler ve size ../boot/grub/grub.conf dosyasının içeriğini gösterir.
Sembolik bir bağ oluşturmak için, ln komutuyla -s seçeneğini kullanılır.
ln -s hedef yeni_baglanti_adi
Bazen bir dosyaya yönelik sabit bağlantıların nerede olduğunu bilmek zor olabilir. Birden fazla bağlantı sayısına sahip normal bir dosya görürseniz, aynı inode numarasına sahip diğer dosyaları bulmak için find komutunu -inum arama kriteriyle birlikte kullanabilirsiniz. İnode numarasını bulmak için önce ls -i komutunu kullanırsınız.
Soft Linkler çok daha görseldir ve bağlantıyı belirlemek için ls komutunun ötesinde herhangi bir ekstra komut gerektirmez.
Sembolik Linklerin diğer avantajları ise;
Herhangi bir dosyaya bağlanabilirler. Ancak her dosya sistemi (bölüm) ayrı bir inode kümesine sahip olduğundan, dosya sistemlerini geçmeye çalışan sabit bağlantılar oluşturulamaz.
Sabit bağlantıların diğer bir sınırlaması, dizinlerde oluşturulamamasıdır. Bu sınırlamanın nedeni, işletim sisteminin kendisinin dizin yapısının hiyerarşisini tanımlamak için sabit bağlantılar kullanmasıdır.
Linux başlangıç eğitim serimizi tamamladık. Kapanışı güzel yapalım. 🙂 Aşağıdaki işlemi kendi veya başkalarının canlı sistemlerinde kesinlikle uygulamayınız.!!! Her ne olursa olsun, birilerine kızmanız veya haklı olmanız, sistemi çalışamaz hale getirebileceğiniz anlamına gelmez. rm komutunu anlatırken, kök dizininin içini silebilir miyiz? gibi bir soru aklınıza gelmiş olabilir. Şimdi beraber bakalım ve root (/) dizininin içindeki ne var ne yok silmeye çalışalım.
#rm -rf /*
Aşağıdaki gibi bazı dosyalar kaldırılmasa bile, sistem birazdan erişilemez hale gelecektir
Linux Professional Instutite, sınav çalışma kaynağı için bakınız:
https://learning.lpi.org/en/learning-materials/010-160/
İlk modülümüzde sizlere, önceden LPI sınavlarında çıkmış örnek sorularını paylaşacağımı söylemiştim. Aşağıda 50 tane soru vardır. Benim paylaştıklarım exam version 1.5 olmakla birlikte şuan güncel sınav 1.6 üzerinden devam etmektedir. Aşağıdaki soruları çözmeniz hem yeni bilgiler öğrenmenize hem de sizleri sınava hazırlayacaktır. Soruların cevapları, makalenin sonunda paylaşılmıştır. Cevapları bir not defterine yazıp, en son kontrol ediniz 🙂
Linux Essentials Certificate Exam, version 1.5
SINAV 010-150
QUESTION 1
Which of the following can be used to access the command line?
A. BIOS
B. Terminal
C. XWindow
D. Firefox
E. Xargs
QUESTION 2
Which Linux distribution is used as a basis for the creation of Ubuntu Linux?
- Red Hat Linux
- Arch Linux
- SUSE Linux
- Gentoo Linux
- Debian Linux
QUESTION 3
Which of the following programs is not a graphical web browser?
- Konqueror
- Firefox
- Links
- Opera
- Chrome
QUESTION 4
Which of the following answers are true for cloud computing? (Choose TWO correct answers.)
- Cloud Computing provides new tools to manage IT resources.
- From the business perspective, Cloud Computing means outsourcing or centralization of IT operations.
- Cloud Computing is the opposite of green IT; i.e. the use of fossil, non-regenerative energy for computing.
- Cloud Computing implies sharing all information with everyone else in ‘the cloud’.
QUESTION 5
Which of the following is a Linux based operating system for use on mobile devices?
- iOS
- CentOS
- Android
- Debian
QUESTION 6
Which one of the following is true about Open Source software?
- Open Source software can not be copied for free.
- Open Source software is available for commercial use.
- The freedom to redistribute copies must include binary or executable forms of the software but not the source code.
- Open Source software is not for sale.
QUESTION 7
Which of the following is a requirement of the GPL license but not the BSD license?
- Users who modify and distribute the software under the GPL license, must make the modifications they made, available to the recipients under the same license.
- The GPL license forbids the removal of copyright and license notices from source code files that are distributed.
- The GPL license contains a disclaimer of warranty requiring users not to hold the software authors liable for any damages.
- The GPL license requires that any legal disputes be settled with the mediation of the Free Software Foundation
QUESTION 8
What is the first character for file or directory names if they should not be displayed by commands such as ls unless specifically requested?
- \ (backslash)
- . (dot)
- – (minus)
- _ (underscore
QUESTION 9
Which of the following commands moves the directory ~/summer-vacation and its content to ~/vacation/2011?
- mv ~/vacation/2011 ~/summer-vacation
- move -R ~/summer-vacation ~/vacation/2011
- mv /home/summer-vacation /home/vacation/2011
- mv ~/summer-vacation ~/vacation/2011
- mv -R ~/summer-vacation ~/vacation/2011
QUESTION 10
Which of the following commands can be used to create a file?
- touch
- build
- nico
- create
- mkfile
QUESTION 11
Which option will cause the echo command NOT to output a trailing newline?
- -e
- -p
- -n
- -s
QUESTION 12
Which commands provide help for a specific Linux command? (Choose TWO correct answers.)
- info
- man
- helpme
- ask
- whatdoes
QUESTION 13
Which is a suitable command to find the next appearance of the word hidden in a man page being viewed from the command line?
- find hidden
- /? hidden
- CTRL-F hidden
- /hidden
QUESTION 14
While deleting all files beginning with the letter a there was still the file Access.txt left. Assuming that it had the correct ownership, why was it not deleted?
- Files with extensions need a different treatment.
- rm had to be called with the option -R to delete all files.
- The file Access.txt was probably opened by another application.
- The file Access.txt was hidden.
- Linux file names are case sensitive.
QUESTION 15
Which command line can be used to search help files that mention the word “copy”?
- man -k copy
- whatis copy
- man copy
- copy help
- copy –help
QUESTION 16
Which command is used to make a shell variable known to subsequently executed programs?
- export
- announce
- env
- transfer
- mv
QUESTION 17
Which command lists all files in the current directory that start with a capital letter?
- ls [A-Z]*
- ls A-Z
- ls A-Z*
- ls –uppercasefiles
- list-uppercase-files
QUESTION 18
Which command shows if /usr/bin is in the current shell search path?
- cat PATH
- echo $PATH
- echo %PATH
- cat $PATH
- echo %PATH%
QUESTION 19
Which of the following commands will display a list of all files in the current directory, including those that may be hidden?
- ls -a
- ls –hidden
- ls -h
- ls –a
QUESTION 20
Which of the following commands increases the number of elements in a directory? (Choose TWO answers)
- touch newfile
- create newfile
- ls newfile
- rmdir newdirectory
- mkdir newdirectory
QUESTION 21
What command would you use to get comprehensive documentation about any command in Linux?
- help command
- echo command
- locate command
- man command
- get command
QUESTION 22
How is it possible to determine if an executable file is a shell script which is read by Bash?
- The r bit is set.
- The file must end with .sh.
- The first line starts with #!/bin/bash.
- /bin/bash has to be run in debug mode.
- Scripts are never executable files.
QUESTION 23
Which of the following commands can be used to view a file and do search operations within it while viewing the contents?
- less
- find
- grep
- report
- see
QUESTION 24
Which function does a shell program serve?
- It provides a graphical environment.
- It is responsible for establishing a connection to another computer.
- It receives user commands and executes them.
- It is responsible for logging a user into the system.
QUESTION 25
Which of the following commands can be used to extract files from an archive?
- tar -vf
- tar -xvf
- tar -evf
- tar -e
- tar –v
QUESTION 26
How could one search for the file foo.txt under the directory /home?
- search /home -file foo.txt
- search /home foo.txt
- find /home -file foo.txt
- find /home -name foo.txt
- find /home foo.txt
QUESTION 27
What is the output of the following command? tail -n 20 test.txt
- The first 20 lines of test.txt.
- The last 20 lines of test.txt omitting the blank lines.
- The last 20 lines of test.txt with line numbers.
- The last 20 lines of test.txt including blank lines.
QUESTION 28
Which commands will archive /home and its content to /mnt/backup? (Choose TWO correct answers.)
- cp -ar /home /mnt/backup
- mv /home /mnt/backup
- sync -r /home /mnt/backup
- tar -cf /mnt/backup/archive.tar /home
- copy -r /home /mnt/backup
QUESTION 29
Why is the file data.txt empty after executing sort data.txt > data.txt?
- Because, if data.txt is empty now, it must have been empty before.
- Because sort cannot sort text files, only binary files.
- Because sort detects that both files are the same.
- Because the file gets truncated before sort is executed.
QUESTION 30
Which of the following commands will output all of the lines that contain either the string Fred or fred? (Choose TWO correct answers.)
- grep -v fred data_file
- grep ‘[f]red’ data_file
- egrep fred data_file
- grep ‘[Ff]red’ data_file
- grep -i fred data_file
QUESTION 31
The output of the program date should be saved in the variable actdat. What is the correct statement?
- actdat=`date`
- set actdat=’date’
- date | actdat
- date > $actdat
- actdat=date
QUESTION 32
What two character sequence is present at the beginning of an interpreted script? (Please specify the TWO correct characters only) Bu sorunun cevabını tahmin etmeniz gerekmektedir. Cevabı aşağıda paylaşılacaktır.
QUESTION 33
How can the current directory and its subdirectories be searched for the file named MyFile.xml?
- find . -name MyFile.xml
- grep MyFile.xml | find
- grep -r MyFile.xml .
- less MyFile.xml
- search Myfile.xml ./
QUESTION 34
Which of the following commands will set the variable text to olaf is home? (Select TWO answers)
- text=olaf\ is\ home
- text=$olaf is home
- $text=’olaf is home’
- text==’olaf is home’
- text=”olaf is home”
QUESTION 35
Which of the following commands will create an archive file, named backup.tar, containing all the files from the directory /home?
- tar /home backup.tar
- tar -cf /home backup.tar
- tar -xf /home backup.tar
- tar -xf backup.tar /home
- tar -cf backup.tar /home
QUESTION 36
What is the output of the following command?
for token in a b c; do echo -n ${token}; done
- anbncn
- abc
- $token$token$token
- {a}{b}{c}
- a b c
QUESTION 37
Which of the following commands are used to view memory usage? (Choose TWO correct answers.)
- memory
- top
- ps
- free
- nice
QUESTION 38
Which of the following directories is often used to store log files?
- /home
- /var
- /temp
- /dev
- /usr
QUESTION 39
Identify the proper device for the third partition, on the second hard disk, on the first IDE controller on a PC system.
- /dev/hdb3
- /dev/hd1b3
- /dev/hdc1d2p3
- dev/hdc1a3
- dev/hdc1b3
QUESTION 40
A Linux computer has no access to the internet. Which command displays information about the network gateway for the system?
- traceroute
- ifconfig
- gateway
- route
- ipconfig
QUESTION 41
Where is the BIOS located?
- RAM
- Hard drive
- Motherboard
- LCD monitor
QUESTION 42
Which network interface always exists in a Linux system?
- lo
- sit0
- wlan0
- vlan0
- eth0
QUESTION 43
Which command will display running process information in real time?
- top
- show current
- ps current
- process
QUESTION 44
After installing a new package, in which directory are you most likely find its configuration file?
- /lib
- /conf
- /etc
- /usr
- /opt
QUESTION 45
Which of the following Ubuntu releases is considered most stable and fit to use for business purposes?
- LTS
- Xubuntu
- Ubuntu Vanilla
- Kubuntu
- Xubuntu Server
QUESTION 46
What is the command that will show system boot time messages?
- dmesg
- echo
- lspci
- display system boot
- messages
QUESTION 47
Which of the following files holds the definition of the local user accounts?
- /etc/secret
- /etc/users
- /etc/passwd
- /etc/id
- /etc/home
QUESTION 48
What permissions are set on a file with the command chmod 654 file.txt?
- drw-r-xr–
- d–wxr-x–
- –wxr-x–x
- -rwxrw—x
- -rw-r-xr—
QUESTION 49
Which statements about the directory /etc/skel are correct? (Choose TWO answers)
- The personal settings of root are in this directory.
- The files from the directory are copied to the home directory of the new user when starting the system.
- The files from the directory are copied to the home directory of a new user when the account is created.
- The directory contains a default set of configuration files used by the useradd command.
- The directory contains the global settings for the Linux system.
QUESTION 50
The following line is found in which system file? root:x:0:0::/root:/bin/bash
- /etc/user.conf
- /etc/shadow
- /etc/passwd
- /usr/bin/shadow
- /etc/password
SINAV CEVAPLARI
Cevap1= 2
Cevap2= 5
Cevap3= 3
Cevap4= 1-2
Cevap5= 3
Cevap6= 2
Cevap7= 1
Cevap8= 2
Cevap9= 4
Cevap10= 1
Cevap11= 3
Cevap12= 1-2
Cevap13= 4
Cevap14= 5
Cevap15= 1
Cevap16= 1
Cevap17= 1
Cevap18= 2
Cevap19= 1
Cevap20= 1-5
Cevap21= 4
Cevap22= 3
Cevap23= 1
Cevap24= 3
Cevap25= 2
Cevap26= 4
Cevap27= 4
Cevap28= 1-4
Cevap29= 4
Cevap30= 4-5
Cevap31= 1
Cevap32= #!
Cevap33= 1
Cevap34= 1-5
Cevap35= 5
Cevap36= 2
Cevap37= 2-4
Cevap38= 2
Cevap39= 1
Cevap40= 4
Cevap41= 3
Cevap42= 1
Cevap43= 1
Cevap44= 3
Cevap45= 1
Cevap46= 1
Cevap47= 3
Cevap48= 5
Cevap49= 3-4
Cevap50= 3
Zor olsa da Linux başlangıç serimizi yaklaşık 50 günde tamamladık 🙂 Bu süreçte bir çok temel konulara baktık ve uygulama yaptık. Makaleyi yazarken, Networking Academy ve Oracle Linux’ten faydalandım. Merak ettiklerinizi, eksikleri veya eklemek istediklerinizi yorumlarda belirtebilirsiniz. Umarım faydalı olmuştur. Başka bir makalede görüşmek üzere. Sağlıcakla kalın ?
Baştan sona harika bir seri oldu, tebrikler.
Teşekkür ederim hocam, beğenmene sevindim 🙂
Mehmet Hocam elinize sağlık. Küçük bir düzeltme yapmak istiyorum.
Sayısal izin değiştirme yönterminde 2 –> -w- olması gerekiyor.
Düzeltme için teşekkürler Özgür bey.