Làm cách nào để xóa người dùng khỏi một nhóm?


343

Tôi nên sử dụng lệnh nào để xóa người dùng khỏi một nhóm trong Debian?

Khi thêm người dùng vào một nhóm, có thể thực hiện bằng:

usermod -a -G group user

Tuy nhiên, tôi không thể tìm thấy một lệnh tương tự (chấp nhận một nhóm và người dùng làm đối số) để xóa người dùng khỏi nhóm. Gần nhất tôi có thể nhận được là:

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

Có một lệnh như usermod OPTION group uservới OPTION một tùy chọn để thực hiện usermod(hoặc một chương trình tương tự) loại bỏ người dùng khỏi nhóm không?


1
Đối với người dùng Fedora cuối cùng ở đây, người dùng usermod tiết lộ trong -G ý kiến ​​tùy chọn rằng một danh sách tất cả các nhóm hiện tại muốn được giữ lại IS là cách để xóa một nhóm. Không có tùy chọn -R với Fedora; bạn phải sử dụng phương pháp của Lekensteyn mà anh ta đang cố tránh.
Stephen

Câu trả lời:


404

Bạn có thể sử dụng gpasswd:

# gpasswd -d user group

sau đó cấu hình nhóm mới sẽ được chỉ định ở lần đăng nhập tiếp theo, ít nhất là trên Debian. Nếu người dùng đã đăng nhập, các hiệu ứng của lệnh sẽ không được nhìn thấy ngay lập tức.


9
Cảm ơn hoàn hảo! gpasswd -a user groupđể thêm người dùng vào nhóm dường như cũng đẹp hơn, đặc biệt là nếu một lỗi đánh máy đã được thực hiện và -atùy chọn bị loại bỏ.
Lekensteyn

1
Không làm việc cho tôi. Tôi nhận được hai tin nhắn: a) Xóa người dùng khỏi nhóm. b) gpasswd: người dùng không phải là thành viên của nhóm. Sau đó, chạy "nhóm thành viên" cho thấy không có thay đổi.
địa lý

1
@geoidesic bạn cần đăng xuất và đăng nhập lại để thấy hiệu quả
Wasif Hossain

1
Có cách nào để thay đổi có hiệu lực mà không phải đăng nhập lại không?
Andy Fusniak

2
@geoidesic Tôi đã gặp những lỗi này trên Centos 7. Tôi thấy bạn đã mắc phải lỗi này, nếu bạn đang cố xóa người dùng khỏi nhóm mặc định của họ. Hãy thử chuyển đổi nhóm mặc định usermod -g user usersau đó thử xóa chúng.
PanPipes

175

Trên Debian, addusergói chứa deluserchương trình loại bỏ người dùng khỏi một nhóm nếu bạn chuyển cả hai làm đối số:

deluser user group

Nếu bản phân phối của bạn không có adduser, bạn có thể chỉnh sửa /etc/group/etc/gshadowthủ công.

vigr
vigr -s

10
Tôi không biết các chương trình như vigrvipw. Rất hữu ích trong trường hợp các trang quá xa :)
Lekensteyn

3
Ngoài ra, sau khi sửa đổi /etc/groupchạy grpconvđể cập nhật /etc/gshadowthay vì chỉnh sửa nó.
Cyrille

sudo deluser jenkins admin/ usr / sbin / deluser: Bạn không thể xóa người dùng khỏi nhóm chính của họ.
Jonathan

@JonathanLeaders Mỗi người dùng cần ở trong ít nhất một nhóm. Sử dụng usermodhoặc vipwđể thay đổi nhóm chính của người dùng. Câu hỏi này là về các nhóm bổ sung.
Gilles

Đẹp. Ngoài ra còn có adduser $user $grouplệnh đơn giản hơn thay vì usermod -x -y -z -....
ygoe

65
usermod -G "" username

xóa tất cả các nhóm thứ cấp / bổ sung khỏi tên người dùng , khiến họ chỉ là thành viên của nhóm chính. cái này hoạt động ở Solaris 5.9


5
Đã thử nghiệm trong CentOS 6.4; làm.
tổng

1
Hoạt động trong Ubuntu 12.04, quá.
tổng

Và đây dường như là cách tốt nhất để buộc các nhóm thứ cấp vào bất kỳ danh sách nhóm nào, ngoại trừ tất cả các nhóm chưa niêm yết.
hiền nhân

Đã thử nghiệm và làm việc trong CentOS 7. Cảm ơn!
Tricky

14

Đây là cách tiếp cận trường học cũ của ...

Hầu hết các hệ thống * nix duy trì thông tin nhóm thành một tệp văn bản thuần túy /etc/group, trong đó

  • mỗi dòng chứa các trường

    • tên nhóm
    • mật khẩu
    • GID và
    • Danh sách người dùng

    giới hạn bởi các :nhân vật.

  • trường user_list là danh sách tên người dùng, được phân tách bằng dấu phẩy.

Bây giờ giả sử bạn muốn xóa một người dùng có tên thisuser khỏi một nhóm có tên thatgroup. Bắt đầu bằng cách sao lưu /etc/group, sau đó sử dụng trình chỉnh sửa tùy chọn của bạn với đặc quyền su để chỉnh sửa tệp /etc/group và xóa thisusertham chiếu khỏi thatgroupmục nhập dòng, ví dụ:

dòng gốc là một cái gì đó như thế này:

thatgroup:x:1274:someuser,thisuser,anotheruser

sau khi chỉnh sửa nên để nguyên như thế này:

thatgroup:x:1274:someuser,anotheruser

Như với tất cả các câu trả lời khác, điều này sẽ không ảnh hưởng đến (các) phiên hiện tại của người dùng, nếu có (nghĩa là, nếu người dùng hiện đang đăng nhập). Thay đổi sẽ có hiệu lực vào lần tiếp theo người dùng đăng nhập.


1
vigrđã được đề cập để chỉnh sửa /etc/groupbằng tay. Các trang hướng dẫn của tôi nói rằng tên người dùng được phân tách bằng dấu phẩy chứ không phải dấu hai chấm. Việc khởi động lại là không cần thiết, bạn chỉ cần đăng nhập lại (hoặc sử dụng newgrp).
Lekensteyn

Để hỗ trợ bất kỳ người dùng không phải Debian nào chạm vào các bờ tìm kiếm manh mối này ... điều này có thể đủ cho Debian theo phạm vi câu hỏi của OP, nhưng nếu bạn đang sử dụng điều này cho * BSD OS, bạn sẽ cần sửa đổi tệp văn bản gốc ở đây như đã đề cập, sau đó phát hành pwd_mkdb -p /etc/master.passwd để thực sự đưa danh sách đó vào sử dụng.
danno

3

Bạn có thể sử dụng lệnh dưới đây trên các bản phân phối SUSE (và rõ ràng là không có ai khác ).

usermod -R nhóm  user_name

đâu grouplà nhóm mà bạn muốn xóa người dùng khỏi và user_namengười dùng mà bạn muốn xóa khỏi nhóm. Ví dụ,

usermod -R root imnottheroot

1
Gói nào cung cấp nhị phân usermod của bạn? Tôi đang yêu cầu tìm hiểu phiên bản, vì tôi từ Shadow-utils-4.1.4.3 không cung cấp tùy chọn -R.
myroslav

3
Gói bóng 4.1.5.1-5 của tôi (Arch Linux) không có -Rtùy chọn, nhưng điều đó có nghĩa là một cái gì đó khác. Tôi đoán không phải là Linux.
Lekensteyn

3
Tôi không chắc điều này sẽ hoạt động. Trang này đang nói rằng -R: "-R, --root CHROOT_DIR Áp dụng các thay đổi trong thư mục CHROOT_DIR và sử dụng các tệp cấu hình từ thư mục CHROOT_DIR."
MikeKusold

2
Những điều duy nhất loại liên quan tôi có thể tìm được này oracle manpage, nhưng điều đó vẫn không phải là về những điều tương tự, vì vậy câu trả lời này có lẽ nên được gỡ bỏ.
kyrias

sudo usermod -R admin jenkinsusermod: đường dẫn chroot không hợp lệ 'admin'
Jonathan

1

Xem xét:

  • tên tài khoản: abc2
  • tên nhóm: newgroup11

  • Nhiệm vụ: Xóa người dùng abc2khỏi nhómnewgroup11

[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

** Vui lòng sửa tôi nếu tôi sai. **


1
Điều này "hoạt động", nhưng chỉ vì bạn có một nhóm thứ cấp duy nhất. usermod -G newgroup11 abc2sẽ đưa bạn vào nhóm thứ cấp newgroup11. Vì nhóm chính là abc2, bạn sẽ kết thúc ở cả hai nhóm. usermod -g abc2 abc2kết quả newgroup11là bị loại khỏi các nhóm thứ cấp nó không được đề cập nữa. Vì vậy, đối với ba hoặc nhiều nhóm khác nhau, phương pháp này sẽ không hiệu quả. Xem các câu trả lời khác liên quan đến gpasswdmột lệnh tốt hơn.
Lekensteyn

1

Bạn có thể xóa người dùng khỏi nhóm bằng cách thực hiện tùy chọn lệnh usermod whithout -a. Ví dụ, bằng cách thực hiện "tên người dùng usermod -G nhóm1" sẽ thêm người dùng vào nhóm1 và sẽ xóa nó khỏi bất kỳ nhóm nào khác. Hãy nhớ rằng, bạn có thể giữ người dùng trong các nhóm khác nhau bằng cách liệt kê tên của nhóm, được phân tách bằng dấu phẩy.


1
Thông tin này đã được trình bày nhiều lần rồi.
Scott

0

Để tiếp tục sử dụng usermod trong một bản phân phối (như Fedora) không có tùy chọn xóa, trong đó user = bob và group = deletethisgroup, lệnh sẽ là:

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

Các đường ống (1) có được tất cả các mục nhập của người dùng thuộc về, (2) lấy ra một mục cần xóa, (3) trả về cột đầu tiên (tên nhóm), thay thế dòng mới bằng dấu phẩy và xóa dấu phẩy.

Tất nhiên, bạn có thể đặt tất cả những thứ đó trong một tập lệnh bash sẽ đưa người dùng và nhóm bị xóa làm tham số. awk có thể được sử dụng để rút ngắn kết thúc nhưng tôi muốn bám vào grep, cut, tr và sed.


Theo trang người đàn ông này , gpasswd -d bob deletethisgroupcó sẵn quá. Bất kỳ lý do tại sao bạn không sử dụng nó?
Lekensteyn

Không phải ai cũng muốn thiết lập mật khẩu nhóm. Tôi chỉ đưa ra một giải pháp bằng cách sử dụng lệnh được tham chiếu bởi câu hỏi trên một bản phân phối cụ thể. trong Fedora / RHEL / Centos với gpasswd -d, người dùng đã xóa vẫn có thể tham gia nhóm nếu anh ta có quyền truy cập vào mật khẩu. Nó thực sự làm tăng quyền truy cập nhóm thay vì không cho phép nó.
Stephen

Tôi hiểu rằng tiện ích được đặt tên gpasswdvì nó liên quan chặt chẽ với nhau /etc/passwd, nhưng thay vào đó quản lý các nhóm. Không giống như passwdlệnh đơn giản chỉ kiểm soát mật khẩu, gpasswdcũng có thể được sử dụng để quản lý thành viên của một nhóm. Mật khẩu nhóm không bắt buộc nếu bạn là root hoặc quản trị viên nhóm.
Lekensteyn

Bạn đã đọc hướng dẫn gpasswd? Đối với Fedora / RHEL / CentOS, nếu bạn đọc hướng dẫn, có thông báo rằng lệnh "được sử dụng để quản trị / etc / group và / etc / gshadow". Nó thực sự không có hiệu lực trên / etc / passwd. Hướng dẫn cũng nêu rõ "Mật khẩu nhóm là một vấn đề bảo mật cố hữu vì có nhiều người được phép biết mật khẩu." Nó không thực sự quản lý thành viên của một nhóm, nó mở ra nhóm cho bất kỳ người dùng nào với mật khẩu. Không cần mật khẩu nhóm nếu bạn đã là THÀNH VIÊN của nhóm.
Stephen

Liên quan chặt chẽ theo nghĩa đặt tên và mục đích tương tự, tôi không ngụ ý rằng tập tin / etc / passwd thực sự được quản lý bởi gpasswd. Lưu ý rằng "trang man" trong bình luận đầu tiên của tôi trỏ đến trang hướng dẫn gpasswd cho Fedora 13. Sử dụng gpasswd $groupbạn có thể đặt mật khẩu nhóm gây ra sự cố bảo mật mà bạn đã đề cập. Tuy nhiên, bạn cũng không thể có mật khẩu và sử dụng gpasswd -d $user $groupđể xóa người dùng như được mô tả trong nhận xét đầu tiên và câu trả lời được chấp nhận. Lưu ý rằng lệnh này không nhắc nhập mật khẩu nhóm và cũng không sửa đổi hoặc yêu cầu nó.
Lekensteyn

0

Giả sử tên người dùng = sinh viêntên nhóm = nghiên cứu , do đó, để xóa studentngười dùng khỏi researchnhóm, cần thực hiện như sau:

gpasswd -d student research

Tại sao để lặp lại một cái gì đó, đó là ở đây 6 năm trước? Nó được đánh dấu là câu trả lời được chấp nhận!
Betlista

-1
pw groupmod "groupname|gid" -d "username|uid"

Một giải pháp nếu bạn đang sử dụng CSH, vì bất kỳ lý do gì.


-1

Để xóa người dùng khỏi nhóm gpasswd là tiện ích tốt nhất cho IMO này.

Ví dụ lệnh:

sudo gpasswd -d group user

* Thông tin trợ giúp *

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.

1
Các đối số nhóm và người dùng được hoán đổi. Ngoài ra, đây chính xác là những gì câu trả lời được chấp nhận đề xuất, bài đăng này không thực sự hữu ích?
Lekensteyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.