Làm cách nào để đặt ô cho người dùng hệ thống?


14

Có thể đặt umaskcho người dùng hệ thống (được tạo bằng useradd --system username) không?

Câu trả lời:


14

Có ba cách thông thường để đặt ô của người dùng.

  1. Đặt UMASKtrong/etc/login.defs
  2. Thêm vào pam_umask.socấu hình PAM của bạn trong/etc/pam.d
  3. Đặt nó trong tệp khởi động shell, ví 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à:

  1. đưa umaskvào tập lệnh init của bạn (làm grep umask /etc/init.d/*ví dụ)
  2. cấu hình init để khởi động chương trình với một ô tùy chỉnh ( systemd.exec upstart umask )
  3. nếu sử dụng start-stop-daemon, hãy vượt qua tùy chọn umask
  4. sửa đổi chương trình để gọi hàm umask hoặc gọi hệ thống

Bạn có biết cách đặt ô cho SSHFS (sftp-server) trên Arch Linux (sử dụng systemd) không? Như bạn đã chỉ ra, 3 tùy chọn đầu tiên bạn liệt kê không có bất kỳ ảnh hưởng nào.
MountainX-for-Monica

2

Ngườ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.


1
Hiện đã có một mô-đun PAM được gọi là pam_umask . Vấn đề là nó chỉ hoạt động tại thời điểm đăng nhập.
Mikel

Ah, tôi nghĩ rằng bạn biết về 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.
Mikel

1

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ể.


Nhưng làm thế nào bạn có thể viết "umask 002" vào tập tin này?!?!? Tôi nhận được một lỗi cho phép từ chối ngay cả khi root / sudo và theo táo thậm chí rễ không được phép để bất cứ điều gì ghi / thay đổi trong thư mục / usr / sbin thư mục support.apple.com/en-gb/HT204899
Schurik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.