Intereting Posts
Как отслеживать использование пользовательского диска в Linux Настройка разрешения группы в каталоге Форматирование в формате Printf с переменным форматом – что делает эта ссылка? Переустановка Virtualbox – неудовлетворенные зависимости / сломанные пакеты? После удаления expressvpn: после удаления нет подключения к службе DNS Как обновить IcedTea? некоторые функциональные кнопки не распознаются (даже на уровне scancode) после возобновления сна Монтирование тома / раздела с разрешениями для пользователя Пожалуйста, объясните вывод команды управления ssh ~ # Скопируйте файлы с определенным расширением из множества вложенных подкаталогов в один каталог и добавьте к каждому скопированному файлу имя каталога. В какой момент появился / домашний каталог? Не удается смонтировать USB на FreeBSD: неверный аргумент Пакет Debian, созданный checkinstall, перезаписывает файл конфигурации в / etc / default Заменить текст с помощью sed и сохранить часть исходного текста Как я могу учить grep для обработки свойств-файлов, таких как текстовые файлы

Я пытаюсь в интерактивном режиме добавить пользователя через "useradd"

Я в основном пытаюсь написать простой скрипт, позволяющий интерактивное использование «useradd» с опциями выбора.

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

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

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

Вот где я сделал это до сих пор:

#!/bin/bash # Script to add a user to Linux system if [ $(id -u) -eq 0 ]; then read -p "Enter username : " username read -p "Enter password : " password read -p "Enter group id or [default to next available]: " gid read -p "Enter additional groups or [default to next available]: " group read -p "Enter home directory or [default to next available]: " hdir read -p "Enter desired shell or [default to next available]: " difshell egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then echo "$username exists!" exit 1 else pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) useradd -p$pass -g$gid -G$group -d$hdir -s$difshell $username [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!" fi else echo "Only root may add a user to the system" exit 2 fi 

Я не знаю, что вы подразумеваете под «следующим доступным» в отношении переменных $ HOME и $ SHELL. Те, которые вы только установили по умолчанию: /home/USERNAME и /bin/bash или что-то еще. Для $HOME просто убедитесь, что каталог не существует ( [ -e "/home/$username" ] && echo "Directory exists" ).

Что касается групп, просто перечислите доступные группы и возьмите следующий. Политика Debian для групп (и я считаю, что это не ограничивается Debian) утверждает, что обычные пользователи должны иметь GID между 1000 и 5999. Итак, все, что вам нужно сделать, это разобрать /etc/passwd , распечатать существующие группы в этом диапазоне и затем добавьте один:

 grp=$(awk -F: '$4>=1000 && $4<6000{print $4+1}' /etc/passwd | sort -n | tail -n1) 

Команда awk выведет значение 4-го : -сепаратированного поля плюс 1, если его значение составляет от 1000 до 6000. Затем оно сортируется, и линия lat сохраняется. Результатом является GID, который больше, чем текущий.