Cố gắng viết một chương trình Java có khả năng chạy lệnh UNIX với tư cách người dùng UNIX khác. Tôi có mật khẩu của người dùng, và tôi biết lệnh tôi muốn chạy, nhưng lệnh phải được chạy như người dùng đó - vì vậy tôi phải đăng nhập với tư cách người dùng đó trước tiên.Chạy các lệnh UNIX với tư cách người dùng khác nhau, từ Java
Ví dụ: giả sử chúng ta có người dùng, jim, người muốn xem những gì có trong thư mục chính của bob và (vì bất kỳ lý do gì) jim có quyền truy cập để thực thi ls trong khi bob thì không. Chúng tôi hiện đang đăng nhập với tư cách là bob. Dưới đây là những gì chúng tôi (có thể) làm:
[email protected]$ su jim && ls ~bob
Vấn đề là chúng tôi được nhắc nhập mật khẩu của jim. Vì điều này được chạy từ một chương trình Java, tức là
Process p = Runtime.getRuntime().exec("su jim && ls ~bob");
chúng tôi được nhắc nhập mật khẩu của jim và gác máy. Chúng tôi biết mật khẩu của jim. Tuy nhiên, tôi không thể nhập nó.
Ngoài ra, chúng tôi không thể sử dụng tập lệnh Mong đợi (không cài đặt nó) và chúng tôi không thể trở thành siêu người dùng. Tôi cũng nhìn vào sử dụng SSH để thử loại này, vì chúng ta về mặt kỹ thuật có thể làm
[email protected]$ ssh [email protected] "ls ~bob"
nhưng điều này cũng không làm việc kể từ khi tôi không có quyền để thiết lập mật mã SSH.
Nỗ lực cuối cùng của tôi là thử và sử dụng thư viện SSH cho Java, vì mật khẩu có sẵn cho chương trình Java và tôi có thể đăng nhập bằng (và thực thi lệnh thích hợp). Nhưng kể từ khi tôi sẽ được chạy trên cùng một máy chủ, nó có vẻ như quá mức cần thiết.
Mọi đề xuất?
P.S: Java phiên bản 1.4.2, không thể nâng cấp; AIX UNIX 5.3.
bạn có thể tìm giải pháp thay thế mà không cần sử dụng thư viện của bên thứ ba, nếu bạn có thể chia sẻ? – HyperioN