Apache ve PHP ile çalışan oldukça standart bir sunucu kurdum. Çalıştırdığım bir uygulama dosyalar oluşturur ve bunlar Apache kullanıcısına aittir www-data
. SFTP ile yüklediğim dosyalar kendi kullanıcılarına aittir charlesr
. Tüm dosyalar www-data
grubun bir parçasıdır . Benim sorunum, grubun bir parçası www-data
olmasına rağmen charlesr
, sahip oldukları SFTP üzerinden hiçbir dosyayı değiştiremem veya üzerine yazamam www-data
. SSH oturumu ile problemsiz dosyaları değiştirebiliyorum.
Yani ne yapacağımdan emin değilim. Sahip olduğum www-data
dosyaları değiştirmek için SFTP oturum izinlerimi nasıl vereceğim ?
Biraz arka plan için, sunucuyu ayarlarken kendim için yazdığım notlar:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
Sonra SGID biti ayarının ne anlama geldiğini kendi kendime açıklamaya devam ediyorum (yani, oluşturulan tüm dosyalar otomatik olarak grubun bir /var/www
parçası olur www-data
).
GÜNCELLEŞTİRME
Sorunun uygulamanın kendisinden veya daha belirgin olarak, yazdığı belirli dosyaları 0644 (rw-r - r--) olarak ayarlayan uygulama çerçevesi ( Kohana ); yani grup yazılabilir değil. Bu, aynı zamanda dosyaların da ait olduğu gerçeğiyle birleştiğinde, www-data
oturum açtığımda SFTP ile dosyaları düzenleyemedim anlamına geliyordu charlesr
. Dosyaları neden SSH ile düzenleyebildiğimden emin değilim. Tahminim, sudo kullanmış olmam gerektiğidir.
İşte şimdi benim önceki stratejimdeki kusurları belirten Marty Fried'ın yorulmak bilmeyen yardımı sayesinde kullandığım izin stratejisi ve aynı zamanda Linux izinleri dünyasında uçup gidene kadar devam etmeme yardımcı oldu. Teşekkürler Marty!
genel bakış
- Dosyalar ve dizinler
/var/www
ait olmalıdırroot:webmasters
- Tüm kullanıcılar
webmasters
grup üyesi olmalı - İçindeki tüm dizinler
/var/www
şu şekilde ayarlanmalıdır:2775
veyau=rwx,g=rwxs,o=rx
(rwxrwx-rx) - Tüm dosyalar
/var/www
şu şekilde ayarlanmalıdır:0664
veyaug=rw,o=r
(rw-rw-r--)
Aşağıdakiler sahip olmalıdır www-data:webmasters
(örn. Bunlar Apache'nin yazması gereken dizinlerdir):
- application / önbellek
- application / günlükleri
- yükleme
- client_helpers / yükleme
NASIL
/var/www
Varsayılan olarak dosyalarınızın nerede sunulduğu konusunda izinler ayarlamak için :
sudo addgroup webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo find /var/www -type f -exec chmod 664 {} \;
sudo find /var/www -type d -exec chmod 775 {} \;
sudo find /var/www -type d -exec chmod g+s {} \;
sudo chown -R www-data:webmasters application/cache/
[vb...]
Şimdi değişikliklerin bekletilmesi için oturumu kapatın ve tekrar oturum açın.
Önceki komut kümesi aşağıdakileri yapar:
- Adlı yeni bir grup oluşturun
webmasters
; Uygulama dosyalarına yazma erişimi gereken tüm kullanıcılar bu gruba eklenir. - geçerli kullanıcıyı (
$USER
)webmasters
gruba ekler . - sahibini değiştirir
/var/www
içinroot
ve grubunwebmasters
grubunda. - içindeki tüm dosyalara 664 izin (-rw-rw-r--) ekler
/var/www
. - içindeki tüm dizinlere 775 izin (drwxrwxr-x) ekler
/var/www
. - SGID bitini
/var/www
ve içindeki tüm dizinleri ayarlar ; bu son nokta bazı açıklamalara dayanıyor. Ayrıca aynı şeyi yapmak için chmod octal'ınızın önüne (örneğin 2644) bir 2 koyabilirsiniz. - sahibini
www-data
(Apache'nin kullanıcısı) ve verilen dizinin grubunu ayarlarwebmaster
. Bu, dizinin Apache vewebmasters
gruptaki herkes tarafından yazılabilir olmasını sağlar . Yazılabilir olması gereken diğer tüm dizinler için aynısını yapın.
/var/www
o gruba eklemeden nasıl yazabilir ?