Düzey: Orta
Martin Streicher
(martin.streicher@linux-mag.com),
Şef Editör, Linux Magazine
17 Ekim 2006
Dosyalarınızı korumak ya da başkalarıyla paylaşmak için dosya izinlerini
nasıl kullanacağınızı öğrenin.
Yaklaşık 50 yıl önceki elektronik çağının başlangıcından, 1977'de Apple
bilgisayarın piyasaya çıkışına kadar bilgi işlem donanımının bulunması zor,
edinilmesi ve çalıştırılması da aşırı pahalıydı. O günlerin (nispeten) ilkel
sistemlerinden elde edilen süreler çok değerliydi ve yalnızca en zorlu
sorunları çözmeye ayrılıyordu. Projeler bilgisayar süresi alabilmek için
yarışıyordu ve eski bilgi teknolojisi (IT) yöneticileri, sistemleri haftanın yedi
günü 24 saat meşgul tutmak için çalışıyorlardı. Ne de olsa, boşa geçirilen bir an
bile paranın sokağa atılması demekti.
İdeal olan, bu kayıp anların, gerektiğinde gereken işe
ayrılabilmesi ve otomatik olarak bilgi işlem gerektiren hazır görevlere
aktarılabilmesiydi. Nitekim, zaman paylaşımının (ilk kez 1957'de Robert
Berner tarafından önerilmiştir) arkasındaki düşünce de buydu. Multics, RSTS/E ve
daha sonra da UNIX® sistemlerinde ve bu sistemlerin birçok modern biçiminde
gerçekleştirilen zaman paylaşımı ya da çoklu görev (multi-tasking), bir
bilgisayarın kaynaklarını (CPU, giriş/çıkış ve bellek) bekleyen işlere böler ve her
işin, makine kullanımında ayrı bir yerinin olduğu görünümünü oluşturur. Çoklu görev
kullanımı olan bir anabilgisayara birkaç terminal bağlarsanız, her bir terminal bir
kişisel bilgisayar gibi görünür.
Bugünlerde, büyük olasılıkla kendinize ait bir UNIX bilgisayarınız
vardır ve çok daha güçlü, çok işlemcili bir sistemi başkalarıyla paylaşıyorsunuzdur.
Her iki durumda da - hem dizüstü bilgisayarınız hem de şirketinizin makine
odasındaki UNIX devi için - eşzamanlı erişim esastır. UNIX, bilgileri koruyup
paylaşabilmenizi sağlayan güçlü araçlar ve altyapı sunar.
Bu makalede kullanıcı ayrıcalıkları ele alınmakta ve özellikle,
dizininizi ve dosyalarınızı diğer kişilerle paylaşırken ya da diğerlerinin erişimini
kısıtlarken dosya izinlerini nasıl kullanacağınız incelenmektedir. UNIX dilinde
akıcı bir şekilde konuşmak istiyorsanız, izinleri anlamanız büyük önem taşır.
id, ego ve UID
Başlangıç olarak kim olduğunuzu keşfedelim. Bir komut istemine
whoami komutunu yazın:
Bilgisayarım strike yanıtını verdi. Bu benim kullanıcı
adım (oturum açmak için kullandığım ad). Sizin whoami komutunuz da,
sizin oturum açma adınızı vermelidir.
Görünüşe göre, kullanıcı adınız kullanıcı kimliğiniz (UID) için
gerçekten de bir takma ad. UID'nizi görmek için id -u yazın:
İşte, benim UID bilgim 501.
Genel olarak, kullanıcı adları insanlar tarafından okunabildiği ve
hatırlaması kolay olduğundan, mümkün olduğunda UID'lerin yerine kullanıcı
adları kullanılır. Örneğin, çalışan işlemlerinizin bir listesini görmek için
ps uxf komutunu çalıştırdığınızda, ps komutu
işlemlerinizin sahibi olarak kullanıcı adınızı görüntüler.
$ ps uxf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
strike 32346 0.0 0.1 6496 1832 ? S 19:39 0:00 sshd: strike@pts/0
strike 32347 0.0 0.1 2592 1476 pts/0 Ss 19:39 0:00 \_ -bash
strike 32358 0.0 0.0 2476 820 pts/0 R+ 19:39 0:00 \_ ps uxf
|
Sonuç, çalışan üç işlem olduğunu gösteriyor: ps komutunun
kendisini başlatan bash kabuğunu oluşturan bir ssh oturum
açma işlemi. Benzer bir şekilde, dosyalarınızın sahiplerini görüntülemek için ana
dizininizde ls -alFG komutunu çalıştırırsanız, UID'niz yerine kullanıcı
adınız görüntülenir.
Genel olarak, yalnızca siz görevlerinizi kesintiye uğratabilirsiniz.
(Elbette, kök olan üst kullanıcı tüm görevleri denetleyebilir ve
kullanabilir.) Örneğin, aynı sistemi paylaşan joe adlı diğer kullanıcı,
yukarıdaki listede bulunan çalışan kabuğumu (32347 numaralı işlem) sonlandıramaz:
$ whoami
joe
$ kill -INT 32347
-bash: kill: (32347) - Operation not permitted
|
Burada, joe kullanıcısının ps auxf komutunu çalıştırarak
bulabileceği kabuğumun işlem tanıtıcısı 32347 'dir. Ancak, işlemin sahibi
ben olduğum için joe, işlemi sonlandıramaz. Buna karşılık olarak, ben kendi
görevlerinden herhangi birini Liste 1'de gösterilen şekilde
sona erdirebilirim.
Liste 1. Kendi işlemlerinizin sona
erdirilmesi
$ ps uxf
...
strike 32347 0.0 0.1 2592 1488 pts/0 Ss 19:39 0:00 \_ -bash
strike 32733 39.5 0.0 1480 356 pts/0 R 19:50 0:01 \_ yes
$ kill -INT 32733
$ ps uxf
...
strike 32347 0.0 0.1 2592 1488 pts/0 Ss 19:39 0:00 \_ -bash
|
kill -INT 32733 komutunu çalıştırdıktan sonra 32733 işlemi
(yes komutu) sona erdirildi.
Nispeten basit bit kavram olsa da güçlü sahiplik hakları ve kullanıcı
başına yapılandırma, UNIX'i örneğin Microsoft® Windows® işletim sisteminden çok
daha güvenli yapan iki özelliktir.
Üyeliğin
ayrıcalıkları vardır
Başlattığınız işler gibi yarattığınız dizinlerin ve dosyaların da sahibi
olursunuz. Örneğin, ana dizininizde ls -alFG komutunu çalıştırın ve
sahip olduklarınızı görmek için Liste 2'de gösterildiği
$HOME parametresini kullanın.
Liste 2. Ana dizinde sahip olduklarınızın
listelenmesi
$ ls -alFG $HOME
...
-rw------- 1 strike 6175 Aug 25 07:03 .bash_history
-rw------- 1 strike 567 Apr 20 2005 .bash_profile
-rw------- 1 strike 1834 Apr 20 2005 .bashrc
drwx------ 2 strike 4096 Mar 8 10:54 .ssh/
-rw------- 1 strike 9516 Aug 22 16:42 .viminfo
-rw-r--r-- 1 strike 1529617 Jul 19 07:00 Archive.zip
drwxrwx--- 3 strike 4096 Aug 24 04:04 IBM/
drwxr-xrwx 3 strike 4096 Jun 14 06:06 backups/
...
|
UNIX gruplarıyla ilgili
sorun
Bir dosyanın grup sahibinin değiştirilmesi, bir grubun
tüm üyeleriyle dosya paylaşımının kullanışlı bir yoludur. Örneğin, jane ve
joe, bilim UNIX grubunu oluşturuyorsa ve siz, hassas nuclear.csv veri
dosyanızı her iki kullanıcıyla da paylaşmak istiyorsanız, tek yapmanız gereken, bu
dosyanın grup sahibini bilim olarak değiştirmektir.
Peki, sam ve bertha'nın da bu dosyaya
erişmesi gerekiyorsa ve ikisi de bilim grubunda yer almıyorsa ne olacak? İki
kullanıcıyı da bilim grubuna ekleyebilirsiniz, ancak bu işlem, bu
kullanıcıların bilim grubunun sahibi olduğu tüm dosyalara erişim izni
verir.
Ne yazık ki, UNIX grup uygulamasının bu tür bir
kısıtlaması vardır: Bir dosyanın yalnızca bir grup sahibi olabilir ve karmaşık
paylaşım şemalarının uygulanması genellikle grupların ortadan kalkmasına neden olur.
(Yalnızca joe, jane, sam ve bertha için, örneğin iş gibi, yeni
bir grup oluşturabilirsiniz. Ancak, donald'ın da bu dosyaya erişmesi
gerektiğinde ne olacak?)
Karmaşık erişim denetimi şemalarınızın olması
gerekiyorsa, birçok UNIX uygulamasının sunduğu erişim denetimi listelerini (ACL'ler)
kullanmayı düşünün. ACL'ler standart UNIX sahiplik modelini, belirli hakları
kullanıcı ya da grup temelinde verecek (ya da engelleyecek) şekilde genişletir. ACL,
kapıdaki koruma görevlisi gibidir: Arkadaşlarınızın, belirli ünlülerin ve diğer
seçtiğiniz konukların içeri girmelerine izin verebilir, ancak paparazzileri ve
istemediğiniz diğer kişileri dışarıda tutabilirsiniz.
|
|
Gördüğünüz gibi ana dizinimdeki tüm dizilerin ve dosyaların sahibi
benim. Sahip olarak, dosyalarımın ve dizinlerimin herhangi birini silebilir, yeniden
adlandırabilir, taşıyabilir ve düzenleyebilirim. Bu haklara siz de kendi
dosyalarınız için sahip olursunuz (dosyalar, özel olarak tersi
belirtilmedikçe, toplu olarak dosyalar ve dizinler için kullanılmaktadır).
Buna ek olarak, dosyalarınızı başkalarıyla paylaşmayı
seçebilirsiniz. Gerçekten de, UNIX'in çok kullanıcılı bir sistem olarak
tasarlanmasından dolayı, dosyaların paylaşılması işletim sisteminin temel
ilkelerinden biridir.
Belirli bir kullanıcı sahibe ek olarak, her dosyanın ve dizinin bir de
grup sahibi vardır. UNIX grubu, basit bir şekilde tanımlarsak, bir
kullanıcı topluluğudur ve bir ya da daha çok grubun üyesi olabilirsiniz.
Üyeliklerinizi keşfetmek için id parametresini kullanın:
$ id
uid=501(strike) gid=501(strike) groups=501(strike),
81(appserveradm), 79(appserverusr), 80(admin)
|
Sistemimde, birincil grubum grup tanıtıcısı (GID) 501 olan ya da
adı strike olan grup. Üç gruba daha üyeyim:
- appserveradm
- appserveruser
- admin
Genellikle ve varsayılan değer olarak, yarattığınız bir dosyanın grup
sahibi birincil grubunuz olur, ancak daha sonra, grup sahipliğini üyesi olduğunuz
diğer gruplarla değiştirebilirsiniz. Dosyalarla ilgili ek bilgi için ana dizininizde
ls -laF komutunu çalıştırın. Liste 3'e bakın.
Liste 3. Dosyalarınızla ilgili daha fazla
bilgi edinme
-rw------- 1 strike strike 6118 Aug 27 21:59 .bash_history
-rw-r--r-- 1 strike strike 567 Apr 20 2005 .bash_profile
-rw-r--r-- 1 strike strike 1834 Apr 20 2005 .bashrc
drwx------ 2 strike strike 4096 Mar 8 10:54 .ssh/
-rw------- 1 strike strike 9516 Aug 22 16:42 .viminfo
-rw-r--r-- 1 strike strike 1529617 Jul 19 07:00 Archive.zip
drwxr-xr-x 3 strike strike 4096 Aug 24 04:04 IBM/
drwxrwxr-x 3 strike admin 4096 Jun 14 06:06 backups/
|
Not: Liste 3'te ls -l
komutunun genel çıkışı gösterilmiştir. Önceki anlatımı basitleştirmek için grup
sahibi özellikle gizlendiğinden Liste 2 daha farklı
görünmektedir. Grup sahibini -G seçeneği ile gizleyebilirsiniz.
backups adlı dizinin grup sahibi, bu gruptaki tüm üyelere
belirli ayrıcalıklar atayabilen admin'dir. Bu arada, dosyalarımın geri
kalanının grup sahibi strike'tır. Genellikle, bir kullanıcı, adını verdiği
grubun tek üyesidir. Bu, erişimi yalnızca bir kullanıcıyla sınırlandırır.
İnce ayrıntılar
Yukarıda ls komutunun çıkışına bir göz atarsanız, her
satırın başındaki 10 karakterlik sırayı fark edebilirsiniz. Her bir karakter, üç
seçimden birine ilişkin belirli hakları gösteren bir kapalı/açık ayarı ya da
bit'tir: Siz, gruplarınızdan biri ve diğerleri. Şekil
1'de her bir bitin kullanımı gösterilmektedir.
Şekil 1. UNIX dosyasının izin bitleri
Şekil 1 içinde:
- İlk bit, dosyanın bir dizin olup olmadığını gösterir. (Genellikle
ilk bit, bir dosyanın özel olup olmadığını belirtir. Dosya özelse, diğer
karakterler arasında ilk karakterde dizin için d ve simgesel bağlantı için
l harfi kullanılır.) Bu ayar sabittir.
- Sonraki üç bit (mavi renkli) sırasıyla sizin dosya üzerindeki
okuma, yazma ve yürütme haklarınızı gösterir. Örneğin, dosyanın silinmesini önlemek
için yazma bitinizi devre dışı bırakabilirsiniz. (Evet, bir dosyayı silmek için yazma
izni gereklidir.)
- Sonraki üç bit (yeşil renkli) sırasıyla grubun dosya
üzerindeki okuma, yazma ve yürütme haklarını gösterir.
- Son üç bit (turuncu renkli), diğer bütün kullanıcıların (siz
ve grubunuzun üyeleri dışındaki tüm kullanıcıların) haklarını gösterir.
Örnek olarak yukarıda bulunan ls -laF çıkışını kullanın:
- .bash_history, .bash_profile, .bashrc ve .viminfo dosyaları,
yalnızca benim tarafımdan okunabilir ve yazılabilir. Bu dosyaları görüntüleyebilir,
düzenleyebilir ve silebilirim.
- .ssh dizinine yalnızca ben erişebilirim. İlk bit, bunun özel bir
dosya ve d harfi, bir dizin olduğunu gösterir. Kullanıcı okuma biti
ayarlandığından, dizinin içeriğini görüntüleyebilirim. Kullanıcı yazma biti
belirlendiği için dizine dosya ekleyebilir ve dizindeki dosyaları kaldırabilirim.
Dizinin neden kullanıcı tarafından yürütülebildiğini de merak ediyor olabilirsiniz.
Bu bit ayarlanmazsa, bir dizinde geçiş yapılamaz (dizine girilemez ve katalog
oluşturulamaz). (Bu arada, bu dizide
Bölüm
3 içinde açıkladığım gibi .ssh dizininiz size özel olmalıdır, yoksa genel
anahtar erişiminiz çalışmaz.)
- Archive.zip dosyasını okuyabilir ve bu dosyaya yazabilir ve
diğerleri de dosyayı okuyabilir. (Tabii ki strike grubu da dosyayı
okuyabilir, ancak bu, yalnızca ben bu grubun üyesi olduğumda geçerlidir, izin biraz
tartışmalıdır.)
- Başka bir dizin olan IBM dizininde katalog oluşturabilir, dosyaları
okuyabilir ve dosyalara yazabilirim; diğer kullanıcılar da bu dizinin içeriğinden kataloğ
oluşturabilirler.
- Son olarak, admin grubunun üyeleri ve ben, backups
dizinindeki dosyaların kataloğunu oluşturabilir, bu dosyaları okuyabilir ve bu
dosyalara yazabiliriz; diğer herkes, dizinin kataloğunu oluşturabilir ve dizindeki
dosyaları okuyabilir.
Bir dizin için 'sticky'
bitinin ayarlanması
Bir dizinin kalıcı olmasını sağlamak ve yanlışlıkla
kaldırılmasını önlemek istiyorsanız, chmod +T seçeneğini
kullanarak sticky bitini ayarlayın.
$ ls -lF
drwxrwxrwx 2 strike strike 68 Aug 28 06:21 dropbox/
drwx------ 2 strike strike 68 Aug 28 06:21 mine/
$ chmod +t dropbox
$ ls -lF
drwxrwxrwt 2 strike strike 68 Aug 28 06:21 dropbox/
drwx------ 2 strike strike 68 Aug 28 06:21 mine/
|
'Sticky' biti ayarlandıktan ve izinler herkes
okuyabilir, yazabilir ve yürütebilir şeklinde belirlendikten sonra, herkes
dosyaları açılan kutuma yerleştirebilir, ancak yalnızca ben dizindeki dosyaları ya
da dizinin kendisini kaldırabilirim.
ls -ld /tmp komutu çalıştırırsanız,
uygulama çalışma alanı olarak yaygın bir şekilde kullanılan, tüm sistemi kapsayan
geçici dizininiz 'sticky' yani kalıcı olabilir.
|
|
chmod (modu değiştir) komutuyla izinleri (dizin
biti dışında) değiştirebilirsiniz. Bir dosyanın grup atamasını, chgrp
(grup değiştir) komutuyla kullanabilirsiniz. (Kök olan üst kullanıcı da
chown ya da sahibi değiştir modunu kullanarak dosyanın sahibini
değiştirebilir.)
Aşağıda chmod komutunun örnek uygulamalarını görebilirsiniz:
chmod u+x script.sh : Bir kabuk komut dosyası
yazarsanız ve bunu yürütmek isterseniz, yürütme bitini etkinleştirin. Burada,
u+x karakterleri, sahip kullanıcının (u ) yürütme bitini
(x ) etkinleştirmesini (+ ) belirtir. chmod
komutunun genel biçimi, chmod, boş değer (kullanıcıyı belirtir), bir ya da
daha çok u , g (grup için) ya da o (diğerleri
için), bir + ya da - ve bir ya da daha fazla
r , w ve x şeklindedir.
chmod go+rx IBM : Bu komut, grup ve diğerleri
için okuma ve yürütme ayrıcalıklarını etkinleştirir.
chmod a+rx script.sh : u ,
g ve o parametrelerine ek olarak tümü için
a ya da kullanıcı, grup ve diğerlerini kullanabilirsiniz. Böylece, bu
komut, üç seçimin üçüne de okuma ve yürütme izni verir.
chgrp admin backups : Bu komut, grup sahibi olarak
yöneticiyi belirler.
+ seçeneğiyle izin eklerseniz, belirtilen izinler eklenir,
ancak diğer izinlere dokunulmaz. Benzer bir şekilde, - (eksi)
ile izinleri geri alırsanız, belirli izinler devre dışı bırakılır, ancak tersi
durumunda, durum korunur. Tüm izinleri bir defada ayarlamak istiyorsanız, sayısal
dosya modlarını kullanın. (chmod = işlecini de kullanabilirsiniz.
Ayrıntılı bilgi için man sayfasına bakın.)
Not: Sayısal dosya modu, 0 - 7 arasında sekizli bir sayı
ya da üç bitten (okuma, yazma ve yürütme için) oluşan bir sayıdır. Her bir dosya
için üç seçim olduğundan, tam olarak belirtilmiş dosya modu üç basamaklıdır.
Örneğin, 400 , 644 ya da 777 gibi. Aşağıda bu
duruma örnekler verilmiştir:
- Bir dizini özelleştirmek için kendinize ilişkin hakları
etkinleştirir, ancak bir grubun ve diğer kişilerin haklarını geri alırsınız:
$ mkdir example
$ ls -l
drwxr-xr-x 2 strike strike 68 Aug 28 11:27 example
$ chmod 700 example
$ ls -l
drwx------ 2 strike strike 68 Aug 28 11:27 example
|
700 modu, kullanıcı için okuma, yazma ve yürütme
izinlerini etkinleştir (baştaki 7 ), ancak diğer tüm izinleri devre dışı
bırak (sondaki iki sıfır) olarak çevrilebilir.
- Bilgisayarınızdaki diğer kişilerin dosyalarınızdan birini okumasını
istiyorsanız, üç seçimin üçü için de okuma iznini etkinleştirin:
$ ls -l .aliases
-rw------- 1 mstreich mstreich 79 Jul 26 17:08 .aliases
$ chmod 644 .alias
$ ls -l
-rw-r--r-- 1 mstreich mstreich 79 Jul 26 17:08 .aliases
|
644 , benim için okuma ve yazma izinlerini ayarla
(6 ), grup (4 ) ve diğerleri (4 ) için okuma
iznini etkinleştir komutunun kısaltmasıdır. Tabii ki, .alises dosyası ana
dizininizde olsaydı, $HOME izinlerinin katalog oluşturmaya ve okumaya izin vermesi
gerekirdi.
Tablo 1 içindeki grafikte, sayısal değerler ve
sahip, grup sahibi ve diğerleri için ilişkili sonuç gösterilmektedir.
Ayarlanacak uygun değeri bulmak için her bir bölüme değerleri ekleyin.
Tablo 1. Sayısal değerler ve
ilişkili sonuçlar
Kim |
Değer |
Sonuç |
Kullanıcı |
0400 |
Sahibin okumasına izin ver. |
0200 |
Sahibin yazmasına izin ver. |
0100 |
Dosyalar için sahibin yürütmesine izin ver; dizinler için,
sahibin dizinde arama yapmasına izin ver. |
|
Grup |
0040 |
Grup üyelerinin okumasına izin ver. |
0020 |
Grup üyelerinin yazmasına izin ver. |
0010 |
Dosyalar için sahibin yürütmesine izin ver; dizinler için, grup
üyelerinin dizinde arama yapmasına izin ver. |
|
Diğerleri |
0004 |
Diğer kişilerin okumasına izin ver. |
0002 |
Diğer kişilerin yazmasına izin ver. |
0001 |
Dosyalar için diğer kişilerin dosyayı yürütmesine izin ver;
dizinler için, diğer kişilerin dizinde arama yapmasına izin ver. |
Örneğin, diğerleri için okuma ve yazma ayrıcalıklarını ayarlamak üzere
00006 değerini elde etmek için 0004 ve 002 'yi
ekleyin. Kullanıcı ve grup için de benzer bir şey yapın ve üçünün toplamını
ekleyerek tam bir sayısal mod oluşturun.
Her şeyin
temelinde izinler vardır
UNIX sistemlerinde izinlerin ayarlanması ve yönetilmesi tekrar tekrar
karşınıza çıkar. Yardımcı programları çalıştırmak için sık sık belirli dosyalarda ve
dizinlerde uygun izinlerinizin olması gerekir; /tmp gibi dizinler, yalnızca doğru
izinler ayarlandığında çalışır ve elbette, dosyalarınızı başkalarıyla paylaşmak ya
da dosyalarınızı başkalarından korumak için değiştirme ve okuma izinlerini
ayarlayabilmeniz gereklidir.
Bu dizinin bir sonraki makalesinde, dosyalarla ilgili bilgiler
vermeye devam edeceğiz; birden çok bilgisayarda yüzlerce ya da binlerce dosyayı
yönetmeye ilişkin yardımcı programları ve teknikleri keşfedeceğiz.
Kaynaklar Bilgi Edinme
Ürün ve teknoloji edinme
Tartışma
zsh : İşbirliği yapın, tartışın ve zsh deneyiminizi, zsh wiki uygulamasında paylaşın.
- AIX ve UNIX forumlarına katılın:
Yazar
hakkında
Martin Streicher, Linux Magazine adlı dergide Şef
Editör'dür. Purdue University'den bilgisayar bilimi konusunda master derecesi almış
ve 1982 yılından bu yana UNIX benzeri sistemlerde Pascal, C, Perl, Java ve (en son)
Ruby programlama dillerinde programlama yapmaktadır. Martin'e
martin.streicher@linux-mag.com
adresinden erişebilirsiniz.
|
|