Cách sử dụng xauth để chạy ứng dụng đồ họa thông qua người dùng khác trên linux


48

Tài khoản người dùng thông thường của tôi là, giả sử, user1. Tôi đã tạo user2 riêng cho một số ứng dụng x mà tôi muốn chạy trong khi đăng nhập vào x với tên user1 nhưng theo cách đó sẽ ngăn không cho nó truy cập đọc / ghi vào dữ liệu user1. Tôi nghĩ rằng tôi có thể sử dụng xauth và sudo / su cho user2 từ user1 để chạy ứng dụng này. Làm thế nào để tôi làm điều này? Tôi không chắc cách cấu hình xauth.

Câu trả lời:


32

Để sử dụng xauth một cách chọn lọc, khi user1 chạy:

xauth list|grep `uname -n`

Điều này in các mục ủy quyền hexkey cho bạn. Bạn cũng có thể có các màn hình khác nhau được liên kết với các máy chủ đó.

Khi user2 đặt màn hình của bạn (giả sử trường hợp mặc định):

DISPLAY=:0; export DISPLAY

Sau đó chạy:

xauth add $DISPLAY . hexkey

Lưu ý dấu chấm sau $ HIỂN THỊ và trước hexkey.

Khi không cần truy cập nữa, vì user2 bạn có thể chạy:

xauth remove $DISPLAY

Vấn đề 1: user2 không có .Xauthoritytệp trong thư mục chính của user2. Vấn đề 2: Bằng cách nào đó và vì một số lý do tôi không hiểu, sau đó su, XAUTHORITY giữ filepath cho user1's. Nhưng tập tin đó không thể đọc được bởi user2.
Otheus

Có vẻ như, bạn đã quên unset XAUTHORITY dưới user2
socketcharge

hexkeytrong xauth addlệnh giống như từ xauth listhoặc tôi phải tạo một cái mới ngẫu nhiên?
bonanza

bonanza: nó là đầu ra từ danh sách xauth.
John Eikenberry

1
Một cách khác để làm điều này là một cái gì đó giống như ... "chiết xuất xauth - $ HIỂN THỊ | sudo -iu steam xauth merge -". Trong trường hợp này, tôi có XAUTHORITY được đặt trong .profile, vì vậy 'sudo -i' được đặt đúng.
John Eikenberry

12

Tôi đặt .zshrcmột dòng với export XAUTHORITY=~/.Xauthorityvà bây giờ tôi có thể thực hiện sudo -E xcommand. Sau rất nhiều lần googling, đối với tôi đây là cách dễ nhất.


1
Lưu ý rằng quy trình này thường không yêu cầu bạn sử dụng sudo -E(và việc sử dụng -Ebị vô hiệu hóa trên hầu hết các cài đặt mặc định) vì thông thường sudoerscấu hình mặc định sẽ cho phép XAUTHORITYbiến môi trường được chuyển sang sudo.
Guss

@Guss Nó không yêu cầu -E . Nó có thể được đặt thành một biến có thể được thông qua và Red Hat hoặc Debian gợi ý nó.
Daniel C. Sobral

@ DanielC.Sobral - đó là những gì tôi đã nói :-)
Guss

@Guss, xin lỗi. Tôi bằng cách nào đó đảo ngược mọi câu bạn viết. :-)
Daniel C. Sobral

Vẫn không làm việc cho tôi, trên Mac OS X với zsh
Sridhar Sarnobat

9

Giả sử debian hoặc ubfox (nên tương tự trên Red Hat / SUSE).

sudo apt-get install sux
sux user -c 'command'

+1 câu trả lời tốt, không có điểm trong việc phát minh lại bánh xe. Ngẫu nhiên, sux chủ yếu làm những gì câu trả lời của tôi ở trên cho thấy. Tất nhiên, nó mạnh hơn và dễ sử dụng hơn.
sleske

Bạn có thể lưu ý rằng, 'sux' thực sự cũng là một kịch bản shell đơn giản ..
Martin Mächler

5
suxlà bỏ dở (và lấy ra từ kho Debian / Ubuntu): packages.qa.debian.org/s/sux/news/20140101T172633Z.html
Rob W

9

Đầu tiên: Không sử dụng xhost +, nó khá không an toàn (cho phép / từ chối chăn).

Thay vì sử dụng cơ chế X-Cookie:

su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority 
export DISPLAY=:0

Ngoài ra, nếu bạn đã suxcài đặt, hãy sử dụng nó (xem câu trả lời của ehempel).

Trong cả hai trường hợp, user2 sẽ sử dụng cookie bí mật trong .Xmasterity để ủy quyền cho máy chủ X và không ai khác có quyền truy cập vào nó.

Ghi chú:

  • Tùy thuộc vào quyền truy cập tệp của bạn, bạn có thể phải sao chép .Xmasterity theo một cách khác.
  • Thay vì sao chép .Xauthority, bạn cũng có thể sử dụng xauthđể trích xuất và sao chép khóa ủy quyền (xem câu trả lời của Randall). Nếu bạn có nhiều khóa trong .Xauthoritytệp thì đây là lựa chọn nhiều hơn; nếu không thì đó là vấn đề của hương vị.

vâng, tôi có quyền truy cập root trên máy đó
Phil

Đây chỉ là sao chép thủ công các cookie xauth thông qua quyền truy cập root. Điều này không khác với việc sử dụng xauth như Randall giải thích trong câu trả lời hàng đầu (hiện tại), ngoại trừ nó sao chép mọi cookie mà 'danh sách xauth' sẽ hiển thị. Vì vậy, điều này kém an toàn hơn câu trả lời xauth hàng đầu sẽ chỉ thêm các cookie bạn chọn.
John Eikenberry

@JohnEikenberry: Đúng, cảm ơn vì đã chỉ ra điều này. Tôi cập nhật câu trả lời của tôi.
sleske

7

Điều này sẽ khắc phục sự cố cho tất cả người dùng:

cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF

Về cơ bản, đây là những gì tôi đã làm và nó hoạt động rất tốt, cảm ơn!
Guss

3

Là gốc:

xhost local:yourusername

Tên người dùng của bạn là tên người dùng của bạn :)

Sau đó, làm su như người dùng của bạn xclocksẽ làm việc nếu nó được cài đặt


2

Đây chỉ là hack:

  • xauth + (không an toàn)
  • ssh -X user2 @ localhost (xấu xí)

Sleske ở trên có, tôi nghĩ, giải pháp thích hợp.


ssh -Xlà một giải pháp rất đơn giản và thanh lịch, không phụ thuộc vào bất kỳ nội dung gtk / kde không dùng nữa (yêu cầu cài đặt thêm nhị phân với bit SUID ...).
Stefan

2

Tôi đã tìm thấy thứ gì đó phù hợp với tôi trên KDE

kdesu -u username /path/to/program

Về phần debian của kde-cli-tools, và không phải trong $PATHnhưng trong /usr/lib/x86_64-linux-gnu/libexec/kf5/kdesu(rõ ràng phụ thuộc vào kiến ​​trúc).
Stefan

0

Cách này được thực hiện trong suse / opensuse: http://www.novell.com/support/kb/doc.php?id=7003743

Chỉ cần sửa đổi /etc/pam.d/su, thêm tùy chọn (in đậm):

phiên tùy chọn pam_xauth.so systemuser = 1

Sau đó, bạn có thể chuyển đổi với su mà không cần -:

người dùng su2

và chạy ứng dụng đồ họa.


-1

Đối với Gnome (và không có bất kỳ môi trường máy tính để bàn nào thực sự, tôi chỉ sử dụng nó với icewm) gksu:

gksu -u username program

"gksu đã không còn được sử dụng trong nhiều năm": bug.debian.org/cgi-bin/orpreport.cgi?orms=867236
Stefan

@Stefan lưu ý rằng lỗi Debian này là tiền đề cho việc nâng cao các đặc quyền cho toàn bộ chương trình là ý tưởng tồi và thay vào đó, chương trình nên được sửa đổi để chỉ thực hiện các trình trợ giúp tối thiểu với các đặc quyền nâng cao thay thế (sử dụng Chính sáchKit). Câu hỏi này (và câu trả lời của tôi) là về việc giảm các đặc quyền, đó là một điều khác hoàn toàn và thực tế là ý tưởng tốt (ví dụ, để duyệt ngẫu nhiên, tôi có lối tắt thực thi firefox trong một tài khoản ít đặc quyền hơn là tài khoản mặc định của tôi, vì vậy mọi khai thác đều có thể 't chạm vào dữ liệu của tôi - và gksu (8) khá ổn cho điều đó)
Matija Nalis

Tất cả điều đó là tốt, nhưng sử dụng một nhị phân SUID không được chấp nhận và không rõ ràng là sai. Câu trả lời này có thể hữu ích trong quá khứ, nhưng không còn nữa.
Stefan
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.