1

Я написал скрипт для добавления пользователей CVS и SVN на сервер Linux (Slackware 14.0). Этот сценарий создает пользователя при необходимости и либо копирует ключ SSH пользователя из существующей учетной записи оболочки, либо генерирует новый ключ SSH.

Просто чтобы быть ясно, счета специально для SVN или CVS. Итак, запись в /home/${username}/.ssh/authorized_keys начинается с (на примере CVS):

command="/usr/bin/cvs server",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ....etc...etc...etc...

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

Моя проблема в том, что когда я добавляю нового пользователя, он получает пустой пароль в /etc/shadow по умолчанию. Это выглядит как:

paddycvs:!:15679:0:99999:7:::

Если я оставлю теневой файл как есть (с !), Аутентификация SSH не пройдёт. Чтобы включить SSH, я должен сначала запустить passwd для нового пользователя и ввести что-то.

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

Обычно я запрещаю пользователям входить в систему, устанавливая их оболочку в /bin/false , но если я это сделаю, то SSH тоже не будет работать!

У кого-нибудь есть предложения по написанию этого? Должен ли я просто использовать sed или что-то еще и заменить соответствующую строку в файле теней на предварительно заданную зашифрованную строку секретного пароля? Или есть лучший способ?

Ура =)

5 ответов5

3

И еще одно решение, в котором не используется конвейер, заключается в следующем (также можно найти в пакете shadow, соответственно shadow-utils):

usermod -p '*' username
2

Ты пытался

passwd -d username

удаляет ввод пароля конкретного пользователя из /etc/shadow file . По сути, создание конкретного пользователя войти в систему как пустой пароль.

Он может быть применен только как пользователь root или sudo.

1

Чтобы избежать проблем с блокировкой или испортить ваш теневой файл, вы можете использовать

echo username:some_string | chpasswd

Более конкретно: вы можете использовать * в поле пароля, выполнив это:

echo "username:*" | chpasswd -e
1

Ну, я немного поигрался и обнаружил, что если я превращу пароль в * в /etc/shadow , он разрешает SSH, но отключает вход в систему паролей на TTY. Поэтому я добавлю это как ответ на свой вопрос.

Это было добавлено в мой скрипт после вызова useradd :

cp /etc/shadow /etc/shadow.backup
sed -e "s/^\(${username}:\)[^:]*:/\1*:/" /etc/shadow.backup > /etc/shadow

Он заменяет запись теневого пароля определенного пользователя на * .

0

Более новые версии OpenSSH проверяют /etc /shadow, чтобы увидеть, отключена ли учетная запись. У отключенной учетной записи есть знак «!», Поэтому ее изменение на * решит проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .