Làm cách nào để liệt kê tất cả người dùng bằng root?


35

Trên hộp linux, làm cách nào để liệt kê tất cả người dùng có quyền riêng tư gốc (và thậm chí tốt hơn, tất cả người dùng nói chung cùng với họ có root hay không)?


1
Bạn có thể cụ thể hơn về ý nghĩa của "quyền root" không? Ý bạn là người dùng có UID = 0?
Chris S

Người dùng có khả năng làm bất cứ điều gì. Về cơ bản - Tôi cần liệt kê người dùng cùng với các nhóm mà họ là thành viên nếu có thể.
Eric

2
Nếu tôi biết máy tính của bạn ở đâu, tôi có thể đi lên và kéo dây nguồn. Điều đó sẽ đủ điều kiện là "làm bất cứ điều gì" có nghĩa là tôi nằm trong danh sách của bạn. Rafiq đã liệt kê ba điều phổ biến nhất, nhưng có thể có nhiều hơn và chúng tôi biết lưu ý về hệ thống của bạn hoặc cách thiết lập.
Chris S

Câu trả lời:


42

Đừng quên thay đổi mật khẩu root. Nếu bất kỳ người dùng nào có UID 0 ngoài root, họ không nên. Ý kiến ​​tồi. Để kiểm tra:

grep 'x:0:' /etc/passwd

Một lần nữa, bạn không nên làm điều này nhưng để kiểm tra xem người dùng có phải là thành viên của nhóm gốc hay không:

grep root /etc/group

Để xem có ai có thể thực thi các lệnh dưới quyền root hay không, hãy kiểm tra sudoers:

cat /etc/sudoers

Để kiểm tra bit SUID, cho phép các chương trình được thực thi với quyền root:

find / -perm -04000


Nghiêm túc, cái đầu tiên chỉ hoạt động nếu tập tin mật khẩu bóng trong người dùng. Tôi đồng ý rằng gần như luôn luôn là như vậy, những ngày này, nhưng chỉ trong trường hợp, tôi đã thực hiện một công việc nhanh chóng, kiểm tra rõ ràng trường 3.
MadHatter hỗ trợ Monica

4
Đây là một mô hình tốt hơn so với mô hình đầu tiên : grep '[^:]*:[^:]*:0:' /etc/passwd. +1 đặc biệt để kiểm tra SUID.
Tạm dừng cho đến khi có thông báo mới.

33

Để xem ai là UID 0:

getent passwd 0

Để xem ai là trong nhóm root, wheel admadmin:

getent group root wheel adm admin

Để liệt kê tất cả người dùng và các nhóm mà họ là thành viên của:

getent passwd | cut -d : -f 1 | xargs groups

9
Không giống như tất cả các câu trả lời khác dựa vào tập tin / etc / passwd, câu trả lời này, sử dụng getent passwdthay vào đó, thực sự đúng. Chỉ cần đừng quên kiểm tra / etc / sudoers.
mivk

Cảm ơn vì điều đó. Rõ ràng hơn nhiều. Đối với tôi đây là câu trả lời được chấp nhận.
Fiddy Bux

6

Root thuần là id người dùng "0".

Tất cả người dùng trong hệ thống đều ở trong tệp / etc / passwd:

less /etc/passwd

Những người đã root có "0" làm id người dùng, đó là cột thứ 3. Những người có "0" là nhóm (cột thứ 4) cũng có thể có một số đặc quyền gốc.

Tiếp theo, bạn sẽ muốn xem xét các nhóm và xem ai là thành viên bổ sung của nhóm "root" hoặc "wheel" hoặc "admin":

less /etc/group

Người dùng được liệt kê trong các nhóm đó có thể có một số đặc quyền gốc, đặc biệt thông qua lệnh "sudo".

Điều cuối cùng bạn sẽ muốn kiểm tra là cấu hình "sudo" và xem ai được liệt kê là có quyền để chạy lệnh này. Bản thân tệp này đã được ghi lại rõ ràng vì vậy tôi sẽ không sao chép nó ở đây:

less /etc/sudoers

Điều đó bao gồm các lĩnh vực chính của những người có thể có quyền truy cập root.


Xem thêm serverfault.com/questions/205598/ cấp để biết thêm một vài nơi có thể cấp quyền leo thang đặc quyền. (Cụ thể, consolehelperPackageKit.)
mattdm

2
Tất cả người dùng chắc chắn KHÔNG được đảm bảo ở trong / etc / passwd. Họ có thể trong LDAP, ví dụ. Nhưng getent passwdnên liệt kê tất cả người dùng hệ thống (bao gồm cả root), ở định dạng passwd, bất kể cơ sở dữ liệu nơi chúng được xác định.
mivk

3

Để in tất cả người dùng

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

Để chỉ in những người dùng có UID 0, như những người khác đã nói, những người dùng có đặc quyền gốc ẩn:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd

Đó là một lớp lót tốt, nhưng hãy chú ý đến những hạn chế (tôi chắc chắn MadHatter đã nhận thức được điều này rồi) - nó sẽ không kiểm tra các nhóm và nó sẽ không kiểm tra sudoers. Nó sẽ chỉ kiểm tra, như ông nói, ẩn gốc.
Rafiq Maniar

2
Đừng phân tích cú pháp / etc / passwd. Người dùng có thể được định nghĩa ở nơi khác. Sử dụng getent passwdthay thế. Đối với ví dụ "in tất cả người dùng" đầu tiên của bạn, thay vào đó hãy thử điều này:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk

2

Để có danh sách nhanh tất cả người dùng, hãy thử nhấn tab hai lần (để tự động hoàn thành) sau khi nhập passwdlệnh theo sau là khoảng trắng. Điều này làm việc với sulệnh là tốt.

Phải được thực hiện như một người dùng đặc quyền root.


Đây có phải là một tính năng cụ thể zsh? Bash đề nghị chỉ các tệp trên openSUSE.
jgillich

Đã thử nghiệm trên Debian (Bóp) trong bash. Tôi không tin bất cứ ai sẽ chính thức hỗ trợ điều này, nhưng đó là một phím tắt.
Emeraldo

Cập nhật: Điều này không còn hoạt động trong El Capitan. Nó có thể đã được sửa vì lý do bảo mật.
Emeraldo

0

Điều đó làm tôi khó chịu vì không có câu trả lời một lót ... Nếu bạn muốn liệt kê tất cả các tài khoản UID 0 (root), hãy sử dụng như sau:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

Tốt,

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.