Sudo là người dùng khác nhau và màn hình đang chạy


167

Hôm nay phát hiện ra rằng màn hình đang chạy như một người dùng khác mà tôi không thể làm việc!

I E

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails: Cannot open your terminal '/dev/pts/0'

Tôi có một đoạn script chạy như người dùng "màn hình". Chúng tôi chạy nó trong một phiên màn hình để xem đầu ra trên màn hình. Vấn đề là, chúng tôi có một số người dùng đăng nhập bằng tài khoản của riêng họ (ví dụ: bob, james, susie, v.v.) và sau đó họ sudo vào người dùng "màn hình". Cho phép họ truy cập vào người dùng "màn hình" là điều không cần thiết.


13
Đây có phải là lỗi mà bạn đang nhận được? "Không thể mở thiết bị đầu cuối của bạn '/ dev / pts / 0' - vui lòng kiểm tra."
Jim

vâng đó là một. Tôi hiểu tại sao nó xảy ra nhưng có một cách giải quyết?
luckytaxi

4
Một nhận xét về các lệnh của bạn - Tôi tiếp tục thấy mọi người đang chạy sudo su "user" -. Tại sao không sử dụng sudo -u user -s?
Andrew Aylett

2
@Jim: +1 để cung cấp thông báo lỗi bị thiếu.
Dennis Williamson

1
@Andrew Hầu hết mọi người tôi biết sudo su- Tôi nghĩ đó chỉ là những gì mọi người đã quen (trong trường hợp của tôi là vì bạn không cần biết bất kỳ cờ sudo nào sudo su- Tôi không nghĩ tôi đã từng đọc sudo manpage :)
voretaq7

Câu trả lời:


245

Hãy thử chạy script /dev/nullvới tư cách là người dùng mà bạn sử dụng sutrước khi khởi chạy màn hình - đây là một bản hack nhỏ, nhưng nó sẽ khiến màn hình hài lòng.


5
Re: ý nghĩa bảo mật, không ai tôi biết (nhưng điều đó không có nghĩa là không có gì cả :) - IIRC điều này phụ thuộc vào hiệu ứng phụ của "tập lệnh" mở một thiết bị đầu cuối mới (khi người dùng gọi nó) và vì bạn đang gửi đầu ra của tập lệnh tới / dev / null nên không có gì để nắm bắt. Nó cũng chắc chắn an toàn hơn so với việc thêm người dùng vào nhóm tty (IMHO)
voretaq7

2
@nalply Thành thật mà nói bạn không nên tìm thấy nhiều shell khó hiểu nếu bạn là quản trị viên hệ thống Unix - scriptcó thể nói, có thể được sử dụng để khởi chạy screen. Sau đó, bạn chỉ phải thoát hai lần (một lần cho screen, một lần cho su). (Đây là điều scriptmà trang người đàn ông có thể làm rõ cho bạn, nếu bạn dành thời gian để đọc nó ...)
voretaq7

10
Hoặc chỉ cần chạy sudo -u bob script -q -c 'screen -dr myscreen' /dev/null. Sau đó, bạn chỉ có một thiết bị đầu cuối để thoát / tách khỏi.
Andy Shulman

4
Cảm ơn, điều này đã cứu tôi. Nhưng tại sao điều này sửa chữa nó? Theo những gì tôi hiểu, nó in mọi thứ từ stdout đến ... hư không. Và bằng cách nào đó sửa màn hình.
sudo

3
@sudo Để thực hiện, nó scriptsẽ mở thiết bị tty của riêng nó, thuộc sở hữu của người dùng đã chạy nó (nhìn vào /devvà bạn sẽ thấy nó xuất hiện sau khi bạn chạy script). screensau đó lấy thiết bị tty đó (thuộc sở hữu của người dùng đang chạy screenđể không gặp sự cố khi truy cập thiết bị). Đó là một công việc hack hoàn toàn, nhưng nó hoạt động. Nhìn vào một số máy của tôi, có vẻ như các phiên bản mới của màn hình dường như cài đặt setuid-root, cũng hoạt động, nhưng có nghĩa là bạn có một nhị phân gốc setuid khác trôi nổi, điều này khiến một số người khó chịu.
voretaq7

33

Tôi đang sử dụng chức năng bao bọc xung quanh screencho (các) người dùng mà tôi sudo susử dụng. Đây là chức năng trình bao bọc mà tôi đã thêm vào (các) người dùng ~/.bashrc:

màn hình chức năng () {
  / usr / bin / script -q -c "/ usr / bin / màn hình $ {*}" / dev / null
}

Điều này cho phép tôi sử dụng tất cả các tùy chọn và tham số screenmà tôi có thể muốn sử dụng. Tôi đang suy nghĩ về việc đưa chức năng này trên toàn hệ thống.


1
Hoạt động hoàn hảo. Đối với những người muốn hệ thống này, tôi khuyên bạn nên thêm nó vào /etc/bash.bashrc - hoạt động trên tất cả người dùng.
Một số người mua

2
Điều này sẽ không trích dẫn các đối số để sàng lọc chính xác, nếu không thì là một giải pháp tốt.
9/2016 lúc

7

Giả sử dù sao họ cũng đang SSH vào máy chủ, bạn có thể thêm các khóa ssh công khai cho mỗi người dùng cần truy cập vào tài khoản màn hình trong tệp ~ Monitor / .ssh / ủy quyền. Sau đó, trên mỗi máy từ xa của người dùng, họ có thể chạy

ssh -t Monitor@remote.machine màn hình -RD


Đây là một cách tiếp cận tốt khác - Bạn sẽ phải chỉ định các lệnh bắt buộc trong tệp khóa được ủy quyền mặc dù (mỗi luckytaxi "cho phép họ truy cập vào người dùng 'màn hình' ngoài câu hỏi" ở trên - các lệnh bắt buộc có thể giới hạn chúng chỉ đính kèm phiên màn hình)
voretaq7

2
Tôi không chắc làm thế nào để giải quyết điều đó trong câu trả lời của mình, bởi vì anh ấy nói "cho họ quyền truy cập ... không nằm trong câu hỏi", nhưng cũng nói "... họ sudo vào người dùng" màn hình ". Nhưng tôi đồng ý, buộc hạn chế lệnh trong ủy quyền_key nên quan tâm đến điều đó.
Alex

7

Giả sử chúng ta đang nói về lỗi này:

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.

Đây là một lớp lót (có thể được sử dụng như "bí danh gobob" chẳng hạn):

sudo su - bob -c "script -c bash /dev/null"'

Giải trình:

Điều này sẽ bắt đầu một shell (như shell đăng nhập) khi người dùng bob. Người dùng bob bắt đầu script, được yêu cầu gọi bash (có thể là dấu gạch ngang hoặc ksh ...) và một bản sao của phiên bị vứt đi.


0

Có lẽ sẽ phải thay đổi quyền trên thiết bị được đề cập hoặc thêm màn hình vào một nhóm có quyền đọc thiết bị đó, đó sẽ là thiên hướng đầu tiên của tôi. Nhưng bạn phải cân nhắc ý nghĩa bảo mật của việc đó.


0

Bạn nói bạn làm:

sudo su "monitor" -

Tôi đang tự hỏi về dấu gạch ngang. Tôi thường làm:

sudo su - username

Dấu gạch ngang (trên trang su man) bảo su "biến shell thành vỏ đăng nhập". Điều này có nghĩa là nó sẽ lấy tất cả các tập lệnh khởi động shell thông thường và thiết lập những thứ như PATH và HOME đúng cách.


3
Không. sudo su - usernamesudo su username -làm điều tương tự.
Tim Ludwinski

-4

Tôi chỉ gặp vấn đề này. Đã giải quyết nó chmod +rw $(tty)trước khi chạy sudo. Vấn đề với giải pháp này là bất cứ ai cũng có thể kết nối và rình mò thiết bị đầu cuối của bạn sau đó.


2
Âm thanh như một giải pháp tuyệt vời.
Evan Carroll

10
@EvanCarroll Đó là một giải pháp tuyệt vời, ngoại trừ phần cung cấp cho toàn bộ thế giới quyền truy cập đọc và ghi vào thiết bị đầu cuối của anh ấy. Chỉ là một vấn đề bảo mật nhỏ - Không có chương trình nào quan tâm đến điều đó, ngoại trừ tất cả mọi thứ kiểm tra bảo mật thiết bị đầu cuối trước khi chấp nhận mật khẩu ( gpgví dụ). Và chắc chắn anh ta sẽ không bao giờ ở trong một hệ thống có người dùng độc hại sẽ theo dõi ttyvà đánh hơi mật khẩu ...
voretaq7

Được cảnh báo : không bao giờ thử điều này ở nhà! Điều này nguy hiểm!!!
ruizpauker
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.