- Konu sahibi
- #1
Chmod ile chown arasındaki fark nedir?
chmod dosya veya klasörün izinlerini, chown ise sahibini ve grubunu değiştirir. Linux ve macOS'ta erişim kararı bu iki bilginin yanı sıra dosya yolundaki klasör izinlerine ve kullanıcının kimliğine göre verilir. Sahip/grup kimliği ile o kimliklere verilen izinler birlikte değerlendirilir; ACL, üst dizinler ve ek güvenlik politikaları da erişimi etkileyebilir.
chmod neyi değiştirir?
chmod; okuma (
r), yazma (w) ve çalıştırma (x) izinlerini kullanıcı (u), grup (g) ve diğer kullanıcılar (o) için düzenler.Örneğin:
Kod:
chmod 640 rapor.txt
640 değeri şu anlama gelir:- Sahip:
6= okuma ve yazma (rw-) - Grup:
4= yalnızca okuma (r--) - Diğer kullanıcılar:
0= erişim yok (---)
Bir dosyaya çalıştırma izni eklemek için sembolik biçim de kullanılabilir:
Kod:
chmod u+x script.sh
Bu komut yalnızca dosyanın sahibine çalıştırma izni ekler. chmod sahibini, grubunu veya dosyanın içeriğini değiştirmez.
chown neyi değiştirir?
chown, dosyanın kullanıcı sahibini ve isteğe bağlı olarak grubunu değiştirir:
Kod:
chown ali:gelistiriciler rapor.txt
Bu komut dosyanın sahibini
ali, grubunu gelistiriciler yapmayı dener. Yalnızca grubu değiştirmek için bazı sistemlerde şu biçim kullanılabilir:
Kod:
chown :gelistiriciler rapor.txt
Sahip değiştirme işlemi genellikle yönetici yetkisi gerektirir. Gerekirse komutun başına
sudo eklenir; ancak bunun için hedef kullanıcı ve grubun sistemde gerçekten bulunması gerekir. Sahiplik değişimi, temel izinlerin kime uygulandığını değiştirir. Ayrıca işletim sistemi chown sırasında setuid/setgid gibi özel bitleri temizleyebilir; izin bitleri hiçbir zaman değişmez varsayımı doğru değildir. Sonucu işlemden sonra yeniden inceleyin.İki komutun farkını örnek üzerinde görmek
Örnek POSIX benzeri kabuk ve mktemp bulunan ortam içindir. Aynı terminal oturumunda kendi ev dizininizde benzersiz bir deneme dosyası oluşturun; mevcut bir dosyanın üzerine yazmayın:
- Dosyayı oluşturun ve mevcut durumunu inceleyin:
Çıktının başında izinler, devamında dosya sahibi ve grup görünür. Kullanıcı ve grup adları sisteminize göre farklı olabilir.Kod:ornek_dosya=$(mktemp "$HOME/chmod-chown.XXXXXX") || exit 1 printf 'deneme\n' > "$ornek_dosya" ls -l "$ornek_dosya" - İzinleri belirleyin:
İzin bölümüKod:chmod 640 "$ornek_dosya" ls -l "$ornek_dosya"-rw-r-----benzeri olur. Sahibin yazma izni vardır; grup okuyabilir; diğer kullanıcılar erişemez. - Sahip ve grubu değiştirmeden önce sistemde geçerli adları kontrol edin. Örnek bir kullanıcı veya grup adı kullanmayın; kendi sisteminizde bulunan değerleri kullanın:
Kod:id id -gn - Geçerli bir grup adıyla sahipliği değiştirmek gerekiyorsa, yalnızca deneme dosyasında uygulayın:
Çıktıda sahip ve grup, oturum açmış kullanıcı ve birincil grubuyla görünür. Bu örnekte sahiplik pratikte aynı kalabilir; amaç chown sözdizimini güvenli bir dosyada doğrulamaktır.Kod:chown "$(id -un):$(id -gn)" "$ornek_dosya" ls -l "$ornek_dosya"
chmod veya chown başarılı olduğunda çoğu sistem komut satırına başarı mesajı yazmaz. Sonucu
ls -l ile kontrol edin. “Operation not permitted” veya “Permission denied” görürseniz hedef üzerinde gerekli yetkiniz olmayabilir; chown için yönetici yetkisi ve geçerli kullanıcı/grup adı gerekir. Yanlış kullanıcı veya grup adı ise “invalid user” ya da benzeri bir hata oluşturur.Hangi durumda hangisini kullanmalısınız?
| İhtiyaç | Kullanılacak komut | Örnek |
|---|---|---|
| Dosyayı kim sahipleniyor, değiştirmek | chown | chown ali:gelistiriciler rapor.txt |
| Okuma, yazma veya çalıştırma iznini değiştirmek | chmod | chmod 640 rapor.txt |
| Bir dizine erişimi incelemek | Önce ls -ld ve üst dizinleri kontrol etmek | ls -ld klasor |
Klasörlerde
x izni ayrıca klasörün içine girebilme ve içindeki adlara erişebilme anlamına gelir. Bu nedenle bir klasöre dosya gibi rastgele 777 vermek genellikle doğru çözüm değildir. chmod -R veya chown -R kullanmadan önce hedef yolu mutlaka kontrol edin; yanlış bir üst klasörü seçmek çok sayıda dosyanın erişim düzenini bozabilir. Ayrıca chmod ile izin sorununu çözemediğinizde, dosyanın sahibi ve grubu için ls -l çıktısını yeniden inceleyin; sorun chown gerektiriyor olabilir.Sık sorulan sorular
chown çalıştırınca dosyanın izinleri neden değişmiş gibi görünüyor?
İki olasılık vardır: İşletim sistemi sahiplik değişiminde setuid/setgid bitlerini temizlemiş olabilir. Ya da temel bitler aynı kalırken sahip/grup değiştiği için
ls -l çıktısında erişimi hangi izin sütununun belirlediği değişmiştir. Yeni sahibi, kullanıcı izinlerini; yeni grup üyeleri ise grup izinlerini kullanır.chmod 777 her sorunu çözer mi?
Hayır. Herkese okuma, yazma ve çalıştırma izni vermek erişim sorununu gizleyebilir, fakat gereksiz değişiklik yetkisi oluşturur. Önce doğru sahibin ve grubun belirlenmesi, ardından yalnızca gereken izinlerin verilmesi daha uygundur.
Bir dosyayı değiştirmek için mutlaka sahibi olmak gerekir mi?
Genellikle dosyanın yazma iznine ve dosyanın bulunduğu klasöre gerekli erişime sahip olmanız gerekir. Sahiplik değiştirme işlemi ise çoğu kurulumda yalnızca yönetici yetkisiyle yapılabilir.