Hem / run hem de / tmp olması için sebep yok
Bence haklısın. /tmp
şimdi sahip olduğumuzda esasen itiraz ediliyor /run
. Programınız bunu yapacak bir pozisyondaysa ( ayrıcalıklı bir işlem olarak yüklenmesini gerektirir ), o zaman bugünlerde bir alt dizini kullanırsınız /run
. Bu güvenlik nedeniyle.
Örneğin, CUPS yazdırma arka plan programı kök olarak çalışmaz, ancak genellikle bir işletim sistemi paketinden yüklenir. Paket yükler /usr/lib/tmpfiles.d/cups.conf
ve systemd-tmpfiles
erişebileceği bir dizin oluşturur. Dizin altında olduğu için, dünyaca yazılabilir /run
olanın aksine isim, imtiyazsız bir kullanıcı tarafından kötü bir şekilde talep edilemez /tmp
.
/run
Doğrudan kullanamayan "Ayrıcalıklı programlar"
Asıl ayrım, programınızın keyfi bir imtiyazsız kullanıcı tarafından kendi kullanıcı kimliği altında çalıştırılmasıdır. Ancak hala genel olarak kullanmak istemiyorsunuz /tmp
çünkü buna diğer imtiyazsız kullanıcılar erişebilir. Kullanmayı tercih ederdin $XDG_RUNTIME_DIR
. Tipik olarak bu - olarak uygulanır, /run/user/$(id -u)
bu yüzden de bir alt dizini olur /run
. Konum olsa garanti edilmez; programlar her zaman ortam değişkenini kullanmalıdır.
/tmp
yalnızca sistemdeki farklı ayrıcalıklı kullanıcılar arasındaki geçici işbirliği için yararlı olacaktır. Bu tür geçici sistemler, herkes için işbirliği yapmayı ve şımartmayı reddeden kötü niyetli bir kullanıcıya karşı savunmasızdır :). Bir örnek talk
, bir unix soketi kullanarak daemon'un bir sürümünü çalıştırmaya karar veren imtiyazsız kullanıcılar olacaktır .
Poettering'in aşağıdaki kontrol listesinin /tmp
"küçük dosyalar" için yararlı olacağını, ancak /run
sadece "iletişim ilkeleri" için kullanılması gerektiğini unutmayın. Bu ayrımın da doğru olduğunu sanmıyorum. İçin poster çocuğu /run
olduğunu udev
ve eminim /run/udev
iç veritabanlarını içerir. Bir /run
dizininiz olduğunda, kimsenin iddia edilen farkı takip etmek ve karışıklık yaratmak için başka bir dizin oluşturmak istediğini sanmıyorum /tmp
. Bu yüzden pratikte /run
bugünlerde kullanıyoruz.
İletişim amaçlı dünyaca yazılabilir paylaşılan ad alanlarının [like / tmp] kullanımı her zaman sorunlu olmuştur, çünkü iletişimi sağlamak için sabit adlara ihtiyacınız vardır, ancak kararlı adlar DoS saldırıları için kapıları açar. Bu, erken önyükleme sırasında belirli hizmetler için korumalı uygulama başına dizinler oluşturularak düzeltilebilir (X11 için yaptığımız gibi), ancak bu yalnızca sorunu kısmen düzeltir, çünkü bu yalnızca her paket kurulumunu yeniden başlatmanın ardından doğru şekilde çalışır.
...
Diğer bir Fedora özelliği (Fedora 17 için), çeşitli servislerin / tmp ad alanlarını izole ederek, daha fazla güvenli hale getirmek için / tmp'nin / tmp'nin anlamını değiştirmiştir.
...
/ Tmp artık mutlaka paylaşılan bir ad alanı olmadığından, iletişim ilkeleri için bir konum olarak genellikle uygun değildir.
...
[/ run] 'un bir tmpfs olduğu garantilidir ve dolayısıyla botlarda otomatik olarak yıkanır. Bunun ötesinde otomatik temizlik yapılmaz.
...
İşte size (Linux uygulama geliştiricisi) kullanmak için doğru dizini seçmenizi nasıl önereceğimize dair kaba bir rehber:
- Soketinizi (veya başka bir iletişimi ilkel olarak) koymak için bir yere ihtiyacınız vardır ve kodunuz ayrıcalıklı çalışır: / run altında bir alt dizin kullanın. (Ya da daha fazla uyumluluk için / var / run altında.)
- Soketinizi (veya başka bir iletişimi ilkel olarak) koymak için bir yere ihtiyacınız var ve kodunuz ayrıcalıklı değil: $ XDG_RUNTIME_DIR altına bir alt dizin kullanın.
- Daha büyük indirmelerinizi ve indirmelerinizi devam ettirmek ve ayrıcalıklı koşmak için bir yere ihtiyacınız var: $ XDG_DOWNLOAD_DIR kullanın.
- Kalıcı ve ayrıcalıklı olmayan önbellek dosyalarını koymak için bir yere ihtiyacınız var: $ XDG_CACHE_HOME kullanın.
- Yukarıdakilerin hiçbiri geçerli değildir ve kalıcılık gerektirmeyen küçük bir dosya yerleştirmeniz gerekir: / tmp üzerinde bir geri dönüş ile $ TMPDIR kullanın. Ve mkstemp () ve mkdtemp () yöntemlerini ve kendileri tarafından üretilen hiçbir şeyi kullanmayın.
- Aksi halde, / var / tmp işlevinde bir geri dönüş ile $ TMPDIR kullanın. Ayrıca mkstemp () / mkdtemp () işlevini kullanın.
Yukarıdaki kuralların sadece tarafımızdan önerildiğini unutmayın. Bu kurallar, bu konu hakkında bildiğimiz her şeyi hesaba katar ve gördüğümüz kadarıyla mevcut ve gelecekteki dağıtım sorunlarından kaçınır. Lütfen bu kuralları takip etmek için projelerinizi güncellemeyi düşünün ve yeni kod yazarsanız bunları aklınızda bulundurun.
Vurgulamak istediğimiz bir şey, / tmp ve / var / tmp öğesinin gerçekte olmadığı kadar sık olması, gerçekte sizin usecase'iniz için doğru seçim değildir. Bu dizinlerin geçerli kullanımları vardır, ancak genellikle başka bir dizin aslında daha iyi bir yer olabilir. Bu nedenle, dikkatli olun, diğer seçenekleri göz önünde bulundurun, ancak / tmp veya / var / tmp için giderseniz, en azından mkstemp () / mkdtemp () kullandığınızdan emin olun.
/tmp
Yukarıda açıklandığı gibi, X pencere sistemi tarafından kullanılan eski soketten kurtulduk . Yanlış okudum tmpfiles.d/x11.conf
. İşbirliğine dayanıyor gibi görünüyor :). Kodun denetlendiğini kabul ediyorum, öyle ki, hizmet reddi, olabilecek en kötü şey.