Обратите внимание, что я полностью новичок в Linux, пожалуйста, имейте это в виду, отвечая на этот вопрос, так как у меня очень ограниченные знания о Linux.
ОПЕРАЦИОННЫЕ СИСТЕМЫ: Debian Squeeze
Я использую ZSH и создал функцию под названием webuseradd
это выглядит так:
function webuseradd () {
echo creating user $1;
mkdir /usr/share/nginx/$1;
# sshlogin is required to allow user to ssh and sftp
sudo useradd -G lshell,sshlogin -b /usr/share/nginx/$1/home -d /usr/share/nginx/$1/home -m --skel /etc/httpskel -K UMASK=027 $1;
# /usr/share/nginx/$1 will be the chroot so set it to root
sudo chown root:root /usr/share/nginx/$1;
sudo su - $1;
mkdir /usr/share/nginx/$1/home/.ssh;
ssh-keygen -t rsa;
exit;
# force the user into a limited, jailed shell
sudo chsh -s /usr/bin/lshell $1;
}
Однако, если я назову это так, я получу:
$ webuseradd test
creating user test
No directory, logging in with HOME=/
Пользователь создан нормально, однако проблема возникает, когда я пытаюсь su
в пользователя. Если я exit
затем сценарий продолжает следующий вывод:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Как обеспечить создание ключей и их правильное расположение с соответствующими разрешениями в функции? Я уверен, что есть и другие вещи, которые я сделал нецелесообразно, поэтому, если заметите что-нибудь, скажите.
Я предполагаю, что вы не запускаете эту функцию, когда вошли в систему как root, учитывая все ваше использование sudo.
Я бы, вероятно, просто изменил ваш скрипт вот так.
sudo useradd -G lshell,sshlogin -b /usr/share/nginx/$1/home -d /usr/share/nginx/$1/home -m --skel /etc/httpskel -K UMASK=027 $1;
sudo chown root:root /usr/share/nginx/$1;
- sudo su - $1;
- mkdir /usr/share/nginx/$1/home/.ssh;
- ssh-keygen -t rsa;
+ sudo mkdir -p /usr/share/nginx/$1/home/.ssh;
+ sudo ssh-keygen -t rsa -f /usr/share/nginx/$1/home/.ssh/id_rsa
+ sudo chown -R /usr/share/nginx/$1/home/.ssh/
+ sudo chmod 0600 /usr/share/nginx/$1/home/.ssh/
На заметку о безопасности. Вам действительно не следует создавать или хранить пользователей частный ключи. Предполагается, что закрытые ключи должны быть частными, а не храниться на сервере, где они могут быть украдены. Вы работаете неправильно, если требуете надежной защиты.
Если вы запускаете эту функцию как root, нет необходимости вызывать su
а затем запустите несколько команд. Кроме того, это все равно не сработает. Вы просто получите интерактивную оболочку, а затем сценарий продолжится, когда вы выйдете из этой оболочки.
Просто запустите нужные команды с помощью sudo
напрямую: (и вам не нужно mkdir
; ssh-keygen
сделаю это за вас)
sudo -u $1 -- ssh-keygen -t rsa