Bash - работа с пользователями и паролями
-
Содержание
-
Как добавить пользователя в группу sudo (чтобы он мог использовать sudo)
Способ 1. Самый простой и рекомендуемый (не требует root-пароля)
Выполните от имени уже имеющего sudo-прав пользователя:
# Проверим текущие группы пользователя (замените ivan на нужное имя) groups ivan # Добавим пользователя в группу sudo sudo usermod -aG sudo ivan # Или так (то же самое, просто другой синтаксис) sudo adduser ivan sudoПосле этого пользователь должен перелогиниться (выйти и зайти заново) или перезагрузить систему:
sudo rebootГотово. Теперь пользователь ivan может выполнять команды с sudo.
Способ 2. Если у вас есть только root (через su)
# Переходим в root su - # Добавляем пользователя в группу sudo usermod -aG sudo ivan # Выходим и перезагружаемся exit sudo rebootПроверка, что всё сработало
После перелогина от имени добавленного пользователя выполните:
sudo -lЕсли видите список разрешённых команд — всё работает.
Важные замечания 2025 года
- В современных Ubuntu/Debian/Mint группа называется именно sudo, а не adm или wheel (как в старых версиях или других дистрибутивах).
- Ручное редактирование
/etc/sudoersчерезvisudoпочти никогда не нужно и опасно — пользуйтесьusermod -aG sudo.
-
Проверка подлинности пароля sudo
Вот актуальные, безопасные и рабочие на 2025 год способы проверить «правильный ли пароль sudo у текущего пользователя» из скриптов/терминала (Linux).
1. Самый надёжный и рекомендуемый способ
# Проверка без ввода пароля в командной строке (без -S!) timeout 5 sudo -n true 2>/dev/null && echo "sudo без пароля (nopasswd или кэш)" \ || echo "Требуется пароль" # Если нужен именно ввод пароля из переменной/скрипта: echo "secret" | sudo -S true 2>/dev/null && echo "Пароль верный" || echo "Пароль НЕверный"2. Безопасные варианты (не оставляют пароль в истории и process list)
# Способ через expect (самый чистый) sudo apt install expect -y expect -c ' spawn sudo -v expect "Password:" send "secret\r" expect { "Sorry, try again." { exit 1 } eof { exit 0 } } ' && echo "Пароль верный" || echo "Пароль НЕверный"# Способ через Python (однострочник) python3 -c ' import sys from getpass import getpass p = "secret" sys.stdout.write("Пароль: ") sys.stdout.flush() if __import__("subprocess").check_call( ["sudo", "-kSv"], input=p+"\n", text=True, stdout=open("/dev/null","w"), stderr=open("/dev/null","w")) == 0: print("верный") else: print("НЕверный") '# Через bash + read -s (пароль не виден и не логируется) read -s -p "Введите пароль sudo: " PASSWD; echo echo "$PASSWD" | sudo -S true 2>/dev/null && echo "OK" || echo "Неправильно"3. Что НЕ стоит делать (опасно!)
# Плохо — пароль виден в ps aux и в истории bash echo "secret" | sudo -S ls # Очень плохо — пароль остаётся в истории sudo -S <<< "secret" ls4. Практичные однострочники, которые я реально использую в скриптах
# Проверка с таймаутом 7 сек (чтобы не висело вечно) check_sudo() { timeout 7 sudo -n true > /dev/null 2>&1 } if check_sudo; then echo "sudo работает без пароля" else echo "Нужен пароль или его нет" fi# Проверка с вводом пароля из переменной (безопасно через heredoc) PASS="secret" if printf '%s\n' "$PASS" | sudo -S -v > /dev/null 2>&1; then echo "Пароль верный" else echo "Пароль НЕверный или пользователь не в sudoers" fi5. Итоговая лучшая практика 2025 года
# Самый короткий и безопасный вариант: if sudo -n true 2>/dev/null; then echo "sudo без пароля — всё ок" elif printf 'secret\n' | sudo -S true 2>/dev/null; then echo "Пароль подошёл" else echo "Пароль неверный или нет прав sudo" fi -
Смена пароля учётки root
Вот полная и актуальная на 2025 год шпаргалка по включению/смене/отключению root-пароля в Ubuntu/Debian/Mint/Pop!_OS и других дистрибутивах.
1. Включить и установить пароль root (самый простой способ)
sudo passwd root # → вводишь новый пароль два раза → готовоПосле этого можно входить:
su - # или просто su # или по SSH ssh root@IP2. Сменить уже существующий пароль root
sudo passwd root3. Разблокировать root-аккаунт, если он заблокирован (passwd: account is locked)
sudo passwd -u root # разблокировать sudo passwd root # задать новый парольили одной командой:
sudo passwd -u root && sudo passwd root4. Полностью отключить прямой вход root (рекомендуется для безопасности)
sudo passwd -l root # заблокировать пароль # или sudo usermod -L rootПосле этого
suиssh root@...потребуют пароль → откажут, ноsudoпродолжит работать.5. Проверить текущий статус root
sudo passwd -S root # Вывод: # root P 11/29/2025 0 99999 7 -1 → пароль установлен # root L 11/29/2025 0 99999 7 -1 → аккаунт заблокирован6. Мои готовые однострочники (2025)
# Включить root и задать пароль "123456" echo "root:123456" | sudo chpasswd # Задать случайный сильный пароль и показать его NEW_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 20); echo "root:$NEW_PASS" | sudo chpasswd && echo "Root password: $NEW_PASS" # Заблокировать root навсегда sudo passwd -l root && echo "Root заблокирован. Используй только sudo!"7. Восстановление забытого root-пароля (если всё сломалось)
- Перезагрузись → в GRUB держи Shift (или Esc)
- Выбери Advanced → Recovery mode → root
mount -o remount,rw /passwd root→ задаёшь новыйexec /sbin/initили reboot
Итог: запомни всего три команды
sudo passwd root # включить/сменить пароль root sudo passwd -l root # отключить прямой вход root sudo passwd -S root # проверить статусВ 2025 году 99 % админов используют только
sudo, но иногда root-пароль всё-таки нужен (Docker, Alpine, старые серверы, восстановление). -
Как посмотреть список пользователей Linux
Вот самая полная и актуальная на 2025 год шпаргалка «как посмотреть всех пользователей в Linux» — от самых простых до самых умных команд.
Топ-7 команд (копируй-вставляй)
# 1. Только имена пользователей (самая часто используемая) cut -d: -f1 /etc/passwd | sort # 2. Красиво и по-человечески (мой фаворит 2025) getent passwd | awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' | sort # 3. Только «настоящие» пользователи (UID ≥ 1000, без системных) awk -F: '$3 >= 1000 && $7 ~ /bash|sh|zsh|fish/ {print $1 " → " $7}' /etc/passwd | sort # 4. Все пользователи + домашняя папка + шелл getent passwd | awk -F: '{printf "%-20s %-20s %s\n", $1, $6, $7}' # 5. Кто сейчас залогинен в систему (реальные люди) w -h | awk '{print $1}' | sort -u # 6. Кто может использовать sudo (администраторы) getent group sudo wheel adm admin | cut -d: -f4 | tr ',' '\n' | sort -u # 7. Полная таблица: логин | UID | GID | домашняя | шелл | комментарий getent passwd | awk -F: '{printf "%-15s %-6s %-6s %-25s %-15s %s\n", $1,$3,$4,$6,$7,$5}'Однострочники для самых частых задач
# Сколько всего пользователей (включая системных) getent passwd | wc -l # Сколько «человеческих» пользователей getent passwd | awk -F: '$3 >= 1000 && $1 != "nobody" {c++} END {print c+0}' # Показать только пользователей с /bin/bash или /usr/bin/zsh grep -E '(/bash|/zsh)' /etc/passwd | cut -d: -f1 # Найти пользователей без пароля (опасно!) sudo getent shadow | awk -F: '($2 == "" || $2 == "!") {print $1}' # Пользователи с UID=0 (другие root-аккаунты — красный флаг!) awk -F: '$3 == 0 {print $1}' /etc/passwdМои алиасы (добавь в ~/.bashrc)
alias users="echo 'Реальные пользователи:'; cut -d: -f1 /etc/passwd | sort | tail -n +34 | head -n -1" alias admins="echo 'Админы (sudo):'; getent group sudo wheel admin 2>/dev/null | cut -d: -f4 | tr ',' '\n' | sort -u" alias whologin="w -h | awk '{print \$1}' | sort -u"Что использовать в 2025 году
Задача Лучшая команда Просто список имён cut -d: -f1 /etc/passwd | sortТолько живые пользователи awk -F: '$3 >= 1000 && $7 !~ /nologin|false/ {print $1}' /etc/passwd | sortСовременные системы (LDAP, SSSD) getent passwdвместоcat /etc/passwdКто сейчас онлайн w -hилиwhoКто имеет права sudo getent group sudo wheel adminЗапомни всего две команды — и ты всегда будешь знать, кто живёт в твоей системе:
cut -d: -f1 /etc/passwd | sort # все-все awk -F: '$3 >= 1000 {print $1}' /etc/passwd | sort # только людиГотово. Теперь ты видишь всех пользователей как на ладони.
-
Как узнать имя пользователя по его идентификатору
В Linux есть несколько способов узнать имя пользователя по его идентификатору (UID). Самый быстрый и удобный — использовать команду
idилиgetent.1. Самый простой способ (команда
id)Эта команда выведет только имя пользователя, привязанное к данному ID:
id -un 1000-u— искать по UID.-n— вывести имя (name) вместо числа.
2. Через базу данных паролей (
getent)Эта команда полезна тем, что она ищет пользователя не только в локальном файле
/etc/passwd, но и в сетевых службах (если они настроены, например, LDAP):getent passwd 1000Вывод будет выглядеть примерно так:
username:x:1000:1000:,,,:/home/username:/bin/bash
(Имя пользователя — это первое слово до двоеточия).Если вам нужно получить только имя, добавьте обработку текста:
getent passwd 1000 | cut -d: -f13. Поиск в файле
/etc/passwdЕсли вы хотите вручную найти строку в системном файле:
grep ":x:1000:" /etc/passwd
Почему именно 1000?
В большинстве дистрибутивов Linux (включая Debian, Ubuntu, CentOS) ID 1000 назначается первому обычному пользователю, созданному при установке системы. Системные пользователи (root, службы) обычно имеют ID меньше 1000. -
Создание нового пользователя
Для создания нового пользователя и предоставления ему прав администратора (sudo) в Debian 12, выполните следующие шаги.
Замените
newuserна желаемое имя пользователя.1. Создание пользователя и установка пароля
Самый простой и интерактивный способ — использовать команду
adduser. Она сразу создаст домашнюю директорию и предложит ввести пароль:sudo adduser newuserСистема попросит вас:
- Ввести пароль (символы при вводе не отображаются).
- Повторить пароль.
- Ввести данные пользователя (ФИО, номер комнаты и т.д.) — это можно пропустить, просто нажимая Enter.
2. Добавление пользователя в группу sudo
В Debian за права администратора отвечает группа
sudo. Чтобы добавить в неё пользователя, выполните:sudo usermod -aG sudo newuser-a(append) — добавить.-G(groups) — в группу.
3. Проверка прав
Чтобы убедиться, что всё прошло успешно, переключитесь на нового пользователя:
su - newuserЗатем попробуйте выполнить любую команду с
sudo, например, обновить список пакетов:sudo apt updateЕсли система приняла пароль и начала обновление — пользователь успешно настроен.
Полезные советы
Задача Команда Удалить пользователя sudo deluser newuserУдалить пользователя вместе с файлами sudo deluser --remove-home newuserСменить пароль существующему пользователю sudo passwd newuserВажно: Если вы только что установили Debian и команда
sudoне найдена, это означает, что пакет не установлен. В таком случае сначала зайдите под root (su -), установите его (apt install sudo), добавьте пользователя в группу и перезагрузите сессию.