Pertanyaan Sudo sebagai pengguna dan layar yang berbeda


Menemukan hari ini bahwa menjalankan layar sebagai pengguna berbeda yang saya sudo menjadi tidak akan berfungsi!

yaitu

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails

Saya memiliki skrip yang berjalan sebagai pengguna "monitor". Kami menjalankannya dalam sesi layar untuk melihat keluaran di layar. Masalahnya adalah, kami memiliki sejumlah pengguna yang log in dengan akun mereka sendiri (yaitu bob, james, susie, dll ...) dan kemudian mereka masuk ke pengguna "monitor". Memberi mereka akses ke pengguna "monitor" adalah mustahil.


150
2018-02-25 15:07




Apakah ini kesalahan yang Anda dapatkan? "Tidak dapat membuka terminal Anda '/ dev / pts / 0' - silakan periksa." - Jim
Ya itulah yang satu itu. Saya mengerti mengapa itu terjadi tetapi apakah ada solusi? - luckytaxi
Sebuah komentar tentang perintah Anda - saya terus melihat orang-orang berlarian sudo su "user" -. Mengapa tidak digunakan sudo -u user -s? - Andrew Aylett
@Jim: +1 untuk memasok pesan kesalahan yang hilang. - Dennis Williamson
@Andrew Kebanyakan pria yang saya kenal sudo su - Saya pikir itu hanya apa yang orang terbiasa (dalam kasus saya itu karena Anda tidak perlu tahu ada bendera sudo untuk sudo su - Saya tidak berpikir saya pernah membaca manual sudo :) - voretaq7


Jawaban:


Coba jalankan script /dev/null sebagai pengguna kamu su sebelum meluncurkan layar - ini adalah sebuah ghetto kecil, tetapi harus membuat layar menjadi bahagia.


220
2018-02-25 16:46



Re: implikasi keamanan, tidak ada yang saya sadari (tapi itu tidak berarti tidak ada :) - IIRC ini bergantung pada efek samping "skrip" membuka perangkat terminal baru (seperti pengguna memohonnya) , dan karena Anda mengirim output skrip ke / dev / null, tidak ada yang bisa diambil. Ini juga pasti lebih aman daripada menambahkan pengguna ke grup tty (IMHO) - voretaq7
@nalply Sejujurnya Anda tidak akan menemukan banyak shell yang membingungkan jika Anda adalah administrator sistem Unix - yang mengatakan, script dapat digunakan untuk meluncurkan screen. Maka Anda hanya perlu keluar dua kali (sekali untuk screen, sekali untuk su). (Ini adalah sesuatu yang script halaman manual dapat menjelaskan untuk Anda, jika Anda meluangkan waktu untuk membacanya ...) - voretaq7
Atau jalankan saja sudo -u bob script -q -c 'screen -dr myscreen' /dev/null. Maka Anda hanya memiliki satu terminal untuk keluar / lepas. - Andy Shulman
Terima kasih, ini menyelamatkan saya. Tapi mengapa ini memperbaikinya? Dari apa yang saya pahami, itu mencetak semuanya dari stdout ke ... tidak di mana pun. Dan entah bagaimana memperbaiki layar. - sudo
@sudo Untuk melakukan tugasnya script membuka perangkat tty miliknya sendiri, dimiliki oleh pengguna yang menjalankannya (lihat /dev dan Anda akan melihatnya muncul setelah Anda menjalankan script). screen kemudian mengambil perangkat tty itu (yang dimiliki oleh pengguna yang sedang berjalan screen jadi tidak sulit mengaksesnya). Ini adalah pekerjaan hack total, tetapi berhasil. Melihat beberapa mesin saya tampaknya versi baru dari layar tampaknya menginstal setuid-root, yang juga berfungsi, tetapi berarti Anda memiliki biner setuid-root lain yang beredar, yang membuat beberapa orang merasa tidak nyaman. - voretaq7


Saya menggunakan fungsi wrapper screen untuk pengguna yang saya sudo su untuk. Ini adalah fungsi pembungkus yang telah saya tambahkan ke pengguna (s) ~/.bashrc:

layar fungsi () {
  / usr / bin / script -q -c "/ usr / bin / layar $ {*}" / dev / null
}

Ini memungkinkan saya untuk menggunakan semua opsi dan parameter untuk screen yang mungkin ingin saya gunakan. Saya sedang mempertimbangkan untuk meletakkan fungsi ini di seluruh sistem.


32
2017-08-13 13:45



Bekerja dengan sempurna. Bagi mereka yang menginginkan sistem ini luas, saya merekomendasikan untuk menambahkan ini ke /etc/bash.bashrc - berfungsi di semua pengguna. - Someguy123
Ini tidak akan mengutip argumen untuk menyaring dengan benar, jika tidak solusi yang baik. - augurar


Dengan asumsi mereka SSH ke host, Anda bisa menambahkan kunci ssh publik untuk setiap pengguna yang membutuhkan akses ke akun monitor di file ~ monitor / .ssh / authorized_keys. Kemudian pada setiap mesin remote pengguna mereka dapat dijalankan

ssh -t monitor@remote.machine layar -RD


7
2018-02-25 16:52



Ini adalah pendekatan lain yang baik - Anda harus menentukan perintah yang dipaksakan dalam file kunci yang berwenang sekalipun (per luckytaxi) memberi mereka akses ke pengguna 'monitor' adalah diluar pertanyaan "catatan di atas - perintah yang dipaksakan dapat membatasi mereka hanya melampirkan sesi layar) - voretaq7
Saya tidak yakin bagaimana menjawabnya dalam jawaban saya, karena dia mengatakan "memberi mereka akses ... tidak mungkin", tetapi juga mengatakan "... mereka masuk ke pengguna 'monitor'". Tapi saya setuju, memaksa pembatasan perintah di authorized_keys harus mengurus itu. - Alex


Dengan asumsi kita berbicara tentang kesalahan ini:

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

Berikut adalah satu-liner (bisa digunakan sebagai "alias gobob", misalnya):

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

Penjelasan:

Ini akan memulai shell (seperti shell login) sebagai pengguna bob. Bob pengguna dimulai script, yang diperintahkan untuk memanggil bash (bisa dash atau ksh ...) dan salinan sesi dibuang.


6
2018-02-22 08:36





Mungkin harus mengubah izin pada perangkat yang dimaksud atau menambahkan monitor ke grup yang memiliki izin untuk membaca perangkat itu, itu akan menjadi kecenderungan pertama saya. Tetapi Anda harus mempertimbangkan implikasi keamanan untuk melakukannya.


0
2018-02-25 15:51





Anda katakan Anda lakukan:

sudo su "monitor" -

Saya bertanya-tanya tentang dash trailing. Saya biasanya melakukan:

sudo su - username

Dasbor (per halaman su man) memberitahu su untuk "membuat shell shell login". Ini berarti ia akan mencari semua skrip startup shell yang biasa dan mengatur hal-hal seperti PATH dan HOME dengan benar.


0
2018-02-25 18:44



Nggak. sudo su - username dan sudo su username - lakukan hal yang sama. - Tim Ludwinski


Saya baru saja memukul masalah ini. Memecahkannya dengan chmod +rw $(tty) sebelum menjalankan sudo. Masalah dengan solusi ini adalah siapa pun dapat terhubung dan mengintip di terminal Anda setelah itu.


-2
2018-06-22 02:09



Kedengarannya seperti solusi yang bagus. - Evan Carroll
@EvanCarroll Ini adalah solusi yang bagus, kecuali bagian yang diberikannya seluruh dunia baca & tulis akses ke terminalnya. Hanya masalah keamanan kecil - Tidak ada program yang peduli tentang hal itu, kecuali tentu saja apa pun yang memeriksa keamanan terminal sebelum menerima kata sandi (gpg sebagai contoh). Dan pastinya dia tidak akan pernah berada di sistem dengan pengguna jahat yang akan menontonnya tty dan mengendus kata sandi ... - voretaq7
Berhati-hatilah: jangan pernah coba ini di rumah! ini berbahaya!!! - ruizpauker