2014-05-09 16 views
5

Tôi có một máy chủ Linux sử dụng Kerberos để xác thực người dùng và AFS cho nhà người dùng. Khi tôi đăng nhập vào máy bằng một vé Kerberos có thể chuyển tiếp được, (tôi giả sử) PAM cũng quan tâm đến xác thực AFS của tôi, vì vậy tôi tự động truy cập vào trang chủ AFS của mình sau khi đăng nhập.Làm thế nào để cung cấp một quy trình đã chạy với vé Kerberos và AFS?

Giả sử tôi đăng nhập và tạo phiên màn hình và bắt đầu một ứng dụng trong đó. Sau đó, tôi tách phiên màn hình của tôi và đăng xuất khỏi máy. Vé Kerberos của tôi bị tự động giảm, vì vậy phiên màn hình của tôi chạy ở chế độ nền và ứng dụng chạy trong đó không có quyền truy cập vào nhà AFS của tôi nữa. Điều này là bình thường, và nó tốt như vậy.

Lần sau khi đăng nhập vào máy, làm cách nào để "cung cấp" phiên màn hình đang chạy và ứng dụng đang chạy trong đó (bản thân quy trình) với một vé Kerberos mới và có thể truy cập vào nhà AFS của tôi một lần nữa mà không phải khởi động lại nó?

Cảm ơn, Daniel

Trả lời

2

Các "đúng" câu trả lời là sử dụng cái gì đó như krenew hoặc kstart theo dõi phiên màn hình của bạn và chắc chắn rằng nó có một tgt hợp lệ và afs token. Hầu hết các trang web sẽ cho phép bạn gia hạn vé của mình trong tối đa 7 ngày.

Tuy nhiên, đó không phải là câu hỏi bạn đã hỏi. Phần vé rất dễ. Biến môi trường KRB5CCNAME lưu trữ vị trí của vé kerberos của bạn. Nói chung nó trông giống như sau

KRB5CCNAME=FILE:/tmp/krb5cc_7472_lIwDv27056 

Vì vậy poke xung quanh trong hệ thống/proc và tìm giá trị của KRB5CCNAME cho quá trình màn hình của bạn và sao chép vé hiện tại của bạn với vị trí tập tin.

Phần mã thông báo AFS phức tạp hơn nhiều, nếu bạn có thể xử lý màn hình bằng cách nào đó chạy aklog sau khi sao chép vé, đó là giải pháp đơn giản nhất .

Có các công cụ để trích xuất và đặt mã thông báo. gettoken và settoken, nhưng tôi biết không có cách đơn giản để sử dụng chúng để thiết lập các mã thông báo cho một quá trình tùy ý. Các thẻ AFS được lưu trữ như một phần của dữ liệu quá trình trong hạt nhân. Đó là lý do tại sao bạn thấy các nhóm được đánh số cao vui nhộn khi bạn sử dụng lệnh nhóm trên máy sử dụng AFS.

+0

Cảm ơn câu trả lời của bạn! Thật không may, tôi không thể làm cho tiến trình chạy aklog, vì nó là một nhị phân được biên dịch, và nó sẽ quá phức tạp để chạm vào nguồn, biên dịch lại, v.v ..., đặc biệt là vì tôi không sở hữu các máy chủ này, vì vậy việc triển khai sẽ cũng phức tạp. Trong thực tế, nếu tôi có thể làm điều đó, tôi có lẽ có thể chạy kinit quá, mà sẽ giải quyết vấn đề, nhưng tôi không thể. Vì vậy, bạn đang nói không có cách nào để vượt qua mã thông báo AFS hiện tại cho một tiến trình đang chạy? Cảm ơn một lần nữa, Daniel – PDani

+0

Luôn luôn có một cách, nó chỉ là vấn đề bao nhiêu mã bạn sẵn sàng để viết và cho dù bạn có quyền truy cập root. Tôi biết không có cách nào để làm điều đó bằng cách sử dụng các công cụ tiêu chuẩn và thậm chí với các công cụ không đạt tiêu chuẩn tôi biết tôi không chắc chắn nếu api AFS hỗ trợ nó. –

5

Bạn có thể đính kèm phiên màn hình, tạo cửa sổ mới/'màn hình' bên trong (với cấu hình mặc định, bạn có thể thực hiện việc này bằng cách bấm C-a C-c) và chỉ chạy kinit && aklog. Bạn không cần phải chạy "bên trong" các ứng dụng đang chạy hoặc bất cứ thứ gì như thế; bạn chỉ cần chạy nó ở đâu đó trong cùng một phiên màn hình. Sau đó, bạn có thể tách màn hình và đăng xuất và phiên màn hình vẫn có thông tin đăng nhập của bạn (cho đến khi hết hạn; bạn có thể sử dụng krenew để giữ cho chúng dài hơn, nhưng không phải mãi mãi).

Giải thích chi tiết hơn về những gì đang diễn ra, nếu bạn muốn biết. Tôi giả định rằng bạn đang đăng nhập qua ssh và PAM đang được sử dụng, nhưng cùng một quy trình chung cũng hoạt động cho các thiết lập khác:

Khi bạn đăng nhập lần đầu, PAM gán cho bạn một PAG (một loại container cho bạn Mã AFS) và chạy một số thứ tương đương với kinitaklog để cung cấp cho bạn mã thông báo AFS bên trong PAG đó. Shell của bạn sau đó được chạy bên trong PAG đó, vì vậy mọi thứ mà bạn chạy trong shell đó được liên kết với PAG đó và các thông tin đăng nhập của nó. Bao gồm phiên screen bạn đã tạo.

Khi bạn đăng xuất, cấu hình PAM cho biết tiêu hủy thông tin đăng nhập của bạn, điều đó có nghĩa là nó phá hủy mã thông báo AFS được liên kết với PAG đó. Đó là lý do tại sao phiên màn hình mất thông tin đăng nhập và mất quyền truy cập vào thư mục chính của bạn: các mã thông báo cho PAG đó đã bị hủy.

Sau đó, nếu bạn đăng nhập lại, bạn được chỉ định một PAG riêng biệt mới và một lần nữa bạn sẽ nhận được mã thông báo AFS. Phiên màn hình cũ vẫn được liên kết với PAG khác, phiên làm việc của thẻ bị hủy. Vì vậy, nếu bạn đính kèm vào phiên màn hình đó và chạy kinitaklog ở đâu đó bên trong, điều này sẽ tạo mã thông báo mới được liên kết với PAG cũ từ lần đầu tiên bạn đăng nhập. Sau đó, bạn có thể tách khỏi phiên màn hình và đăng xuất, và các mã thông báo trong PAG hiện tại của bạn sẽ bị hủy. Nhưng PAG cho phiên màn hình là không bị ảnh hưởng, vì PAM cũng không phải bất cứ điều gì khác biết về PAG đó nữa. Vì vậy, các thẻ cho nó sẽ tiếp tục có hiệu lực cho đến khi hết hạn.

Các vấn đề liên quan