Không thể thiết lập nhóm quy trình thiết bị đầu cuối Nhóm trong khi sử dụng su cho người dùng khác làm vỏ đăng nhập


16

Lưu ý: Vui lòng đọc thông tin cập nhật bắt đầu bằng "EDIT" gần điểm giữa của bài đăng này - môi trường và bối cảnh của vấn đề này đã thay đổi

Tôi đã có một bản cài đặt Debian 6.0 tiêu chuẩn không có thật ở đây mà tôi đã quyết định chuyển sang kho lưu trữ Thử nghiệm Debian. Tôi đã làm điều này bằng cách hoán đổi các tham chiếu đến các repos Squeeze trong nguồn của tôi để sử dụng các repos thử nghiệm thay thế.

Sau khi cài đặt gói và khởi động lại, tôi gặp lỗi sau khi thử su - cho người dùng khác:

root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

Nếu tôi bỏ qua -, điều này không xảy ra.

Lưu ý rằng người dùng có thể trở thành root chính xác, điều này dường như chỉ xảy ra khi chuyển từ root sang người khác và sử dụng - để có được môi trường của người dùng đó.

Google chủ yếu là vô dụng ở đây. Những điều duy nhất tôi có thể tìm thấy là các tài liệu tham khảo từ năm 2011 liên quan đến suxgói, dường như đã được sửa trong thời gian trung bình.

Điều này trông và có mùi rất giống như một lỗi nâng cấp, có thể sửa chữa bằng cách điều chỉnh đúng gói theo đúng cách. Tôi chỉ không biết bắt đầu từ đâu - ngoài việc này, hệ thống của tôi hoạt động hoàn toàn bình thường và như mong đợi.

BIÊN TẬP

Điều này hiện đang xảy ra với tôi trên một máy ổn định Debian như được mô tả ở trên. Không nâng cấp hoặc bất cứ điều gì thời gian này, chỉ cần thẳng lên ổn định.

Yup, một năm sau. Vẫn không biết vấn đề là cái quái gì.

Đây là những gì nó trông giống như bây giờ (không có nhiều thay đổi):

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
terraria@skaianet:~$ tty
/dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/0
crw--w---- 1 root root 136, 0 Oct 10 19:21 /dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/
crw--w---- 1 root root 136, 0 Oct 10 19:21 0
crw--w---- 1 root root 136, 2 Sep 22 17:47 2
crw--w---- 1 root root 136, 3 Sep 26 19:30 3
c--------- 1 root root   5, 2 Sep  7 10:50 ptmx

Một bước tiến được tạo ra như thế này:

root@skaianet:~$ strace -f -o tracelog su terraria -

.. cũng bật lên một số hành vi khó hiểu. Những tin nhắn này khá khó hiểu. Một số dòng được chọn:

readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
#Error code 10? 
15503 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
#Yes there is, and I can interact with it normally
15503 ioctl(255, TIOCGPGRP, [32561])    = -1 ENOTTY (Inappropriate ioctl for device)

Tôi đã liên kết đầu ra đầy đủ của phiên strace này - tất cả những gì tôi đã làm là chạy lệnh su, sau đó ngay lập tức ctrl + d ra khỏi thiết bị đầu cuối.


1
Chào Mike. Bạn đã tìm thấy vấn đề?
Mircea Vutcovici

Câu trả lời:


33
  • su - usernameđược hiểu theo nghĩa của bạn sulà "chạy shell của tên người dùng như một vỏ đăng nhập tương tác"
  • su username -được bạn suhiểu là "chạy lệnh không tương tác ( -) dưới dạng tên người dùng "
  • cái sau chỉ hoạt động ở tất cả vì:
    • suvượt qua các đối số của bạn để shphân tích cú pháp
    • sh-nghĩa là "chạy như một vỏ đăng nhập (đọc /etc/profile, ...)"

Nhưng điều bạn thực sự quan tâm là: tại sao không tương tác ? Chia sẻ thiết bị đầu cuối kiểm soát giữa cha mẹ đặc quyền và đứa trẻ không có đặc quyền khiến bạn dễ bị " leo thang đặc quyền đẩy lùi TTY ", hay còn gọi là TIOCSTIlỗi, vì vậy trừ khi bạn thực sự cần nó su tách khỏi nó . Khi bạn sử dụng su username -biểu mẫu, su suy ra rằng bạn không cần thiết bị đầu cuối kiểm soát .

Chỉ các quy trình với thiết bị đầu cuối kiểm soát mới có thể có các nhà lãnh đạo phiên điều khiển các nhóm quy trình (thực hiện kiểm soát công việc); dấu vết bạn đưa ra đang bashphát hiện ra rằng nó không thể là người dẫn đầu phiên.

Bạn đề cập đến:

Điều lạ là cả hai biểu mẫu đều hoạt động tốt trên Ubuntu và CentOS 6, tuy nhiên trên vanilla Debian, chỉ có biểu mẫu đầu tiên hoạt động mà không có lỗi.

Biến thể phớt lờ thích suxsudo, có ít nhất ba [1] phiên bản sutrên Linux: coreutils, util-linuxshadow-utilstừ đó Debian đến. Trang chủ của trang sau chỉ ra:

Phiên bản su này có nhiều tùy chọn biên dịch, chỉ một số trong số đó có thể được sử dụng tại bất kỳ trang web cụ thể nào.

và Debian đi kèm với cờ old_debian_behavior; các phiên bản khác có thể có các tùy chọn thời gian biên dịch / thời gian chạy tương tự. Một lý do khác cho sự thay đổi có thể là có một số tranh luận [2] về việc liệu có sunên sử dụng để bỏ đặc quyền theo cách này hay không và TIOCSTIdo đó lỗi có phải là lỗi hay không (ban đầu Redhat đã đóng "WONTFIX" ).

[1]: Chỉnh sửa: thêm SimplePAMAppsvà thêm hardened-shadowvào đó.

[2]: Solar Designer có một số ý kiến ​​(cũ) mà tôi nghĩ là đáng đọc.


2
Đó là một câu trả lời tuyệt vời và tốt nhất của nó giải thích chính xác lý do tại sao. Tôi ước bạn đã ở đây một năm trước :)
Mikey TK

1

Tôi sẽ kiểm tra quyền sở hữu và quyền trên / dev / pts * hoặc để biết cấu hình mới cho udev liên quan đến các thiết bị / dev / pts, không được thay thế trong quá trình nâng cấp.

Bạn cũng có thể thử tìm hiểu xem tòa nhà nào đang tạo ra lỗi bằng cách chạy bằng root:

strace -f su - username 2>stderr.log

2
Tốt hơn là thêm -fvào bước đó, trong trường hợp su quyết định chạy shell dưới dạng một quy trình con, điều này dường như là phổ biến hiện nay. Tòa nhà để thiết lập nhóm quy trình tiền cảnh của thiết bị đầu cuối là ioctl(..., TIOCSPGRP, ...)và chúng tôi đã biết rằng nó đã thất bại với ENOTTY (ioctl không phù hợp cho thiết bị) để một phần của bước không giúp được nhiều. Nhưng một bước của cả hai phiên bản của lệnh (có và không -) có thể được so sánh để tìm hiểu lý do tại sao TIOCSPGRP thất bại.
Alan Curry

Điều đó có vẻ như một dẫn đầu đầy hứa hẹn. Nhìn vào thư mục / dev / pts của tôi, có chính xác hai mục, đó là 0, quyền được đặt là 600 thuộc sở hữu của người dùng mà tôi đã đăng nhập và ptmxsở hữu bởi root, không có quyền.
Mikey TK

1
Khi bạn nhận được dấu nhắc shell sau No job controltin nhắn, hãy chạy lệnh ttyvà nó sẽ cho bạn biết bạn đang ở đâu. Rồi ls -lnó.
Alan Curry

@AlanCurry, bạn nói đúng, tôi sẽ thêm -f. Cảm ơn bạn!
Mircea Vutcovici

@AlanCurry - nó đã trở lại. Tôi đã cập nhật câu hỏi ban đầu với thông tin mà Mircea đề xuất.
Mikey TK
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.