Tôi muốn một lệnh để liệt kê tất cả người dùng có quyền root tức là sudo?
Giả sử tôi là một người dùng sudoer. Làm thế nào tôi có thể biết tất cả người dùng sudoer khác?
Tôi muốn một lệnh để liệt kê tất cả người dùng có quyền root tức là sudo?
Giả sử tôi là một người dùng sudoer. Làm thế nào tôi có thể biết tất cả người dùng sudoer khác?
Câu trả lời:
Nếu bạn chỉ cần liệt kê các sudoers được liệt kê trong sudonhóm, tôi nghĩ rằng cách tốt nhất để làm điều đó là chạy lệnh này ( nên nhẹ hơn bất kỳ lệnh nào khác trong câu trả lời này):
grep -Po '^sudo.+:\K.*$' /etc/group
Cũng như được đề xuất trong các nhận xét của muru, định dạng của các mục trong /etc/groupcó thể dễ dàng xử lý bằng cách cut:
grep '^sudo:.*$' /etc/group | cut -d: -f4
Ngoài ra, một lần nữa như được đề xuất trong các bình luận của muru, người ta có thể sử dụng getentthay cho grep:
getent group sudo | cut -d: -f4
Bất kỳ lệnh nào trong số này sẽ in tất cả người dùng được liệt kê trong sudonhóm /etc/group(nếu có).
Sự cố lệnh số 1:
grep: In tất cả các dòng khớp với biểu thức chính quy trong tệp-P: làm cho grepphù hợp với biểu thức kiểu Perlo: làm cho grepchỉ in chuỗi phù hợp'^sudo.+:\K.*$': làm cho grepkhớp với biểu thức chính giữa các dấu ngoặc képSự cố Regex # 1:
^: bắt đầu của dòng.+: một hoặc nhiều ký tự\K: loại bỏ trận đấu trước.*: không hoặc nhiều ký tự$: kết thúc dòngSự cố lệnh số 2:
grep: In tất cả các dòng khớp với biểu thức chính quy trong tệp'^sudo.+:\K.*$': làm cho grepkhớp với biểu thức chính giữa các dấu ngoặc képcut: Chỉ in một phần được chỉ định của mỗi dòng trong một tệp-d:: làm cho cutdiễn giải :như một dấu phân cách trường-f4: cutchỉ in trường thứ tưSự cố Regex # 2:
^: bắt đầu của dòng.*: không hoặc nhiều ký tự$: kết thúc dònggetent group sudo | cut -d: -f4hoặc sử dụng awk, nhưng bằng cách nào đó hãy nhớ rằng nhóm và mật khẩu có các định dạng cố định, với các dấu phân cách.
getent group- bạn hoàn toàn không cần grep. getent group foolà như thế grep foo /etc/group, nhưng có khả năng hơn.
getent, có ai nghĩ về cách tính toán grepvà getentso sánh không? Nó sẽ nhẹ hơn để chạy getent?
sudonhóm. Một số unix có các nhóm khác như wheel. Câu trả lời của @muru sẽ bao gồm tất cả các sudoers cho dù họ thuộc nhóm nào.
Như đã nêu ở đây, tôi xem xét cách đơn giản nhất để khám phá với -l& -Ucác tùy chọn cùng nhau, chỉ cần nhập usersnó sẽ liệt kê ví dụ: Johnsau đó:
Nếu người dùng có sudoquyền truy cập, nó sẽ in mức sudotruy cập cho người dùng cụ thể đó:
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
Nếu người dùng không có quyền truy cập sudo, nó sẽ in rằng người dùng không được phép chạy sudotrên localhost:
sudo -l -U John
User John is not allowed to run sudo on localhost.
for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done. hack nhanh không có gì đảm bảo :)
"%domain admins@mycompany.intra" ALL=(ALL) ALLthì nó sẽ hoạt động. Bạn đã tiết kiệm cho tôi rất nhiều thời gian, vì tôi không biết điều này cũng hiệu quả với người dùng không phải là người địa phương.
Như đã được nêu, câu trả lời có thể được tìm thấy trên Unix & Linux Stack Exchange :
Điều này cho thấy người dùng "saml" là thành viên của nhóm bánh xe.
$ getent group wheel wheel:x:10:saml
Sự khác biệt duy nhất là nhóm trong Ubuntu không phải wheel, nhưng sudo(hoặc admintrong các phiên bản cũ hơn của Ubuntu). Vì vậy, lệnh trở thành:
getent group sudo
geten groupvà tôi thấy rất nhiều con số khác nhau. Câu hỏi ban đầu của tôi là, làm thế nào để tìm hiểu xem người dùng có phải là người dùng hệ thống (được tạo bằng useradd -r)
Mở rộng trong sudo -l -Ubài kiểm tra, người ta có thể sử dụng getent passwdđể xác định người dùng có thể sử dụng sudo. Việc sử dụng getentcho phép chúng tôi truy cập người dùng có thể không có trong passwdtệp, chẳng hạn như người dùng LDAP:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U không trả về giá trị thoát khác không mà chúng ta có thể tận dụng, vì vậy chúng tôi được giảm xuống để lấy đầu ra.
sudo.
Trên hầu hết các hệ thống giống Unix, có lệnh sudo và có tệp cấu hình sudo; chạy visudo như root:
:~$ sudo bash
hoặc là
:~$ su
:~# visudo
sẽ cho phép quản trị viên kiểm tra và sửa đổi các đặc quyền của các nhóm có thể sử dụng lệnh sudo.
Trên các hệ thống giống như Unix dựa trên Debian, như Ubuntu, các nhóm 4 và 27 thường có quyền truy cập vào các đặc quyền sudo.
Nhóm 4 là nhóm quản trị viên (adm) và nhóm 27 là sudo gid.
Để xem những gì người dùng hiện được gán cho các nhóm này, hãy gửi tệp / etc / group như bên dưới:
:~$ cat /etc/group
Một đầu ra mẫu, trên Ubuntu (nhưng không dựa trên Redhat, dựa trên Oracle Solaris / Solaris hoặc các hệ thống dựa trên BSD) sẽ mang lại điều này:
adm:x:4:youruser
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:youruser,mybrother
floppy:x:25:
tape:x:26:
sudo:x:27:youruser,mybrother
Như chúng ta có thể nói, youruser là quản trị viên của hệ thống và là thành viên của nhóm 4 (adm). Nhưng youruser và mybrother đều là thành viên của nhóm 27, đó là số gid (nhận dạng nhóm) của nhóm sudo. Vì vậy, mybrother cũng có thể đạt được quyền root (siêu người dùng).
Nhiều hệ thống linux như Fedora và Slackware, kết hợp nhóm bánh xe gid = 10. Cho phép đặc quyền của quản trị viên khi lệnh sudo được áp dụng. Trên các hệ thống dựa trên BSD (ví dụ FreeBSD), người dùng root là thành viên của nhóm bánh xe là gid 0.
Cũng bằng cách sử dụng lệnh id, bất kỳ người dùng nào cũng có thể tìm thấy thông tin nhóm của một người dùng khác đã biết đến hệ thống.
Ví dụ:
:~$ id mybrother
Sản lượng mẫu
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
Lệnh này trả về danh sách người dùng có quyền sudo:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd
Đầu ra là (ví dụ):
<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker
Nếu chỉ có tên người dùng được hiển thị, thì lệnh này:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
Chỉ huy:
cat /etc/group | grep sudo
Đầu ra:
sudo:x:27:Tom,Stacy
Tom, Stacy là những người dùng có đặc quyền sudo.
cat .
Tôi đã bối rối về cách vagrantngười dùng có thể sử dụng sudongay cả khi không được đề cập đến /etc/sudoerscũng /etc/groupnhư không được tìm thấy getent.
Hóa ra sudocũng đọc các mục từ tất cả các tập tin dưới/etc/sudoers.d/ . Vì vậy, nếu bạn chưa xem qua thư mục đó, bạn có thể không nhận ra có bao nhiêu người dùng thực sự có sudoquyền truy cập.
Loại sudotruy cập này có thể được phát hiện bằng câu trả lời của JoKeR bằng cách sử dụng sudo -l -U vagrantnhưng không bị phát hiện bởi bất kỳ câu trả lời nào khác ở đây mà tất cả đều dựa vào getenthoặc /etc/group.