难免要重新配置一台服务器。这里以一个 Bandwagon 的为例,简单的记录一下。
那边安装了系统之后会提供 IP 地址,SSH 端口号,还有 root 用户的密码。
$ ssh root@<server-ip> -p <ssh-port>
然后输入了 root 密码就可以登陆了。
登陆上之后先添加自己的用户
# adduser <your-name>
先随便输入一个密码,用户信息之类的按自己情况填写。
这样创建的用户是带用户目录的,不像 useradd
那样要加参数才行( useradd
是底层的函数,不推荐使用)。还会拷贝 /etc/skel
下的内容,里面可以放 .bashrc
之类的东西。基础的配置,比如默认 shell 是在 /etc/adduser.conf
中设置的,默认就是 bash。
删除用户也很简单,用 deluser
,同样这个是 userdel
的友好版本。下面的命令会同时把那个用户的 home 目录删掉。(更多用法去 man deluser
,要学着去 man
啊,虽然一开始会有些看不懂。)
# deluser --remove-home <name>
设置 sudo 权限
SSH 登陆 & 免密码登陆
禁止 SSH 密码登陆
禁止 root 用户 SSH 登陆
一般不直接拿 root 用户来用,而是给自己的用户加一下 sudo 权限。关键实在 /etc/sudoers
文件上。
# User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
因为有了 sudo 组,所以把用户加到 sudo 组就好了。
# adduser <your-name> sudo
但是每次输入密码又很麻烦,且之后会把用户 SSH 登陆的密码登陆封掉,所以下面修改下 /etc/sudoers
文件,用 visudo
:
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
参考:
sudo - How can I add a new user as sudoer using the command line? - Ask Ubuntu
RootSudo - Community Help Wiki
关于用户组看这里: linux - Is there a command to list all Unix group names? - Stack Overflow
有了 SSH 登陆之后就不在需要在登陆的时候输入密码了。说简单点就是把自己的 xxx.pub
里面的内容放到 ~/.ssh/authorized_keys
文件中。
参考:
Flask Gunicorn Supervisor Nginx 项目部署小总结
Password-less logins in The Flask Mega-Tutorial, Part XVII: Deployment on Linux (even on the Raspberry Pi!) - miguelgrinberg.com
在这个文件里面有很多的相关的设置 /etc/ssh/sshd_config
,下面列举出几个和这次相关的:
RSAAuthentication yes PubkeyAuthentication yes #AuthorizedKeysFile %h/.ssh/authorized_keys # To enable empty passwords, change to yes (NOT RECOMMENDED) PermitEmptyPasswords no PermitRootLogin no PasswordAuthentication no Port 29831
RSAAuthentication
与 PubkeyAuthentication
有关系,但是实际用到的是后者,请看参考二。Key 当然就是放在 %h/.ssh/authorized_keys
下面,RSA 和 DSA 的都可以的样子。
PermitEmptyPasswords
是否允许空密码登陆,可以看到用户是可以有空密码的状态的,但是有的应用会不允许空密码用户使用。详见参考一。这里不想让用户用密码登陆,所以就设置成 no。
PermitRootLogin
设置成 no 禁止 root 用户登陆。
PasswordAuthentication
设置成 no 禁止用户用密码登陆。
Port
是 SSH 登陆的 Port,一般设置一个不是默认的来提高一点安全性(似乎是这样)。
记得 $ sudo service ssh reload
来让设置生效。
参考:
linux - Is disabling password login for SSH the same as deleting the password for all users? - Server Fault
authentication - Shall I set "RSAAuthentication yes" in sshd_config if I use only ECDSA key? - Information Security Stack Exchange
# passwd -d <username> # passwd -l <username>
前者是删掉密码使用户处于空密码状态,后者是锁掉用户的密码,使需要密码验证的操作不能正常进行。详见参考一。
参考:
man passwd
linux - Is disabling password login for SSH the same as deleting the password for all users? - Server Fault
先安装:
$ sudo apt-get install zsh
然后 Oh My Zsh:
robbyrussell/oh-my-zsh
参考:
chsh