Команда для перечисления всех пользователей? А как добавлять, удалять, изменять пользователей?

857

Мне нужна команда, чтобы вывести список всех пользователей в терминале. А как добавлять, удалять, изменять пользователей из терминала.

Это может помочь в администрировании ваших учетных записей легко с помощью терминала.

nux
источник
3
Ответ sed 's/:.*//' /etc/passwd
Sed
2
Список пользователей:awk -F: '{ print $1 }' /etc/passwd
saviour123

Ответы:

1144

Составлять список

Для просмотра списка всех локальных пользователей вы можете использовать:

cut -d: -f1 /etc/passwd

Чтобы просмотреть список всех пользователей, способных к аутентификации (каким-либо образом), включая нелокальных, см. Этот ответ .

Некоторые более полезные команды управления пользователями (также ограниченные локальными пользователями):

Добавить

Чтобы добавить нового пользователя, вы можете использовать:

sudo adduser new_username

или же:

sudo useradd new_username

Смотрите также: В чем разница между adduser и useradd?

Удалить / удалить

Чтобы удалить / удалить пользователя, сначала вы можете использовать:

sudo userdel username

Затем вы можете удалить домашний каталог для удаленной учетной записи пользователя:

sudo rm -r / home / имя пользователя

Пожалуйста, используйте с осторожностью вышеуказанную команду!

Модифицировать

Чтобы изменить имя пользователя:

usermod -l new_username old_username

Чтобы изменить пароль для пользователя:

sudo passwd username

Чтобы изменить оболочку для пользователя:

sudo chsh username

Чтобы изменить данные для пользователя (например, настоящее имя):

sudo chfn username

Чтобы добавить пользователя в sudoгруппу:

adduser username sudo

или же

usermod -aG sudo username

И, конечно же , смотри также: man adduser, man useradd, man userdel... и так далее.

Раду Рэдяну
источник
12
Раду забыл упомянуть, sudo chfn <username>какие изменения пользовательские данные (например, настоящее имя). Я попытался добавить это как комментарий, но я получил ошибку, сообщающую, что у меня должна быть +50 репутация, чтобы сделать это.
Микаэла
2
Я думаю, что следует подчеркнуть, что правильным ответом на связанный вопрос является askubuntu.com/a/381646/16395 - в противном случае вам придется учитывать политики GID / UID Ubuntu вручную. Принятый ответ не очень понятен.
Rmano
sudo userdel DOMAIN \\ johndoe выдает мне ошибку: "userdel: не могу удалить запись 'DOMAIN \ johndoe' из / etc / passwd - я посмотрел в / etc / passwd, и их там даже нет, вероятно, потому что это" «домен»?
00fruX
1
@ 00fruX Да ... Если вы используете централизованную пользовательскую базу данных, вам придется иметь дело с ней напрямую.
Оли
87

Просто нажмите Ctrl+ Alt+ Tна клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команду (ы) ниже:

cat /etc/passwd

ИЛИ ЖЕ

less /etc/passwd
more /etc/passwd

Вы также можете использовать awk: awk

awk -F':' '{ print $1}' /etc/passwd
Митч
источник
как добавить пользователей по команде?
NUX
Вы можете использовать команду useradd .
Митч
@nux Немного опоздал на вечеринку, но adduserвместо использования командной строки useraddследует ограничиться сценариями, где автор действительно действительно знает, что он делает.
Флиндеберг,
64

Самый простой способ получить такую ​​информацию getent- см. Man-страницу для getentкомандыЗначок Manpage . Хотя эта команда выдает тот же вывод, cat /etc/passwdкоторый полезно запомнить, поскольку она выдаст вам списки нескольких элементов в ОС.

Чтобы получить список всех пользователей, которых вы вводите (поскольку пользователи перечислены в /etc/passwd)

getent passwd

Чтобы добавить пользователя newuser в систему, вы должны набрать

sudo adduser newuser

создать пользователя, к которому применены все настройки по умолчанию.

Бонус: для добавления любого пользователя (например, anyuser ) в группу (например, cdrom ) введите

sudo adduser anyuser cdrom

Вы удаляете пользователя (например, устаревшего ) с

sudo deluser obsolete

Если вы хотите удалить его домашнюю директорию / mails, вы набираете

sudo deluser --remove-home obsolete

А также

sudo deluser --remove-all-files obsolete

удалит пользователя и все файлы, принадлежащие этому пользователю, во всей системе.

guntbert
источник
8
Полезно помнить, что getent не просто печатает выходные данные пользователей в / etc / passwd, но и всех пользователей во всех сконфигурированных серверных пользовательских базах данных в данной системе, будь то / etc / passwd или LDAP и т. Д.
Marcin Kaminski
@MarcinKaminski прав, он также печатает настройки пользователей в системах единого входа, которые имеют доступ к серверу. этот ответ - лучший, с getent passwdправильной командой
ulkas
@MarcinKaminski от всех перечислимых userdb движков
jrw32982
43

Вы также можете использовать compgen встроенную в GNU bash :

compgen -u

Будут списки всех пользователей.

Ravexina
источник
2
Самый короткий и рабочий! Должен быть принятым на мой взгляд.
Нам G VU
27

В большинстве нормальных ситуаций это должны получить все обычные (не системные, не странные и т. Д.) Пользователи:

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

Это работает:

  • чтение из /etc/passwd
  • используя :в качестве разделителя
  • если третье поле (идентификационный номер пользователя) больше 1000, а не 65534, печатается первое поле (имя пользователя).

Это связано с тем, что во многих системах Linux имена пользователей выше 1000 зарезервированы для непривилегированных (можно сказать, обычных) пользователей. Некоторая информация об этом здесь :

Идентификатор пользователя (UID) - это уникальное положительное целое число, назначаемое Unix-подобной операционной системой каждому пользователю. Каждый пользователь идентифицируется в системе по его UID, а имена пользователей обычно используются только как интерфейс для людей.

UID хранятся вместе с соответствующими именами пользователей и другой пользовательской информацией в файле / etc / passwd ...

Третье поле содержит UID, а четвертое поле содержит идентификатор группы (GID), который по умолчанию равен UID для всех обычных пользователей.

В ядрах Linux 2.4 и выше UID представляют собой 32-разрядные целые числа без знака, которые могут представлять значения от нуля до 4 294 967 296. Тем не менее, рекомендуется использовать значения только до 65 534, чтобы поддерживать совместимость с системами, использующими старые ядра или файловые системы, которые могут поддерживать только 16-битные UID.

UID 0 имеет особую роль: это всегда корневая учетная запись (т. Е. Всемогущий администратор). Хотя имя пользователя может быть изменено для этой учетной записи и дополнительные учетные записи могут быть созданы с тем же UID, ни одно из действий не является разумным с точки зрения безопасности.

UID 65534 обычно зарезервирован ни для кого, для пользователя без системных привилегий, в отличие от обычного (то есть непривилегированного) пользователя. Этот UID часто используется для удаленного доступа к системе через FTP (протокол передачи файлов) или HTTP (протокол передачи гипертекста).

UID с 1 по 99 традиционно зарезервированы для специальных пользователей системы (иногда называемых псевдопользователями), таких как wheel, daemon, lp, operator, news, mail и т. Д. Эти пользователи являются администраторами, которым не нужны общие полномочия root, но которые выполняют некоторые административные задачи и, следовательно, требуют больше привилегий, чем те, которые предоставляются обычным пользователям.

В некоторых дистрибутивах Linux (т. Е. Версиях) UID для непривилегированных пользователей начинаются с 100. Другие, например Red Hat, начинают с 500, а третьи, например, Debian, начинают с 1000. Из-за различий между дистрибутивами руководство вмешательство может быть необходимо, если в организации используются несколько распределений.

Кроме того, может быть удобно зарезервировать блок UID для локальных пользователей, например, от 1000 до 9999, и другой блок для удаленных пользователей (т. Е. Пользователей в других местах сети), например, от 10000 до 65534. Важно принять решение на схеме и придерживаться этого.

Одним из преимуществ этой практики резервирования блоков номеров для определенных типов пользователей является то, что она делает более удобным поиск в системных журналах для подозрительной активности пользователей.

Вопреки распространенному мнению, необязательно, чтобы каждая запись в поле UID была уникальной. Однако неуникальные идентификаторы UID могут вызвать проблемы с безопасностью, и поэтому идентификаторы UID следует сохранять уникальными во всей организации. Аналогичным образом следует избегать повторного использования UID от прежних пользователей как можно дольше.

Уилф
источник
1
Почти идеальный ответ, но IMO его чище использовать getentвместо чтения прямо из /etc/passwdи поиска UID_MIN/ UID_MAXвместо жесткого кодирования значений: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}"
Макс Трукса
17

список всех пользователей, которые могут войти (без системных пользователей, таких как: bin, deamon, mail, sys и т. д.)

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

добавить нового пользователя

sudo adduser new_username

или же

sudo useradd new_username

удалить / удалить имя пользователя

sudo userdel username

Если вы хотите удалить домашний каталог (по умолчанию каталог / home / username)

sudo deluser --remove-home username

или же

sudo rm -r /path/to/user_home_dir

Если вы хотите удалить все файлы из системы от этого пользователя (не только домашняя директория)

sudo deluser --remove-all-files
Донован Вестерс
источник
1
Может быть, вы должны объяснить разницу между adduserи useradd. Также добавьте sudo-prefix к первой команде. Теневой файл пароля может быть прочитан только как root.
s3lph
1
awk -F':' '$2 ~ "\$" {print $1}' /etc/shadowпоказал мне всех пользователей, включая bin, daemon и т. д. и выдал это предупреждение: escape sequence \$' treated as plain $ 'Я нашел это сообщение stackoverflow.com/a/25867768/847954 и добавил еще один обратный слеш, и он работал нормально:awk -F':' '$2 ~ "\\$" {print $1}' /etc/shadow
jeff musk
8

Хорошо, вот трюк, который поможет вам разобраться в этом. Терминал имеет автоматическое завершение, если вы наберете пользователя и дважды нажмете клавишу Tab, он перечислит все команды, которые существуют с пользователем в качестве первых 4 символов.

user (tab tab)

дает мне в качестве возможных опций useradd userdel usermod пользователи users-admin,
если вы хотите узнать больше о команде google it или набрать man man, useradd дает useradd - создать нового пользователя или обновить информацию о новом пользователе по умолчанию ... ...

Чтобы составить список пользователей, вы должны идти с тем, что сказал Митч.

Надеюсь, что это помогает мне любить завершение вкладок в bash, спасает меня от запоминания вещей.

user239243
источник
6

Чтобы узнать пользователей, у которых есть домашние каталоги в папке / home-на машине, выполните следующие команды

cd /home
ls 

Затем вы можете увидеть пользователей, которые имеют разрешение на вход на сервер. Если мы хотим просмотреть файлы любых пользователей, вы должны быть пользователем root.

анвеш
источник
8
Это только показывает содержание /home. Хотя Ubuntu по умолчанию помещает туда пользовательские каталоги, это никоим образом не является обязательным.
Дэвид Фёрстер
ls /homeможет также содержать пользовательские каталоги удаленных пользователей.
Сурадж