Tôi đã thêm người dùng vào một nhóm, nhưng quyền của nhóm trên các tệp vẫn không có hiệu lực


17

Tôi đã thay đổi quyền của một tệp ( chmod g+w testfile) và chạy ls -l testfilecho:

-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile

Sau đó tôi đã thêm một người dùng vào nhóm đó (" / etc / group " có user1:x:1000:user2dòng), nhưng không thể chỉnh sửa tệp đó là user2. Tại sao cái này rất?


Câu trả lời:


28

user2 cần phải đăng xuất và đăng nhập lại. Quyền của nhóm hoạt động theo cách này:

  • Khi bạn đăng nhập, các quy trình của bạn sẽ có thành viên nhóm trong nhóm chính của bạn được đề cập /etc/passwd, cộng với tất cả các nhóm mà người dùng của bạn được đề cập đến /etc/group. (Chính xác hơn, các pw_gidlĩnh vực trong getpw(your_uid), cộng với tất cả các nhóm trong đó người sử dụng của bạn là một thành viên rõ ràng . Ngoài /etc/passwd/etc/group, thông tin có thể đến từ các loại cơ sở dữ liệu người dùng như NIS hoặc LDAP.) Các nhóm chính trở thành của quá trình ID nhóm hiệu quả và các nhóm khác trở thành ID nhóm bổ sung của nó .
  • Khi một quy trình thực hiện một thao tác yêu cầu thành viên trong một nhóm nhất định, chẳng hạn như truy cập tệp , nhóm đó phải là ID nhóm hiệu quả hoặc một trong các ID nhóm bổ sung của quy trình.

Như bạn có thể thấy, thay đổi thành viên nhóm của người dùng chỉ có hiệu lực khi người dùng đăng nhập. Đối với các quy trình đang chạy, đã quá muộn. Vì vậy, người dùng cần phải đăng xuất và đăng nhập lại. Nếu quá nhiều rắc rối, người dùng có thể đăng nhập vào một phiên riêng (ví dụ: trên một bảng điều khiển khác hoặc với ssh localhost).

Trong giới hạn, một quy trình chỉ có thể mất đặc quyền (ID người dùng, ID nhóm, khả năng). Hạt nhân bắt đầu initquá trình (quá trình đầu tiên sau khi khởi động) chạy với quyền root và mọi quá trình cuối cùng được truyền xuống từ quá trình đó¹. Các loginquá trình (hay sshd, hoặc một phần của quản lý máy tính để bàn của bạn mà các bản ghi bạn trong) vẫn chạy như root. Một phần công việc của nó là bỏ các đặc quyền gốc và chuyển sang người dùng và các nhóm thích hợp.

Có một ngoại lệ duy nhất: thực hiện chương trình setuid hoặc setgid . Chương trình đó nhận được các quyền bổ sung: nó có thể chọn hành động theo các tập hợp con khác nhau của tư cách thành viên của quy trình mẹ cộng với tư cách thành viên bổ sung trong người dùng hoặc nhóm sở hữu tập tin thực thi setxid. Cụ thể, một chương trình root setuid có quyền root, do đó có thể làm mọi thứ²; đây là cách các chương trình thích susudocó thể thực hiện công việc của họ.

¹ thỉnh thoảng có những thủ tục đó không bắt nguồn từ init (initrd, udev) nhưng nguyên tắc là như nhau: bắt đầu như là người chủ và đặc quyền mất theo thời gian.
² Chặn các khung bảo mật đa cấp như SELinux.


1
Lưu ý rằng nếu bạn đang sử dụng GUI trên máy tính để bàn, chỉ cần đăng xuất và đăng nhập lại vào cửa sổ đầu cuối sẽ không đặt lại thành viên nhóm. Tôi đã gặp vấn đề này và tôi cũng cần phải đăng xuất khỏi phiên GUI của mình:
dùng394

3
@ user394 Đăng xuất và đăng nhập lại thiết lập lại thành viên nhóm. Nếu bạn chỉ đóng một cửa sổ đầu cuối, bạn sẽ không đăng xuất.
Gilles 'SO- ngừng trở nên xấu xa'

10

Bạn có thể cần phải đăng xuất và đăng nhập user2 (hoặc chỉ cần thử đăng nhập để tạo phiên đăng nhập mới). Kiểm tra đầu ra của id --groupsđể hiển thị id nhóm số cho người dùng.


1

sudo su $(whoami)

Về cơ bản, cách giải quyết tương tự ssh localhost, nhưng có thể sử dụng mà không cần cài đặt máy chủ ssh.

Miễn là bạn có root. Nhưng nếu bạn vừa thêm một nhóm mới và thay đổi quyền, bạn có thể làm được.


Mặc dù đây là một câu trả lời ít thông tin hơn nhiều so với câu trả lời được chấp nhận, đôi khi bạn muốn biết cách chế tạo đồng hồ và đôi khi bạn chỉ muốn biết mấy giờ rồi. Câu trả lời này đã giúp tôi với một mẹo có thể hoạt động cho đến khi tôi đăng xuất và đăng nhập lại. Cảm ơn.
Benjamin Staton

0

Có một trường hợp khi người dùng đăng xuất không giúp đỡ - nếu bạn đang sử dụng chỉ thị ssh ControlMaster cho máy chủ. Nếu bạn thêm tài khoản của mình vào một nhóm, đăng xuất và đăng nhập lại trong cùng một kết nối ControlMaster, phiên sẽ vẫn hiển thị cho bạn không có tư cách thành viên mới. Bạn sẽ buộc phải ngắt kết nối Master với

ssh -O exit hostname

trước khi đăng nhập lại.

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.