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 sux
paket, 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.
Jawaban:
su - username
ditafsirkan oleh Andasu
berarti "menjalankan shell nama pengguna sebagai shell login interaktif"su username -
ditafsirkan oleh Andasu
berarti "jalankan perintah non-interaktif berikut (-
) sebagai nama pengguna "su
melewatkan trailing argumensh
untuk diuraikansh
dibutuhkan-
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
TIOCSTI
bug, jadi kecuali Anda benar-benar memerlukannyasu
lepas darinya . Ketika Anda menggunakansu 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
bash
mendeteksi bahwa itu tidak bisa menjadi pemimpin sesi.Anda menyebutkan:
Mengabaikan varian suka
sux
dansudo
, setidaknya ada tiga [1] versisu
di Linux:coreutils
,util-linux
danshadow-utils
dari mana Debian berasal. Halaman manual yang terakhir menunjukkan: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], apakahsu
harus pernah digunakan untuk menjatuhkan hak istimewa dengan cara ini dan apakahTIOCSTI
bug karena itu bug sama sekali (Redhat awalnya menutupnya "WONTFIX" ).[1]: Edit: tambahkan
SimplePAMApps
danhardened-shadow
ke sana.[2]: Solar Designer memiliki beberapa pendapat (lama) di sana yang menurut saya layak dibaca.
sumber
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:
sumber
-f
ke strace itu, kalau-kalau su memutuskan untuk menjalankan shell sebagai subproses, yang tampaknya sudah umum sekarang. Syscall untuk mengatur grup proses foreground terminal adalahioctl(..., 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.ptmx
dimiliki oleh root, dengan nol izin.No job control
pesan, jalankan perintahtty
dan itu akan memberi tahu Anda di mana Anda berada. Laluls -l
itu.-f
. Terima kasih!