Pertanyaan Muat kembali tugas grup pengguna Linux tanpa logout


Saat menetapkan daftar grup sekunder pengguna menggunakan:

# usermod -G <grouplist> <user>

apakah mungkin memaksakan penugasan grup ini untuk berlaku tanpa mengeluarkan semua sesi yang sedang berjalan?

Ini akan sangat berguna dalam situasi di mana a Layar sesi ada dengan banyak shell yang berjalan, karena seluruh sesi pada dasarnya perlu dihancurkan untuk membuat penugasan grup berlaku.

Saya pikir saya dapat mengubah grup utama pengguna dalam menjalankan shell menggunakan newgrp perintah - apakah ada alternatif yang akan berfungsi untuk kelompok sekunder?

Idealnya, saya ingin sesuatu yang akan berlaku di setiap shell tanpa dijalankan secara manual di setiap shell, tetapi gagal, mungkin beberapa cara memaksa Screen untuk menjalankan perintah yang sama di masing-masing.


255
2018-04-17 19:50


asal


Saya tahu bahwa paling tidak untuk beberapa manajer window / session adalah mungkin untuk melakukan hal ini sehingga sesi mengambil grup baru dan itu tersedia untuk setiap proses baru mulai dari menu, tombol panel atau apa pun. Saya datang ke sini sekarang mencari untuk menemukan itu lagi, jadi tidak bisa mengatakan sekarang bagaimana melakukannya, dan itu mungkin khusus untuk window manager. - mc0e


Jawaban:


Mengerikan, tetapi Anda bisa menggunakan dua lapisan newgrp untuk mencapai ini untuk grup tertentu:

id -g

... akan memberi Anda ID grup utama saat ini. Kami akan menyebutnya orig_group untuk keperluan contoh ini. Kemudian:

newgrp <new group name>

... akan mengalihkan Anda ke grup itu sebagai yang utama dan menambahkannya ke daftar grup yang dikembalikan oleh groups atau id -G. Sekarang, lebih lanjut:

newgrp <orig_group>

... Anda akan mendapatkan shell di mana Anda dapat melihat grup baru dan yang utama adalah yang asli.

Ini mengerikan dan hanya akan membuat Anda satu grup ditambahkan pada satu waktu, tetapi telah membantu saya beberapa kali untuk mendapatkan grup ditambahkan tanpa logout / di seluruh sesi X saya (misalnya untuk mendapatkan sekering ditambahkan sebagai grup ke pengguna sehingga sshfs akan berfungsi).

Edit: Ini tidak mengharuskan Anda mengetik kata sandi Anda, yang mana su akan.


149
2017-10-10 17:36



Trik bagus, aku suka itu - Simon
Di Fedora saya harus melakukannya newgrp $USER dari pada newgrp <orig_group>. Itu berarti saya tidak harus menemukan ID grup utama awal saya, jadi itu lebih mudah daripada solusi ini. - Richard Turner
Saya merasa itu sudah cukup untuk dilakukan newgrp <new group name>. Ini adalah Ubuntu 14.04 - Edward Falk
@EdwardFalk benar, tetapi Anda tidak (mungkin tidak) ingin meninggalkan grup itu sebagai ... - mimoralea
Perhatikan bahwa masing-masing newgrp membuat cangkang baru, jadi ketika Anda harus keluar sepenuhnya dari sesi Anda, Anda perlu melakukan "exit exit exit" untuk mendapatkan semua jalan keluar (: - jwd


Dari dalam shell, Anda dapat mengeluarkan perintah berikut

su - $USER

id sekarang akan mendaftar grup baru:

id

252
2017-11-06 15:28



Saya pikir ini adalah pendekatan terbaik dalam banyak kasus, tetapi poster asli memang ingin memperbarui beberapa cangkang dalam sesi layar. Solusi ini harus dilakukan dari masing-masing shell. - Adrian Ratnapala
Trik bagus, sangat bagus! - genpfault
Solusi asli juga hanya akan memperbaiki satu sesi shell di layar. Saya baru saja menguji itu. Alasan solusi ini berhasil adalah karena Anda sedang menelurkan sesi baru yang lengkap daripada mewarisi dari lingkungan asli. - Dror
Ini benar-benar jawaban yang diterima. Trik yang bagus, terima kasih! - dotancohen
Ini mengharuskan Anda mengetik kata sandi, yang mungkin aneh / tidak diinginkan jika Anda mencoba melakukannya dalam banyak sesi. - Legooolas


Trik bagus ini dari Link ini bekerja dengan baik!

exec su -l $USER

Saya pikir saya akan mempostingnya di sini karena setiap kali saya lupa bagaimana melakukan ini, ini adalah tautan pertama yang muncul di google.


115
2018-06-18 16:27



+1 karena tidak menempatkan pengguna dalam subkulit; Anda dapat keluar / keluar seperti biasa dengan ini. Juga, jika NOPASSWD: diatur dalam / etc / sudoers, Anda dapat menggunakannya exec sudo su -l $USER untuk menghindari permintaan kata sandi. - Ivan X
Maklum: Anda akan dimintai kata sandi sudo. Jika Anda salah, terminal Anda akan ditutup. - Tyler Collier
@TylerCollier Ivan melakukan menyebut NOPASSWD: - pepoluan


1. Dapatkan shell dengan grup baru tanpa keluar dan masuk lagi

Jika Anda hanya menambahkan satu grup, saya menggunakan yang berikut:

exec sg <new group name> newgrp `id -gn`

Ini adalah variasi dari trik newgrp dua layer Legooolas, tetapi ini ada dalam satu baris dan tidak mengharuskan Anda memasukkan grup primer secara manual.

sg adalah newgrp tetapi menerima perintah untuk mengeksekusi dengan ID grup baru. Itu exec berarti shell baru menggantikan shell yang ada, jadi Anda tidak perlu "logout" dua kali.

Tidak seperti menggunakan su, Anda tidak perlu mengetikkan kata sandi Anda. Ini juga tidak menyegarkan lingkungan Anda (selain menambahkan grup), sehingga Anda mempertahankan direktori kerja Anda saat ini dll.

2. Melaksanakan perintah di semua jendela layar dalam satu sesi

Itu at perintah di Layar menjalankan perintah di jendela apa pun yang Anda tentukan (perhatikan ini adalah perintah Layar, bukan perintah shell).

Anda dapat menggunakan perintah berikut untuk mengirim perintah ke semua sesi Layar yang ada:

screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"

Perhatikan kebutuhan untuk menghindari backticks untuk mendapatkannya id untuk menjalankan di sesi Layar, dan ^ M untuk mendapatkan Layar untuk menekan 'masukkan' di akhir perintah Anda.

Perhatikan juga layar itu stuff perintah cukup ketik teks perintah atas nama Anda. Oleh karena itu, sesuatu yang aneh dapat terjadi jika salah satu jendela layar memiliki perintah setengah-tertulis pada prompt perintah atau menjalankan aplikasi selain dari shell (misalnya emacs, top). Jika ini masalah, saya punya beberapa ide:

  • Untuk menghilangkan perintah yang ditulis setengah, Anda dapat menambahkan "^ C" ke awal perintah.
  • Untuk menghindari menjalankan perintah di jendela emacs, dll, Anda dapat meminta `at 'untuk menyaring pada judul jendela dll (pada contoh di atas, saya menggunakan" # ", yang cocok dengan semua jendela, tetapi Anda dapat memfilter berdasarkan judul jendela, pengguna , dll).

Untuk menjalankan perintah di jendela tertentu (diidentifikasi oleh nomor jendela), gunakan yang berikut:

screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"

19
2017-12-17 21:33



Mengagumkan satu liner, yang sepertinya tidak memiliki efek samping lain, terima kasih! - Cyril Duchon-Doris


Kamu bisa melakukan ini.

Tambahkan sebanyak mungkin grup yang Anda inginkan usermod -G. Kemudian, sebagai pengguna dengan sesi berlari, jalankan newgrp - hanya dengan argumen '-'.

Ini menginisialisasi ulang id grup ke default, tetapi juga akan mengatur grup sekunder juga. Anda dapat memverifikasi ini dengan menjalankan groups dari sesi saat ini, sebelum dan sesudah usermod dan newgrp.

Ini harus dijalankan dari setiap sesi terbuka - saya tidak tahu banyak tentang layar. Namun, jika memungkinkan untuk melakukan iterasi di semua sesi terbuka dan jalankan newgrpAnda harus baik. Anda tidak perlu khawatir tentang mengetahui kelompok atau ID grup.

Semoga beruntung untuk Anda.


14
2018-01-30 16:17



mencoba xterm dalam sesi X tetapi tidak berhasil - dwery
mencoba di sesi di tmux dan itu tidak bekerja di sana juga - Michael
Mencoba di Amazon linux 2, itu tidak berhasil - Cyril Duchon-Doris
newgrp - memulai proses cangkang baru - Piotr Findeisen


Grup biasanya disebutkan saat login, tidak ada cara yang saya tahu untuk memaksanya melakukan penghitungan ulang grup tanpa logout dan kembali lagi.

Banyak jawaban yang dibolehkan di sini tampaknya menggunakan solusi yang memanggil shell baru dengan lingkungan segar (sama seperti masuk lagi). shell induk dan semua program lain yang terus berjalan umumnya tidak akan menerima keanggotaan grup baru sampai dipanggil kembali dari shell baru biasanya setelah logout bersih dan login.


12
2018-04-25 17:56



Sejujurnya, saya cukup yakin bahwa ini tidak benar - saya telah menemukan cara untuk melakukannya sebelum di kotak Linux. Namun, untuk kehidupan saya, saya tidak ingat apa perintahnya. Jika saya menemukannya, saya akan mempostingnya. Edit: Baru saja menemukannya, saya mempostingnya sebagai jawaban. - lunchmeat317


Menggunakan newgrp perintah memecahkan masalah untuk saya:

newgrp <GroupName>

Entri blog ini memiliki penjelasan rinci.


10
2017-10-07 04:53



Selamat datang di Pengguna Super! Di situs Tanya Jawab ini kami mencoba menyediakan jawaban yang bagus untuk pertanyaan orang-orang posting. Sebagian dari ini termasuk jawaban dalam posting Anda, daripada hanya memberikan tautan ke halaman lain yang mungkin menjawab pertanyaan itu. Harap edit jawaban Anda untuk menyertakan solusi sebenarnya untuk pertanyaan yang diposting. - cascer1
Ini adalah cara terbaik menurut saya dan harus ditandai sebagai jawaban yang diterima baru. - Dakatine


Untuk meringkas:

exec newgrp <newlyaddedgroupname1>
exec newgrp <newlyaddedgroupname2>
...
exec newgrp -

Menggunakan 'exec' berarti mengganti shell yang ada dengan shell baru yang dimulai oleh perintah newgrp (jadi keluar dari shell baru akan mengeluarkan log Anda).

Akhir newgrp - diperlukan untuk memulihkan grup utama normal Anda, sehingga file yang Anda buat nantinya akan memiliki itu sebagai pemilik grup.

Catatan: Pertanyaan poster asli adalah bagaimana membuat grup yang baru ditambahkan terlihat dalam proses yang ada. Itu gpasswd dan usermod perintah tidak mempengaruhi proses yang ada; grup yang baru ditambahkan (atau dihapus!) muncul di (hilang dari) akun Anda, yaitu di file / etc / group dan / etc / gshadow, tetapi izin untuk proses yang ada tidak diubah. Untuk menghapus perizinan Anda harus membunuh proses yang berjalan; newgrp - tidak akan membaca kembali / etc / group dan mereset daftar grup; sebagai gantinya, tampaknya hanya menggunakan kelompok yang sebelumnya terkait dengan proses.


4
2018-02-10 23:21



Ngomong-ngomong, exec su - <username> dapat digunakan untuk mendapatkan shell login baru dengan kumpulan grup, tetapi itu tidak akan berfungsi dalam skrip karena shell baru akan membaca perintah dari terminal. Anda bisa menggunakannya su -c "command ..." <myusername> untuk me-restart skrip Anda, tetapi proses yang dihasilkan tidak memiliki terminal pengendali sehingga kesalahan akan terjadi jika editor layar atau perintah interaktif lainnya dicoba. - jimav
Mengapa ini dibatalkan? Dapatkah seseorang menjelaskan apa yang buruk tentang itu, karena apa yang terjadi pada saya dan saya pikir saya paling suka? - jasonmp85
Gah, saya memilihnya sebelum pengujian. newgrp - tidak tidak ganti "grup utama". Jawaban Patrick Conheady adalah yang terbaik di sini, karena tidak ada garpu atau mengubah kelompok utama. - jasonmp85


Saya memiliki masalah serupa tetapi juga untuk pengguna yang tidak masuk. Restart nscd tidak membantu, tetapi mengeksekusi perintah ini: nscd -i group. Itu harus menginstruksikan nscd (caching daemon) untuk memuat ulang file grup.


1
2017-11-13 16:07