Một lệnh để liệt kê tất cả người dùng? Và làm thế nào để thêm, xóa, sửa đổi người dùng?


856

Tôi cần một lệnh để liệt kê tất cả người dùng trong thiết bị đầu cuối. Và làm thế nào để thêm, xóa, sửa đổi người dùng từ thiết bị đầu cuối.

Điều đó có thể giúp quản trị tài khoản của bạn một cách dễ dàng bằng thiết bị đầu cuối.


3
câu trả lời của sedsed 's/:.*//' /etc/passwd
Avinash Raj

2
danh sách người dùng:awk -F: '{ print $1 }' /etc/passwd
saviour123

Câu trả lời:


1143

Liệt kê

Để liệt kê tất cả người dùng cục bộ, bạn có thể sử dụng:

cut -d: -f1 /etc/passwd

Để liệt kê tất cả người dùng có khả năng xác thực (theo một cách nào đó), bao gồm cả không phải cục bộ, hãy xem câu trả lời này .

Một số lệnh quản lý người dùng hữu ích hơn (cũng giới hạn đối với người dùng cục bộ ):

Thêm

Để thêm người dùng mới, bạn có thể sử dụng:

sudo adduser new_username

hoặc là:

sudo useradd new_username

Xem thêm: Sự khác biệt giữa adduser và useradd là gì?

Để xóa / xóa

Để xóa / xóa người dùng, trước tiên bạn có thể sử dụng:

sudo userdel username

Sau đó, bạn có thể muốn xóa thư mục chính cho tài khoản người dùng đã xóa:

sudo rm -r / nhà / tên người dùng

Vui lòng sử dụng cẩn thận các lệnh trên!

Để sửa đổi

Để sửa đổi tên người dùng của người dùng:

usermod -l new_username old_username

Để thay đổi mật khẩu cho người dùng:

sudo passwd username

Để thay đổi trình bao cho người dùng:

sudo chsh username

Để thay đổi chi tiết cho người dùng (ví dụ tên thật):

sudo chfn username

Để thêm người dùng vào sudonhóm:

adduser username sudo

hoặc là

usermod -aG sudo username

Và, tất nhiên, xem thêm: man adduser, man useradd, man userdel... và vân vân.


12
Radu quên đề cập đến sudo chfn <username>những thay đổi chi tiết người dùng (ví dụ tên thật). Tôi đã cố gắng thêm điều này như một bình luận, nhưng tôi đã gặp lỗi khi nói với tôi rằng tôi phải có danh tiếng +50 để làm điều đó.
Mikaela

2
Tôi nghĩ rằng cần phải nhấn mạnh rằng câu trả lời chính xác cho câu hỏi được liên kết là askubfox.com/a/381646/16395 --- nếu không, bạn phải tính đến các chính sách Ubuntu GID / UID. Câu trả lời được chấp nhận là không quá rõ ràng.
Rmano

sudo userdel DOMAIN \\ johndoe gây ra lỗi cho tôi: "userdel: không thể xóa mục 'DOMAIN \ johndoe' khỏi / etc / passwd - Tôi đã xem / etc / passwd và chúng thậm chí không ở đó, có thể vì đó là" tên miền "tài khoản?
00fruX

1
@ 00fruX Yeah ... Nếu bạn đang sử dụng cơ sở dữ liệu người dùng tập trung, bạn sẽ cần phải xử lý trực tiếp.
Oli


87

Chỉ cần nhấn Ctrl+ Alt+ Ttrên bàn phím để mở Terminal. Khi nó mở, chạy (các) lệnh bên dưới:

cat /etc/passwd

HOẶC LÀ

less /etc/passwd
more /etc/passwd

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

awk -F':' '{ print $1}' /etc/passwd

Làm thế nào để thêm người dùng bằng lệnh?
nux

Bạn có thể sử dụng lệnh useradd .
Mitch

@nux Một chút muộn cho bữa tiệc, nhưng adduserthay vào đó, từ việc sử dụng dòng lệnh , useraddnên giới hạn ở các kịch bản mà tác giả thực sự thực sự biết mình đang làm gì.
flindeberg

64

Cách dễ nhất để có được loại thông tin này là getent- xem manpage cho getentlệnhBiểu tượng trang . Mặc dù lệnh đó cho cùng một đầu ra vì cat /etc/passwdnó rất hữu ích để ghi nhớ vì nó sẽ cung cấp cho bạn danh sách một số thành phần trong HĐH.

Để có danh sách tất cả người dùng bạn nhập (vì người dùng được liệt kê trong /etc/passwd)

getent passwd

Để thêm người dùng newuser vào hệ thống bạn sẽ gõ

sudo adduser newuser

để tạo người dùng có tất cả các cài đặt mặc định được áp dụng.

Phần thưởng: Để thêm bất kỳ người dùng nào (ví dụ: anyuser ) vào loại nhóm (ví dụ cdrom )

sudo adduser anyuser cdrom

Bạn xóa một người dùng (ví dụ như đã lỗi thời ) với

sudo deluser obsolete

Nếu bạn muốn xóa thư mục nhà / thư của anh ấy, bạn gõ

sudo deluser --remove-home obsolete

sudo deluser --remove-all-files obsolete

sẽ xóa người dùng tất cả các tệp do người dùng này sở hữu trên toàn hệ thống.


8
Thật hữu ích khi nhớ rằng getent không chỉ in đầu ra của người dùng trong / etc / passwd mà là tất cả người dùng trong tất cả các phụ trợ userdb được định cấu hình trên một hệ thống nhất định, cho dù đó là / etc / passwd hay LDAP, v.v.
Marcin Kaminski

@MarcinK Vitaminki đã đúng, nó cũng in thiết lập người dùng trong các hệ thống SSO có quyền truy cập vào máy chủ. câu trả lời này là câu trả lời hay nhất, với getent passwdmệnh lệnh đúng
ulkas

@MarcinK Vitaminki từ tất cả các phụ trợ người dùng có thể đếm được
jrw32982

43

Bạn cũng có thể sử dụng compgen GNU bash tích hợp :

compgen -u

Sẽ liệt kê tất cả người dùng.


2
Ngắn nhất và làm việc! Nên là người được chấp nhận trong quan điểm của tôi.
Nam G VU

27

Điều này sẽ nhận được, trong hầu hết các tình huống thông thường , tất cả người dùng bình thường (không phải hệ thống, không lạ, v.v.):

awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd

Điều này hoạt động bởi:

  • đọc từ /etc/passwd
  • sử dụng :như một dấu phân cách
  • nếu trường thứ ba (số ID người dùng) lớn hơn 1000 và không phải 65534, thì trường đầu tiên (tên người dùng của người dùng) sẽ được in.

Điều này là do trên nhiều hệ thống linux, tên người dùng trên 1000 được dành riêng cho người dùng không có đặc quyền (bạn có thể nói bình thường). Một số thông tin về điều này ở đây :

ID người dùng (UID) là một số nguyên dương duy nhất được chỉ định bởi một hệ điều hành giống Unix cho mỗi người dùng. Mỗi người dùng được xác định hệ thống bằng UID của nó và tên người dùng thường chỉ được sử dụng làm giao diện cho con người.

Các UID được lưu trữ, cùng với tên người dùng tương ứng của họ và thông tin cụ thể của người dùng khác, trong tệp / etc / passwd ...

Trường thứ ba chứa UID và trường thứ tư chứa ID nhóm (GID), theo mặc định là bằng UID cho tất cả người dùng thông thường.

Trong các nhân Linux 2.4 trở lên, các UID là các số nguyên 32 bit không dấu có thể biểu thị các giá trị từ 0 đến 4.294.967.296. Tuy nhiên, chỉ nên sử dụng các giá trị tối đa 65.534 để duy trì khả năng tương thích với các hệ thống sử dụng các nhân hoặc hệ thống tệp cũ hơn chỉ có thể chứa UID 16 bit.

UID 0 có vai trò đặc biệt: nó luôn là tài khoản gốc (nghĩa là người dùng quản trị toàn năng). Mặc dù tên người dùng có thể được thay đổi trên tài khoản này và các tài khoản bổ sung có thể được tạo bằng cùng một UID, nhưng không có hành động nào là khôn ngoan theo quan điểm bảo mật.

UID 65534 thường được dành riêng cho không ai, người dùng không có đặc quyền hệ thống, trái ngược với người dùng thông thường (nghĩa là không có đặc quyền). UID này thường được sử dụng cho các cá nhân truy cập hệ thống từ xa thông qua FTP (giao thức truyền tệp) hoặc HTTP (giao thức truyền siêu văn bản).

Theo truyền thống, các UID 1 đến 99 được dành riêng cho người dùng hệ thống đặc biệt (đôi khi được gọi là người dùng giả), chẳng hạn như bánh xe, daemon, lp, nhà điều hành, tin tức, thư, v.v. Những người dùng này không cần toàn bộ quyền hạn gốc, nhưng họ thực hiện một số tác vụ quản trị và do đó cần nhiều đặc quyền hơn những nhiệm vụ được trao cho người dùng thông thường.

Một số bản phân phối Linux (ví dụ: phiên bản) bắt đầu UID cho người dùng không có đặc quyền ở 100. Những người khác, chẳng hạn như Red Hat, bắt đầu họ ở mức 500, và vẫn là những người khác, như Debian, bắt đầu họ ở 1000. Vì sự khác biệt giữa các bản phân phối, thủ công can thiệp có thể cần thiết nếu nhiều phân phối được sử dụng trong một mạng trong một tổ chức.

Ngoài ra, có thể thuận tiện khi dự trữ một khối UID cho người dùng cục bộ, chẳng hạn như 1000 đến 9999 và một khối khác cho người dùng từ xa (ví dụ: người dùng ở nơi khác trên mạng), chẳng hạn như 10000 đến 65534. Điều quan trọng là quyết định trên một sơ đồ và tuân thủ nó.

Trong số các ưu điểm của thực hành dự trữ khối số này cho các loại người dùng cụ thể là nó giúp thuận tiện hơn khi tìm kiếm thông qua nhật ký hệ thống cho hoạt động đáng ngờ của người dùng.

Trái với niềm tin phổ biến, không nhất thiết mỗi mục trong trường UID là duy nhất. Tuy nhiên, UID không duy nhất có thể gây ra sự cố bảo mật và do đó, UID phải được giữ duy nhất trên toàn bộ tổ chức. Tương tự như vậy, nên tránh tái chế UID từ người dùng cũ càng lâu càng tốt.


1
Gần như là một câu trả lời hoàn hảo, nhưng IMO sẽ dễ sử dụng hơn getentthay vì đọc trực tiếp /etc/passwdvà tra cứu UID_MIN/ UID_MAXthay vì mã hóa cứng các giá trị:getent passwd | awk -F: "{if (\$3 >= $(awk '/^UID_MIN/ {print $2}' /etc/login.defs) && \$3 <= $(awk '/^UID_MAX/ {print $2}' /etc/login.defs)) print \$1}"
Max Truxa

17

danh sách tất cả người dùng có thể đăng nhập (không có người dùng hệ thống nào như: bin, deamon, mail, sys, v.v.)

awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow

thêm người dùng mới

sudo adduser new_username

hoặc là

sudo useradd new_username

xóa / xóa tên người dùng

sudo userdel username

Nếu bạn muốn xóa thư mục chính (mặc định thư mục / home / tên người dùng)

sudo deluser --remove-home username

hoặc là

sudo rm -r /path/to/user_home_dir

Nếu bạn muốn xóa tất cả các tệp khỏi hệ thống khỏi người dùng này (không chỉ là thư mục gốc)

sudo deluser --remove-all-files

1
Có lẽ bạn nên giải thích sự khác biệt giữa adduseruseradd. Một cũng thêm sudo-prefix vào lệnh đầu tiên. Các tập tin bóng mật khẩu chỉ có thể được đọc như root.
s3lph

1
awk -F':' '$2 ~ "\$" {print $1}' /etc/shadowcho tôi xem tất cả người dùng bao gồm bin, daemon, v.v. và đưa ra cảnh báo này: chuỗi thoát \$' treated as plain $ 'Tôi tìm thấy bài đăng này stackoverflow.com/a/25867768/847954 và thêm một dấu gạch chéo ngược và nó hoạt động tốt:awk -F':' '$2 ~ "\\$" {print $1}' /etc/shadow
jeff xạ hương

8

Ok đây là một mẹo sẽ giúp bạn sắp xếp này. Thiết bị đầu cuối đã tự động hoàn thành nếu bạn nhập người dùng và nhấn phím Tab hai lần, nó sẽ liệt kê tất cả các lệnh tồn tại với người dùng dưới dạng 4 ký tự đầu tiên.

user (tab tab)

cung cấp cho tôi các tùy chọn có thể có của người dùng userdel usermod user users-admin
nếu bạn muốn biết thêm về một lệnh google nó hoặc gõ man man useradd cung cấp cho useradd - tạo người dùng mới hoặc cập nhật thông tin người dùng mới mặc định ... ...

để liệt kê người dùng bạn nên đi với những gì Mitch nói.

Hy vọng rằng sẽ giúp tôi yêu hoàn thành tab trong bash giúp tôi không phải nhớ mọi thứ.


6

Để tìm ra người dùng có thư mục gốc trong thư mục / home trên máy, hãy chạy các lệnh sau

cd /home
ls 

Sau đó, bạn có thể thấy người dùng có quyền đăng nhập vào máy chủ. Nếu chúng tôi muốn xem xét các tập tin của bất kỳ người dùng nào, bạn phải là người dùng root.


8
Điều này chỉ hiển thị nội dung của /home. Mặc dù Ubuntu đặt các thư mục người dùng ở đó theo mặc định, nhưng không có cách nào bắt buộc.
David Foerster

ls /homecũng có thể chứa các thư mục người dùng của người dùng đã xóa.
Suraj
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.