PAM: Thực thi một lệnh trước pam_mkhomedir?


8

Khi người dùng đăng nhập vào hệ thống và không có thư mục chính, chúng tôi muốn tạo thư mục chính của người dùng bằng pam_mkhomedir . Đây là một thực tế phổ biến. Dưới đây là mô tả nhanh về pam_mkhomedir:

Mô-đun PAM pam_mkhomedir sẽ tạo thư mục chính của người dùng nếu nó không tồn tại khi phiên bắt đầu. Điều này cho phép người dùng có mặt trong cơ sở dữ liệu trung tâm (như NIS, kerberos hoặc LDAP) mà không cần sử dụng hệ thống tệp phân tán hoặc tạo trước một số lượng lớn thư mục. Thư mục bộ xương (thường là / etc / skel /) được sử dụng để sao chép các tệp mặc định và cũng đặt một ô cho việc tạo.

Tuy nhiên, đây là hệ thống FreeBSD 8.2 chạy ZFS. Chúng ta cần thực thi lệnh ZFS trước vì chúng ta muốn một hệ thống tệp ZFS cho mỗi người dùng . pam_mkhomedircó thể làm một mkdir, nhưng chúng ta cần phải làm một cái gì đó như zfs create /zpool/home/$USER.

Có ai biết nếu có thể sử dụng PAM để thực thi các lệnh trong phiên đăng nhập đầu tiên của người dùng không?


Tôi đã thay thế liên kết solarisi INTERNals.com bằng một phiên bản lưu trữ từ archive.org, bởi vì trước đây bị chiếm dụng bởi một squatter tên miền. Cảm ơn @Norman Gray đã chỉ ra nó.
Stefan Lasiewski

Câu trả lời:


9

Có một mô-đun PAM được gọi là pam_exec- nếu bạn viết một tập lệnh kiểm tra và / hoặc tạo âm lượng ZFS, bạn có thể xâu chuỗi này vào các quy tắc PAM hiện tại của bạn và giữ mọi thứ tốt đẹp mà không cần giả sử đăng nhập tương tác, thư mục shell & bộ xương mặc định, v.v. ví dụ, bạn có thể có

session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER

hoặc bất cứ điều gì phù hợp với thiết lập cụ thể của bạn.

(Như Tom Shaw đã chỉ ra trong các bình luận, việc có session required pam_mkhomedir.sođược sẽ là dư thừa.)


Tốt ngoại trừ bạn có một lỗi đánh máy trong dòng pam_mkhomedir.so - lỗi chính tả trong pam.conf không tốt! - và tôi không nghĩ rằng dù sao thì dòng đó là cần thiết nếu tập lệnh check_zfs.sh thực hiện tất cả công việc bẩn thỉu.
Tom Shaw

@Tom Tại sao lại phát minh lại bánh xe khi mô-đun PAM làm điều đó cho bạn?
Andrew

2
Điểm chính của câu hỏi là anh ta muốn thư mục chính được tạo bằng "zfs created" chứ không phải "mkdir". Điều này được thực hiện bằng cách sử dụng pam_exec. Thư mục tồn tại vào thời điểm này vì vậy pam_mkhomedir tiếp theo sẽ không làm gì cả!
Tom Shaw

@TomShaw thực sự.
Andrew

3

Thật đáng để chỉ ra, như đã hỏi, câu hỏi của bạn chứa một giả định không hợp lệ: ngay cả PAM cũng không biết đó có phải là lần đăng nhập đầu tiên của người dùng hay không; Nó chỉ biết người dùng có thư mục chính hay không.

Vì vậy, với suy nghĩ đó, PAM không làm điều đó, nhưng bạn có thể dễ dàng thực hiện một cái gì đó /etc/bashrc, với lệnh được kiểm tra trước và sau đó là một dấu chấm trong thư mục chính của người dùng. Cần root tư nhân? Hoặc là một khóa sudonhị phân thích hợp , hoặc nhị phân setuid, có thể sẽ hoạt động tốt nhất cho bạn. Cả hai tùy chọn cũng cung cấp cho bạn tùy chọn đặt dotfile ở một nơi mà người dùng không thể sửa đổi hoặc xóa nó (nếu bạn quan tâm đến loại điều đó).


Tôi bối rối. Không phải pam_mkhomedir tạo các thư mục chính này, sao chép nội dung của / etc / skel, v.v? Tôi liếc nhìn mã C (Trên FreeBSD) và tôi nghĩ rằng tôi có thể thấy nơi nó sao chép các tập tin bộ xương vào homedir mới được tạo.
Stefan Lasiewski

Chỉ vì người dùng không có thư mục chính không có nghĩa là họ chưa đăng nhập vào hệ thống đó trước đó. Thư mục nhà có thể đã bị xóa chẳng hạn. Tuy nhiên, điều này chủ yếu là ngữ nghĩa và chia tóc.
Red Tux

@red: Đã hiểu. Tôi cập nhật câu hỏi của tôi.
Stefan Lasiewski

1

Vì vậy, bạn có hai lựa chọn ở đây:

1) sửa đổi nguồn cho pam_mkhomedir để tạo hệ thống tệp zfs trước khi tạo thư mục. 2) hãy để pam_mkhomedir chạy như bình thường, sau đó thêm tập lệnh để kiểm tra và xem khi nào có thư mục không có trên hệ thống tệp zfs của riêng họ nơi người dùng đã đăng xuất. Khi bạn bắt những trường hợp đó, di chuyển thư mục / home, tạo hệ thống tệp, sau đó di chuyển các tệp trở lại thư mục.

Tôi nghi ngờ việc để người dùng ở nhà chính / nhà trong một ngày đầu tiên sẽ không gây ra quá nhiều vấn đề, vì vậy tôi sẽ chọn tùy chọn thứ hai, đơn giản hơn.

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.