请注意,我是一个完全的 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):
我如何确保密钥被创建并放置在函数中具有正确权限的正确位置?我确信我还做了一些不建议的事情,所以如果你发现任何问题请告诉我。
答案1
如果您以 root 身份运行此函数,则无需调用su
并运行多个命令。此外,这无论如何都行不通。您只会得到一个交互式 shell,然后当您退出该 shell 时脚本将继续运行。
只需直接运行您需要的命令sudo
:(您不需要mkdir
;ssh-keygen
它会为您完成这些操作)
sudo -u $1 -- ssh-keygen -t rsa
答案2
考虑到您使用 sudo,我假设您在以 root 身份登录时没有运行此功能。
我可能会像这样修改你的脚本。
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/
安全方面。你真的不应该创建或存储用户私人的密钥。私钥应该是私密的,而不是存储在可能被盗的服务器上。如果需要强大的安全性,那么您的操作方式就错了。