Thay thế cho sux, để chạy lệnh đồ họa một cách an toàn ( firefox-esrví dụ bên dưới) như $AUTHUSER( gueství dụ bên dưới):
AUTHUSER=guest
AUTHSTRING=SI:localuser:${AUTHUSER}
xhost +${AUTHSTRING} > /dev/null
SUDO_ASKPASS=/usr/bin/ssh-askpass
export SUDO_ASKPASS
sudo -k --askpass -u ${AUTHUSER} /usr/bin/firefox-esr
xhost -${AUTHSTRING} > /dev/null
sudo -K
mã này:
- cung cấp cho
guestngười dùng quyền truy cập vào người dùng hiện tại của bạn $DISPLAYthông quaxhost +SI:localuser:guest
- sử dụng
ssh-askpassđể đồ họa hỏi bạn mật khẩu (tất nhiên, bạn có thể sử dụng sudoers(5) NOPASSWD:để tránh điều này, nếu chính sách bảo mật của bạn cho rằng nó ổn. Hoặc bạn có thể sử dụng các askpasschương trình khác hoặc chỉ định chúng trong các tệp cấu hình (xem sudo(8)chi tiết về --askpass)
- nếu mật khẩu ổn (và bạn có quyền trong
sudoers(5)) thì nó sẽ chạy lệnh /usr/bin/firefox-esrnhư một người dùng khác ( guest)
- sau khi chương trình hoàn tất, quyền cho người dùng khác (
guest) truy cập của bạn $DISPLAYbị thu hồi thông quaxhost -SI:localuser:guest
cuối cùng, sudo -Kxóa mật khẩu đã lưu trong bộ nhớ cache, vì vậy lần gọi tiếp theo ssh-askpasssẽ yêu cầu bạn nhập lại mật khẩu (thay vì sử dụng mật khẩu đã lưu trong bộ nhớ cache)
trong khi nó là công việc ít hơn những gì gksu(8)hoặc sux(8)đã làm, nó có thể được kịch bản, và nó là an toàn hơn:
xhost + (bất kỳ người dùng nào cũng sẽ có quyền truy cập vào màn hình đồ họa của bạn miễn là nó có hiệu lực)
- người dùng khác có thể đọc được ~ / .xauth (người dùng đó truy cập không xác định vào màn hình của bạn)
- what
gksu/ suxdid (bản sao tạm thời ~/.Xauthority, cho phép người dùng được chỉ định sao chép MIT-MAGIC-COOKIE-1và tiếp tục sử dụng màn hình của bạn ngay cả khi gksu / sux kết thúc (miễn là bạn không tắt máy hoặc đăng xuất khỏi màn hình - trình bảo vệ màn hình, ngủ đông, v.v. bánh quy).
vì nó sẽ chỉ cho phép một người dùng cục bộ truy cập vào màn hình của bạn, và sau đó chỉ khi lệnh chạy (khi lệnh kết thúc, $AUTHUSERsẽ không còn có thể truy cập vào màn hình của bạn theo bất kỳ cách nào).
Một sự thay thế an toàn là ssh -X(không có -Ymà thực sự làm cho bạn kém an toàn! Thấy ForwardX11Trustedở ssh_config(5)để biết chi tiết), như là dễ dàng hơn để sử dụng nếu bạn không kịch bản nó, nhưng nó gây ra overhead additinal (ví dụ. Nó là chậm hơn) và một số chương trình có thể không hoạt động chính xác mà không an toàn -Y .
$XAUTHORITYvẫn được đặt thành user1~/.Xauthority, mà tôi đoán là chương trình sẽ cố đọc và thất bại vì tệp đó thường có chế độ 0600 (-rw-------), nghĩa là nó không khả dụng để đọc bởi bất kỳ ai trong nhóm "khác", bao gồm user2. Có nghĩa là nếu bạnchmod o+r ~/.Xauthority(như user1), bạn sẽ hack theo cách của bạn xung quanh vấn đề này. Tôi đã viết một kịch bản chứng minh điều này.