Câu trả lời:
Có ba cách thông thường để đặt ô của người dùng.
UMASK
trong/etc/login.defs
pam_umask.so
cấu hình PAM của bạn trong/etc/pam.d
/etc/profile
Không có sự khác biệt giữa người dùng hệ thống và người dùng bình thường về vấn đề này.
Nhưng tôi cho rằng bạn đang cố gắng bắt đầu một daemon với một ô tùy chỉnh?
Vấn đề là: tất cả các tùy chọn trên xảy ra khi người dùng đăng nhập. Nếu bạn đang chạy trình nền, nó không bao giờ đăng nhập. Nó được khởi động bởi init, sau đó chạy dưới dạng root hoặc gọi setuid
để chạy như người dùng hệ thống mà bạn chỉ định .
Các tùy chọn chính của bạn là:
umask
vào tập lệnh init của bạn (làm grep umask /etc/init.d/*
ví dụ)start-stop-daemon
, hãy vượt qua tùy chọn umaskNgười dùng hệ thống khác với người dùng 'bình thường' theo ba cách: hết hạn mật khẩu, thư mục chính (người dùng hệ thống không có) và UID (người dùng hệ thống thường ở dưới một số ngưỡng tùy ý).
Trong trường hợp chung, bạn gần như hoàn toàn không gặp may. Bạn có thể sử dụng PAM để đặt ô, nhưng PAM chọn các hành vi dựa trên những thứ khác với ba điểm khác biệt này.
Nói cách khác, bạn không thể khiến PAM phân biệt giữa người dùng 'hệ thống' và 'không hệ thống'. Điều này cho bạn hai tùy chọn:
Hoặc bạn sử dụng PAM để đặt ô cho mọi người (ví dụ: đăng nhập /etc/login.defs
), sau đó đặt rõ ràng ô cho người dùng không sử dụng hệ thống trong /etc/bash.bashrc
(hoặc tương tự);
Hoặc bạn viết mô-đun PAM của riêng bạn để làm điều này. Tôi nghĩ rằng điều này sẽ được nhiều người hoan nghênh, vì đặt ô là một yêu cầu phổ biến.
Hãy lấy câu trả lời này với một chút muối hào phóng. Loại yêu cầu này khá phổ biến và tôi sẽ không ngạc nhiên nếu bây giờ có cách tốt hơn / phù hợp hơn.
pam_umask
, nhưng có lẽ không phải về pam_succeed_if
. Với pam_succeed_if , bạn có thể thực hiện bất kỳ mô-đun nào khác chỉ áp dụng cho một người dùng hoặc nhóm nhất định. Nhưng tôi vẫn không nghĩ PAM sẽ giúp ở đây.
Như @Mikel gợi ý, nếu bạn đang cố gắng định cấu hình tài khoản hệ thống là trình nền, hãy thử định cấu hình chính trình nền.
Tôi đã đến câu hỏi này để tìm cách đặt ô cho tài khoản _www trên MacOS. Mặc dù điều này khó như các câu trả lời ở trên gợi ý, tôi thấy tôi có thể giải quyết nó bằng cách định cấu hình dịch vụ apache là (trong trường hợp này) người dùng == một daemon.
Tôi lạ là không thể tìm thấy tập lệnh khởi động (thường là trong /etc/init.d/ nhưng trên máy Mac trong Thư viện / LaunchDaemons /), nhưng với sự trợ giúp từ: http://krypted.com/mac-security/apache2-um task / phát hiện ra rằng apache có kịch bản môi trường cụ thể của riêng mình.
$ sudo vim /usr/sbin/envvars
umask 002
Có thể các trình tiện ích khác có các phương thức tương tự, có thể giúp ích trong các trường hợp cụ thể.