Yanıtlar:
Bir kullanıcının umaskını ayarlamanın üç normal yolu vardır.
UMASK
içinde/etc/login.defs
pam_umask.so
İçindeki PAM yapılandırmanıza ekleyin/etc/pam.d
/etc/profile
Bu konuda sistem kullanıcıları ile normal kullanıcılar arasında fark yoktur.
Ama özel bir umask ile bir arka plan programı başlatmaya çalıştığınızı varsayıyorum?
Sorun: yukarıdaki seçeneklerin tümü bir kullanıcı oturum açtığında gerçekleşir. Bir arka plan programı çalıştırıyorsanız, hiçbir zaman oturum açmaz. İnit tarafından başlatılır, sonra root olarak çalışır veya setuid
belirttiğiniz sistem kullanıcısı olarak çalıştırılması için çağrılar yapılır .
Ana seçenekleriniz:
umask
init betiğinizi koyun ( grep umask /etc/init.d/*
örnek için a yapın )start-stop-daemon
, umask seçeneğini geçinSistem kullanıcıları 'normal' olanlardan üç şekilde farklıdır: parola geçerlilik süresi, ana dizin (sistem kullanıcılarının bir tane yok) ve UID (sistem kullanıcıları genellikle rastgele eşiğin altındadır).
Genel durumda, neredeyse tamamen şanssızsınız. Umask'ı ayarlamak için PAM kullanabilirsiniz, ancak PAM bu üç fark dışındaki şeylere dayalı davranışları seçer.
Başka bir deyişle, PAM'ı bir 'sistem' ve 'sistem olmayan' kullanıcılar arasında ayrım yapamazsınız. Bu size iki seçenek sunar:
Ya herkes için umask ayarlamak (örneğin check-in /etc/login.defs
) için PAM kullanın , sonra /etc/bash.bashrc
(veya benzeri) sistem olmayan kullanıcılar için umask açıkça ayarlayın ;
Veya bunu yapmak için kendi PAM modülünüzü yazabilirsiniz. Ben umask ayarı ortak bir istek olduğundan, bu birçok kişi tarafından memnuniyetle olacağını düşünüyorum.
Lütfen bu cevabı bol miktarda tuzla alın. Bu tür bir talep oldukça yaygındır ve şimdi daha iyi / uygun bir yol varsa şaşırmam.
pam_umask
, ama belki hakkında değil pam_succeed_if
. İle pam_succeed_if , başka modülü yalnızca belirli bir kullanıcı veya grubu için geçerli yapabilirsiniz. Ama hala PAM'ın burada yardımcı olacağını düşünmüyorum.
@Mikel'in önerdiği gibi, bir daemon olan bir sistem hesabını yapılandırmaya çalışıyorsanız, daemon'un kendisini yapılandırmayı deneyin.
Bu soruya MacOS'ta _www hesabı için umask'ı nasıl ayarlayacağımı araştırdım. Yukarıdaki cevapların önerdiği gibi bu zor olsa da, ben (bu durumda) kullanıcı == bir daemon olarak apache hizmetini yapılandırarak çözebilir bulundu.
Garip bir şekilde başlangıç komut dosyasını bulamadım (normalde /etc/init.d/ içinde ama Library / LaunchDaemons / içindeki bir mac'ta), ancak şu adresten yardım alarak: http://krypted.com/mac-security/apache2-umasks / apache'nin kendine özgü bir ortam betiği olduğunu keşfetti.
$ sudo vim /usr/sbin/envvars
umask 002
Muhtemelen diğer cinler, belirli durumlarda yardımcı olabilecek benzer yöntemlere sahiptir.