А вы знали что umask для пользователя можно выставить через поле GECOS файла /etc/passwd?
При этом:
Поле GECOS служит для хранения таких данных как номер телефона, адрес, полное имя и т.п.
Название поля идет от названия старой операционной системы GECOS (the General Electric Comprehensive Operating Supervisor).
В свою очередь, «поле GECOS было введено в формат учётной записи пользователя UNIX, чтобы хранить идентификатор пользователя для предъявления системе GECOS».
http://ru.wikipedia.org/wiki//etc/passwd#GECOS
Это поле читает PAM модуль pam_umask.so, который и выставляет umask для пользователя.
А задача была простая: выставлять umask для пользователей, которые подключаются через всякие ftp, sftp, etc, т.е. не работают интерактивно и всякие .bashrc не выполняются.
P.S. С заданием umask для всех тоже все не просто, ее можно прописать в /etc/login.defs, как, например, UMASK 0027, но она превратится в 0007 из-за хитрого параметра USERGROUPS_ENAB.
P.P.S. Остался нерешенным вопрос, как для процессов php-fpm задать umask. Судя по всему, когда главный процесс, работающий от рута, создает дочерние процессы пулов (которые работают от пользователей), он не использует PAM, а делает что-то вроде seteuid для того чтобы процесс стал пользовательским.
Перемещено mono из talks