Câu hỏi Tải lại các bài tập nhóm của người dùng Linux mà không cần đăng xuất


Khi gán danh sách nhóm phụ của người dùng bằng:

# usermod -G <grouplist> <user>

có thể bắt buộc gán nhóm này có hiệu lực mà không cần đăng xuất tất cả các phiên chạy không?

Điều này sẽ rất hữu ích trong tình huống mà Màn phiên tồn tại với nhiều shell đang chạy, vì toàn bộ phiên cơ bản cần phải được hủy bỏ để làm cho việc gán nhóm có hiệu lực.

Tôi nghĩ rằng tôi có thể thay đổi nhóm chính của người dùng trong một shell đang chạy bằng cách sử dụng newgrp lệnh - là có một số thay thế mà sẽ làm việc cho các nhóm thứ cấp?

Lý tưởng nhất, tôi muốn một cái gì đó sẽ có hiệu lực trong mỗi vỏ mà không được chạy bằng tay trong mỗi một, nhưng thất bại đó, có thể một số cách buộc màn hình để thực hiện cùng một lệnh trong mỗi.


255
2018-04-17 19:50


gốc


Tôi biết rằng ít nhất đối với một số nhà quản lý cửa sổ / phiên, có thể thực hiện điều này sao cho phiên này chọn nhóm mới và nó có sẵn cho bất kỳ quy trình mới nào được bắt đầu từ các menu, nút bảng điều khiển hoặc bất kỳ thứ gì. Tôi đến đây chỉ cần tìm lại điều đó một lần nữa, vì vậy không thể nói ngay bây giờ làm thế nào để làm điều đó, và nó có thể là cụ thể cho người quản lý cửa sổ. - mc0e


Các câu trả lời:


Rất khủng khiếp, nhưng bạn có thể sử dụng hai lớp newgrp để đạt được điều này cho một nhóm cụ thể:

id -g

... sẽ cung cấp cho bạn ID nhóm chính hiện tại. Chúng tôi sẽ gọi điều này orig_group cho các mục đích của ví dụ này. Sau đó:

newgrp <new group name>

... sẽ chuyển bạn thành nhóm đó làm nhóm chính và thêm nhóm đó vào danh sách các nhóm được trả lại bởi groups hoặc là id -G. Bây giờ, hơn nữa:

newgrp <orig_group>

... sẽ giúp bạn có một vỏ mà bạn có thể thấy nhóm mới và nhóm chính là nhóm gốc.

Điều này thật khủng khiếp và sẽ chỉ giúp bạn thêm một nhóm vào một thời điểm, nhưng nó đã giúp tôi thực hiện một vài lần để thêm các nhóm mà không cần đăng xuất / trong toàn bộ phiên X của tôi (ví dụ: để có cầu chì được thêm làm nhóm cho người dùng để sshfs hoạt động).

Chỉnh sửa: Điều này không yêu cầu bạn nhập mật khẩu của mình, su sẽ.


149
2017-10-10 17:36



Nice trick, tôi thích nó - Simon
Trên Fedora tôi phải làm newgrp $USER thay vì newgrp <orig_group>. Điều đó có nghĩa là tôi không phải tìm ID nhóm chính ban đầu của mình, vì vậy nó thậm chí còn dễ dàng hơn giải pháp này. - Richard Turner
Tôi thấy nó đủ để làm newgrp <new group name>. Đây là Ubuntu 14.04 - Edward Falk
@EdwardFalk đúng, nhưng bạn không (có thể không) muốn rời khỏi nhóm đó với tư cách chính của bạn ... - mimoralea
Lưu ý rằng mỗi newgrp tạo một trình bao mới, vì vậy khi bạn cần thoát hoàn toàn khỏi phiên của mình, bạn cần phải thực hiện "thoát khỏi lối ra thoát" để có được tất cả các lối thoát (: - jwd


Từ bên trong trình bao, bạn có thể đưa ra lệnh sau

su - $USER

id bây giờ sẽ liệt kê nhóm mới:

id

252
2017-11-06 15:28



Tôi nghĩ đây là phương pháp tốt nhất trong nhiều trường hợp, nhưng áp phích ban đầu đã muốn cập nhật nhiều trình bao trong phiên màn hình. Giải pháp này sẽ được thực hiện từ mỗi trình bao. - Adrian Ratnapala
Nice trick, hoạt động tuyệt vời! - genpfault
Giải pháp ban đầu cũng sẽ chỉ khắc phục một phiên trình bao trong màn hình. Tôi vừa thử nghiệm điều đó. Lý do giải pháp này hoạt động là vì bạn đang sinh ra một phiên mới hoàn chỉnh thay vì kế thừa từ môi trường ban đầu. - Dror
Điều này thực sự nên là câu trả lời được chấp nhận. Nice trick, cảm ơn! - dotancohen
Điều này đòi hỏi bạn phải gõ một mật khẩu mặc dù, có thể là khó xử / không mong muốn nếu bạn đang cố gắng làm điều đó trong nhiều phiên. - Legooolas


Nỗ lực tiện lợi này từ liên kết này hoạt động tuyệt vời!

exec su -l $USER

Tôi figured tôi đăng nó ở đây là mỗi khi tôi quên làm thế nào để làm điều này, đây là liên kết đầu tiên mà đi lên trong google.


115
2018-06-18 16:27



1 vì không đưa người dùng vào một vỏ bọc; bạn có thể đăng xuất / thoát như bình thường với điều này. Ngoài ra, nếu NOPASSWD: được đặt trong / etc / sudoers, bạn có thể sử dụng thay vào đó exec sudo su -l $USER để tránh bị nhắc nhập mật khẩu. - Ivan X
Lưu ý: bạn sẽ được yêu cầu nhập mật khẩu sudo. Nếu bạn làm sai, thiết bị đầu cuối của bạn sẽ đóng. - Tyler Collier
@TylerCollier Ivan đã làm đề cập NOPASSWD: - pepoluan


1. Bắt một nhóm với nhóm mới mà không cần đăng xuất và đăng nhập lại

Nếu bạn chỉ thêm một nhóm, tôi đã sử dụng như sau:

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

Đây là một biến thể về thủ thuật newgrp hai lớp của Legooolas, nhưng nó nằm trong một dòng và không yêu cầu bạn phải nhập nhóm chính của mình theo cách thủ công.

sg là newgrp nhưng chấp nhận một lệnh để thực thi với ID nhóm mới. Các exec có nghĩa là trình bao mới sẽ thay thế trình bao hiện có, do đó bạn không cần phải "đăng xuất" hai lần.

Không giống như sử dụng su, bạn không cần phải nhập mật khẩu của mình. Nó cũng không làm mới môi trường của bạn (ngoài việc thêm nhóm), vì vậy bạn giữ lại thư mục làm việc hiện tại của mình, v.v.

2. Thực thi lệnh trong tất cả các cửa sổ Màn hình trong một phiên

Các at Lệnh trong Màn hình chạy lệnh trong bất kỳ cửa sổ nào bạn chỉ định (lưu ý đây là lệnh Màn hình, không phải là lệnh trình bao).

Bạn có thể sử dụng lệnh sau để gửi lệnh tới tất cả các phiên màn hình hiện có:

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

Lưu ý sự cần thiết phải thoát khỏi backticks để có được id để chạy trong phiên Screen, và ^ M để có được Screen để nhấn 'enter' ở cuối lệnh của bạn.

Cũng lưu ý rằng màn hình stuff lệnh chỉ cần nhập văn bản lệnh thay cho bạn. Do đó, có điều gì đó lạ có thể xảy ra nếu một trong các cửa sổ màn hình có lệnh được viết một nửa tại dấu kiểm nhắc lệnh hoặc đang chạy một ứng dụng không phải là trình bao (ví dụ: emacs, trên cùng). Nếu đây là vấn đề, tôi có một số ý tưởng:

  • Để loại bỏ bất kỳ lệnh viết một nửa nào, bạn có thể thêm "^ C" vào đầu lệnh.
  • Để tránh chạy lệnh trong cửa sổ emacs, vv, bạn có thể yêu cầu `at 'lọc trên tiêu đề cửa sổ vv (trong ví dụ trên, tôi sử dụng" # ", khớp với tất cả cửa sổ, nhưng bạn có thể lọc theo tiêu đề cửa sổ, người dùng , v.v.)

Để chạy lệnh trong một cửa sổ cụ thể (được xác định bằng số cửa sổ), hãy sử dụng như sau:

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

19
2017-12-17 21:33



Tuyệt vời một lớp lót, mà dường như không có tác dụng phụ khác, cảm ơn! - Cyril Duchon-Doris


Bạn có thể làm được việc này.

Thêm bao nhiêu nhóm tùy thích usermod -G. Sau đó, khi người dùng có phiên chạy, hãy chạy newgrp - chỉ với đối số '-'.

Việc này khởi tạo lại id nhóm thành mặc định, nhưng nó cũng sẽ thiết lập các nhóm thứ cấp. Bạn có thể xác minh điều này bằng cách chạy groups từ phiên hiện tại, trước và sau usermod và newgrp.

Điều này phải được chạy từ mỗi phiên mở - Tôi không biết nhiều về màn hình. Tuy nhiên, nếu có thể lặp qua tất cả các phiên mở và chạy newgrp, bạn nên tốt. Bạn sẽ không phải lo lắng về việc biết các nhóm hoặc ID nhóm.

Nhưng điêu tôt đẹp nhât se đên vơi bạn.


14
2018-01-30 16:17



đã thử trên một xterm trong một phiên X nhưng nó không hoạt động - dwery
đã thử một phiên trong tmux và nó không hoạt động ở đó - Michael
Đã thử trên Amazon linux 2, nó không hoạt động - Cyril Duchon-Doris
newgrp - bắt đầu quá trình shell mới - Piotr Findeisen


Các nhóm thường được liệt kê khi đăng nhập, không có cách nào tôi biết buộc phải thực hiện lại việc liệt kê nhóm mà không cần đăng xuất và đăng nhập lại.

Nhiều câu trả lời được bỏ phiếu ở đây dường như sử dụng một cách giải quyết yêu cầu một trình bao mới có môi trường mới (giống như đăng nhập lại). shell cha và tất cả các chương trình chạy liên tục khác thường sẽ không nhận được tư cách thành viên nhóm mới cho đến khi được gọi lại từ một shell mới thông thường sau khi đăng xuất sạch và đăng nhập.


12
2018-04-25 17:56



Thành thật mà nói, tôi khá chắc chắn rằng điều này là không đúng sự thật - tôi đã tìm thấy một cách để làm điều đó trước khi trên một hộp Linux. Tuy nhiên, đối với cuộc sống của tôi, tôi không thể nhớ được lệnh đó là gì. Nếu tôi tìm thấy nó, tôi sẽ đăng nó. Chỉnh sửa: Chỉ cần tìm thấy nó, tôi đăng nó như là một câu trả lời. - lunchmeat317


Sử dụng newgrp lệnh giải quyết vấn đề cho tôi:

newgrp <GroupName>

Bài đăng trên blog này đã giải thích chi tiết.


10
2017-10-07 04:53



Chào mừng bạn đến với Super User! Trên trang Hỏi đáp này, chúng tôi cố gắng cung cấp câu trả lời hay cho những câu hỏi mà mọi người đăng. Một phần của điều này là bao gồm câu trả lời trong bài đăng của bạn, thay vì chỉ cần cung cấp liên kết đến một trang khác có thể trả lời câu hỏi. Vui lòng chỉnh sửa câu trả lời của bạn để bao gồm giải pháp thực tế cho câu hỏi được đăng. - cascer1
Đây là cách tốt nhất theo quan điểm của tôi và phải được đánh dấu là câu trả lời được chấp nhận mới. - Dakatine


Tóm tắt:

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

Sử dụng 'exec' có nghĩa là thay thế shell hiện tại bằng shell mới được bắt đầu bởi lệnh newgrp (vì vậy thoát khỏi shell mới đăng xuất bạn ra).

Trận chung kết newgrp - là cần thiết để khôi phục nhóm chính thông thường của bạn, vì vậy các tệp bạn tạo sau này sẽ có nhóm chủ sở hữu nhóm của họ.

Lưu ý: Câu hỏi của người đăng ban đầu là cách làm cho các nhóm mới được thêm vào hiển thị trong các quy trình hiện có. Các gpasswd và usermod lệnh không ảnh hưởng đến các quy trình hiện có; nhóm mới được thêm (hoặc xóa!) xuất hiện trong (biến mất khỏi) tài khoản của bạn, tức là trong các tệp / etc / group và / etc / gshadow, nhưng các quyền cho các quy trình hiện tại không thay đổi. Đến tẩy quyền bạn phải giết bất kỳ quy trình đang chạy nào; newgrp - sẽ không đọc lại / etc / group và thiết lập lại danh sách nhóm; thay vào đó, có vẻ như chỉ sử dụng các nhóm trước đây được liên kết với quy trình.


4
2018-02-10 23:21



Nhân tiện, exec su - <username> có thể được sử dụng để có được một vỏ đăng nhập mới với các nhóm được thiết lập, nhưng điều đó sẽ không hoạt động trong các kịch bản lệnh vì một trình bao mới sẽ đọc các lệnh từ thiết bị đầu cuối. Bạn đã có thể sử dụng su -c "command ..." <myusername> để khởi động lại tập lệnh của bạn, nhưng quá trình kết quả không có thiết bị đầu cuối điều khiển và do đó, sẽ xảy ra lỗi nếu trình chỉnh sửa màn hình hoặc lệnh tương tác khác được thử. - jimav
Tại sao điều này lại được bình chọn? Ai đó có thể giải thích điều gì xấu về nó, bởi vì đó là những gì đã xảy ra với tôi và tôi nghĩ tôi thích nó nhất? - jasonmp85
Gah, tôi đã bỏ phiếu trước khi thử nghiệm. newgrp - làm không phải thay thế "nhóm chính". Câu trả lời của Patrick Conheady là câu trả lời hay nhất ở đây, vì nó không phải là nhánh và cũng không thay đổi nhóm chính. - jasonmp85


Tôi đã có vấn đề tương tự nhưng cũng cho người dùng không đăng nhập. Khởi động lại của nscd không giúp được gì, nhưng thực hiện lệnh này đã làm: nscd -i group. Điều đó sẽ hướng dẫn nscd (caching daemon) để tải lại các tập tin nhóm.


1
2017-11-13 16:07