在Ubuntu Server上创建一个新的SSH用户
刚刚创建了一个新的虚拟Ubuntu服务器,我正在加强它以供生产使用。 我目前有一个root帐户。 我想做以下事情:
- 创建一个新用户(让我们为其余的用户称之为
jim
)。 我希望他们有一个/home/
目录。 - 给
jim
SSH访问权限。 - 允许
jim
su
到root但不执行sudo
操作。 - 关闭root SSH访问权限。
- 将SSHd移至非标准端口以帮助阻止暴力攻击。
我的问题在于前两项。 我已经找到了useradd
但出于某种原因,我无法以通过SSH创建的用户身份登录。 我是否需要击败SSHd以允许此操作?
编辑(以root身份) /etc/ssh/sshd_config
。 附加以下内容:
Port 1234 PermitRootLogin no AllowUsers jim
Port 1234
使SSH在端口1234上侦听。您可以使用1到65535之间的任何未使用的端口。建议选择只能由root用户使用的特权端口(端口1-1024)。 如果您的SSH守护程序由于某种原因停止工作,则恶意应用程序无法拦截连接。
PermitRootLogin
不允许直接root登录。
AllowUsers jim
允许用户jim
通过SSH登录。 如果您不必从任何地方登录,可以通过将jim限制为IP地址(将1.2.3.4替换为您的实际IP地址)来使其更加安全:
AllowUsers jim@1.2.3.4
对配置文件/etc/ssh/sshd_config
更改不会立即应用,要重新加载配置,请运行:
sudo service ssh reload
SSH对目录和文件权限非常挑剔。 确保:
- 目录/home/username/.ssh具有权限“700”并且由用户拥有(不是root!)
- / home / username / ssh / authorized_keys具有权限“600”并且由用户拥有
将您的公钥复制到authorized_keys文件中。
sudo chown -R username:username /home/username/.ssh sudo chmod 0700 /home/username/.ssh sudo chmod 0600 /home/username/.ssh/authorized_keys
无需将用户添加到/ etc / ssh / ssh_config。
/var/log/auth.log
中将提供有关SSH(或PAM)拒绝登录尝试的原因的线索。 通过在ssh客户端使用-v
选项可以找到其他线索。 几种常见情况,其中一些在其他答案中提到:
- 用户帐户缺少密码,或者被禁用(请参阅
man passwd
,尝试重置密码或检查/etc/shadow
的内容)。 -
/etc/ssh/sshd_config
配置为禁止登录(DenyUsers
,AllowUsers
,PasswordAuthentication
,PubkeyAuthentication
,UsePAM
等,请参阅man sshd_config
)。 - 用户的shell未在
/etc/shells
列出。 - 与SSH操作相关的目录或文件的各种权限问题:
/etc/ssh
,/etc/ssh
/home/jim/.ssh
/etc/ssh
/home/jim/.ssh
/etc/ssh
/home/jim/.ssh
,/etc/ssh
/home/jim/.ssh
/etc/ssh
/home/jim/.ssh
/etc/ssh
/home/jim/.ssh
/etc/ssh
。
我还建议使用adduser (而不是useradd )来添加新用户; 它对各种默认帐户设置更加友好。
只要用户不是admin
组的一部分,他们将无法sudo到root。 要让他们使用su ,你需要设置root密码( passwd root
),之后我建议在/etc/ssh/sshd_config
设置PermitRootLogin=no
。
我可能是错的,但我总是必须安装服务器守护进程才能连接(至少在桌面上)默认安装ssh但这只是客户端
此命令安装服务器
sudo apt-get install openssh-server
您可以通过编辑更改端口并停止root登录
/etc/ssh/sshd_config
这需要您重新启动服务。
sudo service ssh restart
在设置密码之前,Jim不会拥有SSH访问权限。 作为root执行:
grep -i "jim" /etc/shadow | awk -F':' '{ print $2 }'
如果此命令返回“!” 角色然后为此帐户禁用登录。 以root身份执行passwd jim
会提示您输入一个新的确认密码字符串,之后上面的grep命令应该返回一个表示jim密码的散列字符串。
还要确保validationjim有一个登录shell,默认设置,以及一个存在的主目录。
有关修改SSH服务器设置的信息,请注意lekensteyn的post。
在我的情况下,我有一个允许访问的组,用户不属于它。 这解决了我。
使用上面的示例与用户jim
并假设组jim
成员,因为它是唯一的组(以jim
登录时发出groups
命令以查找您所属的组)。 在我的/etc/ssh/sshd_config
文件中,我有AllowGroups sshusers
条目,因此需要将jim
添加到sshusers
组。 以下是如何实现这一目标:
usermod -a -G sshusers jim
根据您的配置更换您的组和用户。
可能存在默认情况下禁用PasswordAuthentication
某些实例。
请检查/etc/ssh/sshd_config
并确保将PasswordAuthentication
属性设置为yes
。