Bagaimana cara menghapus pengguna dari grup?

343

Perintah mana yang harus saya gunakan untuk menghapus pengguna dari grup di Debian?

Saat menambahkan pengguna ke grup, itu dapat dilakukan dengan:

usermod -a -G group user

Namun, saya tidak dapat menemukan perintah serupa (menerima grup dan pengguna sebagai argumen) untuk menghapus pengguna dari grup. Yang paling dekat yang bisa saya dapatkan adalah:

usermod -G all,existing,groups,except,for,group user

Apakah ada perintah seperti usermod OPTION group userdengan OPSI pilihan untuk membuat usermod(atau program serupa) menghapus pengguna dari grup?

Lekensteyn
sumber
1
Untuk pengguna Fedora yang berakhir di sini, man usermod mengungkapkan di -G opsi komentar bahwa daftar semua grup saat ini ingin dipertahankan ADALAH cara untuk menghapus grup. Tidak ada opsi -R dengan Fedora; Anda harus menggunakan pendekatan Lekensteyn yang ia coba hindari.
Stephen

Jawaban:

404

Anda bisa menggunakan gpasswd:

# gpasswd -d user group

maka konfigurasi grup baru akan diberikan pada login berikutnya, setidaknya pada Debian. Jika pengguna masuk, efek dari perintah tidak segera terlihat.


sumber
9
Terima kasih sempurna! gpasswd -a user groupuntuk menambahkan pengguna ke grup tampaknya juga lebih baik, terutama jika kesalahan ketik telah dibuat dan -aopsi akan dihapus.
Lekensteyn
1
Tidak bekerja untuk saya. Saya mendapat dua pesan: a) Menghapus pengguna dari grup. b) gpasswd: pengguna bukan anggota grup. Setelah itu menjalankan "grup anggota" tidak menunjukkan perubahan.
geoidesic
1
@geoidesic Anda harus keluar dan masuk lagi untuk melihat efeknya
Wasif Hossain
1
Apakah ada cara untuk membuat perubahan berlaku tanpa harus login ulang?
Andy Fusniak
2
@geoidesic Saya mendapatkan kesalahan ini pada Centos 7. Saya menemukan Anda mengerti ini, jika Anda mencoba untuk menghapus pengguna dari grup default mereka. Coba alihkan grup default dengan usermod -g user userlalu cobalah untuk menghapusnya.
PanPipes
175

Pada Debian, adduserpaket berisi deluserprogram yang menghapus pengguna dari grup jika Anda melewatkan keduanya sebagai argumen:

deluser user group

Jika distribusi Anda tidak memiliki adduser, Anda dapat mengedit /etc/groupdan /etc/gshadowsecara manual.

vigr
vigr -s
Gilles
sumber
10
Saya tidak tahu program seperti vigrdan vipw. Sangat berguna seandainya manpage terlalu jauh :)
Lekensteyn
3
Atau, setelah memodifikasi /etc/groupjalankan grpconvuntuk memperbarui /etc/gshadowdaripada mengeditnya.
Cyrille
sudo deluser jenkins admin/ usr / sbin / deluser: Anda tidak boleh menghapus pengguna dari grup utama mereka.
Jonathan
@ JonathanLeaders Setiap pengguna harus berada dalam setidaknya satu grup. Gunakan usermodatau vipwuntuk mengubah grup utama pengguna. Pertanyaan ini tentang kelompok pelengkap.
Gilles
Bagus. Ada juga adduser $user $groupperintah yang lebih sederhana, bukan usermod -x -y -z -....
ygoe
65
usermod -G "" username

menghapus semua grup sekunder / tambahan dari nama pengguna , menjadikannya sebagai anggota hanya grup utama mereka. ini bekerja di Solaris 5.9

pengguna208145
sumber
5
Diuji dalam CentOS 6.4; bekerja.
aggregate1166877
1
Bekerja di Ubuntu 12,04 juga.
aggregate1166877
Dan ini tampaknya menjadi cara terbaik untuk memaksa kelompok sekunder untuk setiap daftar kelompok, tidak termasuk semua kelompok yang tidak terdaftar.
bijak
Diuji dan bekerja di CentOS 7. Terima kasih!
Tricky
14

Ini adalah pendekatan "sekolah lama" ...

Kebanyakan sistem * nix mengelola informasi grup menjadi file teks biasa /etc/group, di mana

  • setiap baris berisi bidang

    • nama grup
    • kata sandi
    • GID, dan
    • Daftar pengguna

    dibatasi oleh :karakter.

  • bidang user_list adalah daftar nama pengguna, dipisahkan dengan koma.

Sekarang anggaplah Anda ingin menghapus pengguna bernama thisuser dari grup bernama thatgroup. Mulailah dengan mencadangkan /etc/group, lalu gunakan editor preferensi Anda dengan hak istimewa untuk mengedit file /etc/group dan menghapus thisuserreferensi dari thatgroupentri baris, misalnya,

baris asli adalah sesuatu seperti ini:

thatgroup:x:1274:someuser,thisuser,anotheruser

setelah pengeditan harus dibiarkan seperti ini:

thatgroup:x:1274:someuser,anotheruser

Seperti dengan semua jawaban lain, ini tidak akan memengaruhi sesi pengguna saat ini, jika ada (yaitu, jika pengguna saat ini masuk). Perubahan akan mulai berlaku saat pengguna masuk berikutnya.

p57
sumber
1
vigrsudah disebutkan untuk mengedit /etc/groupsecara manual. Halaman manual saya mengatakan bahwa nama pengguna dipisahkan oleh koma, bukan oleh titik dua. Boot ulang tidak perlu, Anda hanya perlu login ulang (atau menggunakan newgrp).
Lekensteyn
Untuk membantu pengguna non-Debian yang mencari pantai ini mencari petunjuk ... ini mungkin cukup untuk Debian sesuai dengan cakupan pertanyaan OP, tetapi jika Anda menggunakan ini untuk OS * BSD, Anda perlu memodifikasi file plaintext di sini seperti yang disebutkan, lalu keluarkan pwd_mkdb -p /etc/master.passwd untuk benar-benar menggunakan daftar itu.
danno
3

Anda dapat menggunakan perintah di bawah ini pada distribusi SUSE (dan, tampaknya, tidak ada yang lain ).

usermod -R kelompok  user_name

di mana groupgrup yang ingin Anda hapus pengguna dan user_namepengguna yang ingin Anda hapus dari grup. Sebagai contoh,

usermod -R root imnottheroot
Stavros Fan Koutsouropoulos
sumber
1
Paket apa yang menyediakan biner usermod Anda? Saya meminta untuk mengetahui versi, karena saya dari shadow-utils-4.1.4.3 tidak menyediakan opsi -R.
myroslav
3
Paket shadow saya 4.1.5.1-5 (Arch Linux) memang memiliki -Ropsi, tetapi itu berarti sesuatu yang lain. Itu bukan Linux kurasa.
Lekensteyn
3
Saya tidak yakin ini akan berhasil. Halaman manual mengatakan bahwa -R: "-R, --root CHROOT_DIR Terapkan perubahan pada direktori CHROOT_DIR dan gunakan file konfigurasi dari direktori CHROOT_DIR."
MikeKusold
2
Satu-satunya hal yang berkaitan yang dapat saya temukan adalah halaman manual oracle ini , tetapi itu masih bukan tentang hal yang sama, jadi jawaban ini mungkin harus dihapus.
Kyrias
sudo usermod -R admin jenkinsusermod: chroot path chroot 'admin'
Jonathan
1

Mempertimbangkan:

  • nama pengguna: abc2
  • nama grup: newgroup11

  • Tugas: Menghapus pengguna abc2dari grupnewgroup11

[root@home1 ~]# groups abc2
abc2 : abc2
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# groups abc2
abc2 : abc2 newgroup11
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# usermod -G abc2 abc2
[root@home1 ~]# groups abc2
abc2 : abc2

** Mohon perbaiki saya jika saya salah. **

pengguna baru
sumber
1
Ini "berhasil", tetapi hanya karena Anda memiliki grup sekunder tunggal. usermod -G newgroup11 abc2akan menempatkan Anda dalam grup sekunder newgroup11. Karena grup utama adalah abc2, Anda akan berakhir di kedua grup. usermod -g abc2 abc2mengakibatkan newgroup11dikeluarkan dari kelompok sekunder karena tidak disebutkan lagi. Jadi untuk tiga atau lebih kelompok yang berbeda, metode ini tidak akan berfungsi. Lihat jawaban lain yang melibatkan gpasswdperintah yang lebih baik.
Lekensteyn
1

Anda dapat menghapus pengguna dari grup dengan menjalankan perintah usermod tanpa opsi -a. Contoh, dengan mengeksekusi "usermod -G group1 username" akan menambahkan pengguna ke group1, dan akan menghapusnya dari grup lain mana pun. Ingat, Anda dapat menjaga pengguna dalam berbagai grup dengan mendaftarkan nama grup, dipisahkan dengan koma.

Pembantu
sumber
1
Informasi ini telah disajikan beberapa kali.
Scott
0

Untuk terus menggunakan usermod di distro (seperti Fedora) yang tidak memiliki opsi hapus, di mana user = bob dan group = deletethisgroup, perintahnya adalah:

usermod -G `cat /etc/group |  grep bob | grep -v deletethisgroup | cut -d ':' -f 1 | tr '\n' ',' | sed 's/,$//'` bob

Pipa-pipa (1) mendapatkan semua entri grup milik pengguna, (2) mengambil yang perlu dihapus, (3) mengembalikan kolom pertama (nama grup), menggantikan baris baru dengan koma, dan menghilangkan trailing koma.

Tentu saja, Anda bisa meletakkan semua itu dalam skrip bash yang membuat pengguna dan grup dihapus sebagai parameter. awk dapat digunakan untuk mempersingkat akhir tetapi saya ingin tetap berpegang pada grep, cut, tr dan sed.

Stephen
sumber
Menurut halaman manual ini , gpasswd -d bob deletethisgrouptersedia juga. Adakah alasan mengapa Anda tidak menggunakannya?
Lekensteyn
Tidak semua orang ingin mengatur kata sandi grup. Saya hanya menawarkan solusi menggunakan perintah yang direferensikan oleh pertanyaan pada distro tertentu. di Fedora / RHEL / Centos dengan gpasswd -d pengguna yang dihapus masih dapat bergabung dengan grup jika ia memiliki akses ke kata sandi. Ini benar-benar meningkatkan akses grup sebagai lawan melarangnya.
Stephen
Saya mengerti bahwa utilitas ini dinamai gpasswdkarena terkait erat dengan /etc/passwd, tetapi sebaliknya mengelola grup. Berbeda dengan passwdperintah biasa yang hanya mengendalikan kata sandi, gpasswdjuga dapat digunakan untuk mengelola keanggotaan grup. Kata sandi grup tidak diperlukan jika Anda root atau administrator grup.
Lekensteyn
Apakah Anda membaca manual gpasswd? Untuk Fedora / RHEL / CentOS, jika Anda membaca manual, dinyatakan bahwa perintah "digunakan untuk mengelola / etc / group, dan / etc / gshadow". Sebenarnya tidak berpengaruh pada / etc / passwd. Manual juga menyatakan "Kata sandi grup adalah masalah keamanan inheren karena lebih dari satu orang diizinkan untuk mengetahui kata sandi." Ini sebenarnya tidak mengelola keanggotaan grup, itu membuka grup hingga pengguna APA SAJA dengan kata sandi. Kata sandi grup tidak diperlukan jika Anda sudah menjadi ANGGOTA grup.
Stephen
Terkait erat dalam arti penamaan dan tujuan yang sama, saya tidak menyiratkan bahwa file / etc / passwd sebenarnya dikelola oleh gpasswd. Perhatikan bahwa "halaman manual" di komentar pertama saya mengarah ke halaman manual gpasswd untuk Fedora 13. Menggunakan gpasswd $groupAnda dapat mengatur kata sandi grup yang menyebabkan masalah keamanan yang Anda sebutkan. Namun Anda juga tidak dapat memiliki kata sandi dan menggunakan gpasswd -d $user $groupuntuk menghapus pengguna seperti yang dijelaskan dalam komentar pertama dan jawaban yang diterima. Perhatikan bahwa perintah ini tidak meminta kata sandi grup atau memodifikasi atau mengharuskannya.
Lekensteyn
0

Misalkan username = student dan groupname = riset , maka untuk menghapus studentpengguna dari researchgrup itu perlu dilakukan hal berikut:

gpasswd -d student research
ravi
sumber
Mengapa mengulangi sesuatu, yang ada di sini 6 tahun sebelumnya? Itu ditandai sebagai jawaban yang diterima!
Betlista
-1
pw groupmod "groupname|gid" -d "username|uid"

Solusi jika Anda menggunakan CSH, untuk alasan apa pun.

james
sumber
-1

Untuk menghapus pengguna dari grup gpasswd adalah utilitas terbaik untuk IMO ini.

Contoh Perintah:

sudo gpasswd -d group user

* Info Bantuan *

Usage: gpasswd [option] GROUP

Options:
  -a, --add USER                add USER to GROUP
  -d, --delete USER             remove USER from GROUP
  -h, --help                    display this help message and exit
  -Q, --root CHROOT_DIR         directory to chroot into
  -r, --delete-password         remove the GROUP's password
  -R, --restrict                restrict access to GROUP to its members
  -M, --members USER,...        set the list of members of GROUP
  -A, --administrators ADMIN,...
                                set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.
Brian Cotton
sumber
1
Argumen grup dan pengguna bertukar. Juga, ini persis apa jawaban yang diterima yang diajukan, posting ini tidak terlalu membantu?
Lekensteyn