问题描述
刚刚创建了一个新的虚拟Ubuntu服务器,并且正在将其硬化以供生产使用。我目前有一个root帐户。我想要做到以下几点:
-
创建一个新用户(我们将其称为
jim
)。我希望他们有一个/home/
目录。 -
授予
jim
SSH访问权限。 -
允许
jim
到su
为root,但不执行sudo
操作。 -
关闭根SSH访问。
-
将SSHd关闭到non-standard端口以帮助停止brute-attacks。
我的问题在于前两项。我已经找到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
不允许直接登录。
AllowUsers jim
允许用户jim
通过SSH登录。如果您不必从任何地方登录,则可以通过将jim限制为IP地址(将IP地址替换为1.2.3.4)来提高安全性:
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
,/home/jim/.ssh
,/home/jim/.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 }'
如果此命令返回”!”字符,则此帐户的登录被禁用。以超级用户身份执行passwd jim
将提示您输入一个新的并确认的密码字符串,之后上面的grep命令将返回一个代表jim密码的散列字符串。
另外请务必确认jim有一个默认设置的登录shell和一个存在的主目录。
请注意lekensteyn的帖子,以获取有关修改SSH服务器设置的信息。