Saat menetapkan daftar grup sekunder pengguna menggunakan:
# usermod -G <grouplist> <user>
apakah mungkin untuk memaksa tugas grup ini untuk berlaku tanpa keluar semua sesi berjalan?
Ini akan sangat berguna dalam situasi di mana sesi Layar 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 beberapa alternatif yang akan bekerja untuk grup sekunder?
Idealnya, saya ingin sesuatu yang akan berlaku di setiap shell tanpa dijalankan secara manual di setiap shell, tetapi gagal itu, mungkin beberapa cara memaksa Screen untuk menjalankan perintah yang sama di masing-masing.
linux
shell
debian
permissions
gnu-screen
Simon
sumber
sumber
Jawaban:
Peretasan yang mengerikan, tetapi Anda bisa menggunakan dua lapisan
newgrp
untuk mencapai ini untuk grup tertentu:... akan memberi Anda ID grup utama saat ini. Kami akan menyebutnya
orig_group
untuk tujuan contoh ini. Kemudian:... akan mengalihkan Anda ke grup itu sebagai yang utama dan menambahkannya ke daftar grup yang dikembalikan oleh
groups
atauid -G
. Sekarang, selanjutnya:... akan memberi Anda sebuah 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 itu telah membantu saya beberapa kali untuk mendapatkan grup ditambahkan tanpa keluar / dalam seluruh sesi X saya (misalnya untuk mendapatkan sekering ditambahkan sebagai grup ke pengguna) sehingga sshfs akan bekerja).
Sunting: Ini tidak mengharuskan Anda untuk mengetik kata sandi Anda, yang
su
akan.sumber
newgrp $USER
bukannewgrp <orig_group>
. Itu berarti saya tidak perlu menemukan ID grup primer asli saya, jadi itu bahkan lebih mudah daripada solusi ini.newgrp <new group name>
. Ini adalah Ubuntu 14.04newgrp
membuat shell baru, jadi ketika Anda harus keluar sepenuhnya dari sesi Anda, Anda harus melakukan "keluar dari pintu keluar" untuk mendapatkan semua jalan keluar (:Dari dalam shell, Anda dapat mengeluarkan perintah berikut
id sekarang akan mencantumkan grup baru:
sumber
Trik bagus dari tautan ini sangat bagus!
Saya pikir saya akan mempostingnya di sini karena setiap kali saya lupa bagaimana melakukan ini, ini adalah tautan pertama yang muncul di google.
sumber
exec sudo su -l $USER
untuk menghindari diminta kata sandi.NOPASSWD:
1. Mendapatkan shell dengan grup baru tanpa keluar dan masuk lagi
Jika Anda hanya menambahkan satu grup, saya menggunakan yang berikut:
Ini adalah variasi dari trik newgrp dua layer Legooolas, tetapi itu dalam satu baris dan tidak mengharuskan Anda untuk masuk secara manual ke grup utama Anda.
sg
adalah newgrp tetapi menerima perintah untuk dieksekusi dengan ID grup baru. Theexec
berarti bahwa shell baru menggantikan shell yang ada, sehingga Anda tidak perlu "logout" dua kali.Tidak seperti menggunakan su, Anda tidak perlu mengetikkan kata sandi Anda. Itu juga tidak menyegarkan lingkungan Anda (selain menambahkan grup), jadi Anda mempertahankan direktori kerja Anda saat ini dll.
2. Menjalankan perintah di semua Layar jendela dalam satu sesi
The
at
perintah dalam Layar menjalankan perintah di windows apa pun yang Anda tentukan (catatan ini adalah perintah Screen, bukan perintah shell).Anda dapat menggunakan perintah berikut untuk mengirim perintah ke semua sesi Layar yang ada:
Catat kebutuhan untuk keluar dari backtick agar
id
dapat dijalankan di sesi Screen, dan ^ M untuk mendapatkan Screen untuk menekan 'enter' di akhir perintah Anda.Perhatikan juga bahwa
stuff
perintah layar 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 shell (misalnya emacs, atas). Jika ini masalah, saya punya beberapa ide:Untuk menjalankan perintah di jendela tertentu (diidentifikasi dengan nomor jendela), gunakan yang berikut ini:
sumber
Menggunakan
newgrp
perintah memecahkan masalah bagi saya:Posting blog ini memiliki penjelasan rinci.
sumber
Grup biasanya dicacah saat login, tidak ada cara saya tahu untuk memaksanya melakukan enumerasi grup tanpa logout dan kembali lagi.
Banyak jawaban yang dipilih di sini tampaknya menggunakan solusi yang memanggil shell baru dengan lingkungan baru (sama seperti masuk lagi). shell induk dan semua program lain yang terus berjalan umumnya tidak akan menerima keanggotaan grup baru sampai diminta kembali dari shell baru biasanya setelah logout bersih dan login.
sumber
Kamu bisa melakukan ini.
Tambahkan grup sebanyak yang Anda inginkan
usermod -G
. Kemudian, sebagai pengguna dengan sesi berlari, jalankannewgrp -
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 sesudahusermod
dannewgrp
.Ini harus dijalankan dari setiap sesi terbuka - Saya tidak tahu banyak tentang layar. Namun, jika mungkin untuk mengulangi semua sesi terbuka dan menjalankan
newgrp
, Anda harus baik. Anda tidak perlu khawatir tentang mengetahui grup atau ID grup.Semoga beruntung untukmu.
sumber
newgrp -
memulai proses shell baruUntuk meringkas:
Menggunakan 'exec' berarti mengganti shell yang ada dengan shell baru yang dimulai dengan perintah newgrp (jadi keluar dari shell baru, log Anda keluar).
Final
newgrp -
diperlukan untuk mengembalikan grup primer normal Anda, sehingga file yang Anda buat nanti akan memilikinya sebagai pemilik grup mereka.Catatan: Pertanyaan poster asli adalah bagaimana membuat grup yang baru ditambahkan terlihat dalam proses yang ada. The
gpasswd
danusermod
perintah tidak mempengaruhi proses yang ada; grup yang baru ditambahkan (atau dihapus!) muncul di (menghilang dari) akun Anda, yaitu di file / etc / group dan / etc / gshadow, tetapi izin untuk proses yang ada tidak berubah. Untuk menghapus izin Anda harus mematikan proses yang sedang berjalan;newgrp -
tidak akan membaca ulang / etc / group dan mengatur ulang daftar grup; alih-alih, sepertinya hanya menggunakan grup yang sebelumnya terkait dengan proses.sumber
exec su - <username>
dapat digunakan untuk mendapatkan shell login baru dengan kelompok yang ditetapkan, tetapi itu tidak akan berfungsi dalam skrip karena shell baru akan membaca perintah dari terminal. Anda bisa menggunakansu -c "command ..." <myusername>
untuk me-restart skrip Anda, tetapi proses yang dihasilkan tidak memiliki terminal pengendali dan sehingga kesalahan akan terjadi jika editor layar atau perintah interaktif lainnya dicoba.newgrp -
tidak tidak menggantikan "kelompok utama". Jawaban Patrick Conheady adalah yang terbaik di sini, karena ia tidak bercabang atau mengubah kelompok utama.Saya memiliki masalah serupa tetapi juga untuk pengguna yang tidak masuk. Restart dari nscd tidak membantu, tapi mengeksekusi perintah ini melakukan:
nscd -i group
. Itu harus menginstruksikan nscd (caching daemon) untuk memuat ulang file grup.sumber
Saya tidak bisa menjalankan perintah newgrp. Saya tidak yakin apakah ini tergantung pada / etc / sudoers, tetapi saya biasanya harus mengetikkan kata sandi untuk sudo, dan ini berfungsi tanpa memerlukan kata sandi saya:
sumber
Ini berguna jika Anda punya
sudo
dan itu bisa menyelamatkan Anda dari memasukkan kata sandi sekali lagi dalam beberapa kasus:sumber