“Tidak dapat mengatur grup proses terminal” selama su ke pengguna lain sebagai shell login

16

Catatan: Silakan baca informasi terbaru yang dimulai dengan "EDIT" di dekat titik tengah tulisan ini - lingkungan dan latar belakang masalah ini telah berubah

Saya punya instalasi standar Debian 6.0 yang tidak lengkap di sini yang saya putuskan untuk didelegasikan ke repositori Pengujian Debian. Saya melakukan ini dengan menukar referensi ke repo Squeeze di sources.list saya untuk menggunakan repos Pengujian sebagai gantinya.

Setelah paket menginstal dan reboot, saya mendapatkan kesalahan berikut ketika mencoba melakukan su - ke pengguna lain:

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

Jika saya menghilangkan -, ini tidak terjadi.

Perhatikan bahwa pengguna dapat menjadi root dengan benar, ini sepertinya hanya terjadi ketika beralih dari root ke orang lain dan menggunakan - untuk mendapatkan lingkungan pengguna tersebut.

Google sebagian besar tidak berguna di sini. Satu-satunya hal yang dapat saya temukan adalah referensi dari 2011 sehubungan dengan suxpaket, yang tampaknya telah diperbaiki untuk sementara waktu.

Ini terlihat dan berbau sangat seperti kesalahan upgrade, diperbaiki dengan mengutak-atik paket yang tepat dengan cara yang benar. Saya hanya tidak tahu harus mulai dari mana - selain dari ini, sistem saya bekerja secara normal dan seperti yang diharapkan.

EDIT

Ini sekarang terjadi pada saya di mesin stabil Debian seperti yang dijelaskan di atas. Tidak ada peningkatan atau apa pun kali ini, cukup stabil.

Yup, setahun kemudian. Masih tidak tahu apa masalahnya.

Begini tampilannya sekarang (tidak banyak yang berubah):

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

Sebuah strace dihasilkan seperti ini:

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

..juga muncul beberapa perilaku membingungkan. Pesan-pesan ini agak membingungkan. Beberapa baris yang dipilih:

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)

Saya telah menghubungkan output penuh dari sesi strace ini - yang saya lakukan hanyalah menjalankan perintah su, lalu segera ctrl + d keluar dari terminal.

Mikey TK
sumber
1
Hai Mike. Apakah Anda menemukan masalahnya?
Mircea Vutcovici

Jawaban:

33
  • su - usernameditafsirkan oleh Anda suberarti "menjalankan shell nama pengguna sebagai shell login interaktif"
  • su username -ditafsirkan oleh Anda suberarti "jalankan perintah non-interaktif berikut ( -) sebagai nama pengguna "
  • yang terakhir hanya bekerja sama sekali karena:
    • Anda sumelewatkan trailing argumen shuntuk diuraikan
    • shdibutuhkan -untuk berarti "dijalankan sebagai shell login (baca /etc/profile, ...)"

Tetapi yang benar-benar Anda minati adalah: mengapa tidak interaktif ? Berbagi terminal pengendali antara orangtua yang istimewa dan anak yang tidak terjangkau membuat Anda rentan terhadap " peningkatan hak istimewa pushback TTY ", alias TIOCSTIbug, jadi kecuali Anda benar-benar memerlukannya su lepas darinya . Ketika Anda menggunakan su username -formulir, su disimpulkan bahwa Anda tidak memerlukan terminal pengendali .

Hanya proses dengan terminal pengendali yang dapat memiliki pemimpin sesi yang memanipulasi kelompok proses (melakukan kontrol pekerjaan); jejak yang Anda berikan bashmendeteksi bahwa itu tidak bisa menjadi pemimpin sesi.

Anda menyebutkan:

Yang menjadi asing adalah bahwa kedua bentuk berfungsi dengan baik di Ubuntu dan CentOS 6, namun pada vanilla Debian, hanya bentuk pertama yang berfungsi tanpa kesalahan.

Mengabaikan varian suka suxdan sudo, setidaknya ada tiga [1] versi sudi Linux: coreutils, util-linuxdan shadow-utilsdari mana Debian berasal. Halaman manual yang terakhir menunjukkan:

Versi su ini memiliki banyak opsi kompilasi, hanya beberapa yang dapat digunakan di situs tertentu.

dan Debian dilengkapi dengan bendera old_debian_behavior; versi lain mungkin memiliki opsi waktu kompilasi / runtime yang serupa. Alasan lain untuk variabilitas mungkin karena ada beberapa perdebatan [2], apakah suharus pernah digunakan untuk menjatuhkan hak istimewa dengan cara ini dan apakah TIOCSTIbug karena itu bug sama sekali (Redhat awalnya menutupnya "WONTFIX" ).

[1]: Edit: tambahkan SimplePAMAppsdan hardened-shadowke sana.

[2]: Solar Designer memiliki beberapa pendapat (lama) di sana yang menurut saya layak dibaca.

ZakW
sumber
2
Itu adalah jawaban yang sangat baik dan yang terbaik dari semuanya justru menjelaskan alasannya. Saya berharap Anda berada di sini setahun yang lalu :)
Mikey TK
1

Saya akan memeriksa kepemilikan dan izin pada / dev / pts * atau untuk konfigurasi baru untuk udev yang terkait dengan perangkat / dev / pts, yang tidak diganti selama proses peningkatan.

Anda juga dapat mencoba mencari tahu apa syscal yang menghasilkan kesalahan dengan menjalankannya sebagai root:

strace -f su - username 2>stderr.log
Mircea Vutcovici
sumber
2
Lebih baik tambahkan -fke strace itu, kalau-kalau su memutuskan untuk menjalankan shell sebagai subproses, yang tampaknya sudah umum sekarang. Syscall untuk mengatur grup proses foreground terminal adalah ioctl(..., TIOCSPGRP, ...)dan kita sudah tahu itu gagal dengan ENOTTY (ioctl yang tidak sesuai untuk perangkat) sehingga bagian dari strace tidak akan banyak membantu. Tetapi suatu strace dari kedua versi perintah (dengan dan tanpa -) dapat dibandingkan untuk mencari tahu mengapa TIOCSPGRP gagal.
Alan Curry
Itu terlihat seperti petunjuk yang menjanjikan. Melihat di folder / dev / pts saya, ada dua item, yaitu 0, izin yang ditetapkan sebagai 600 milik pengguna yang saya masuki, dan ptmxdimiliki oleh root, dengan nol izin.
Mikey TK
1
Ketika Anda mendapatkan prompt shell setelah No job controlpesan, jalankan perintah ttydan itu akan memberi tahu Anda di mana Anda berada. Lalu ls -litu.
Alan Curry
@AlanCurry, Anda benar, saya akan menambahkan -f. Terima kasih!
Mircea Vutcovici
@AlanCurry - kembali. Saya telah memperbarui pertanyaan awal dengan informasi yang disarankan Mircea.
Mikey TK