5.3 用户密码管理
密码对于一个用户来说是非常关键的,而密码管理也是系统管理员的一项非常重要的任务。
5.3.1 命令passwd
账户创建后,默认是没有设置密码的,只有设置好密码后,才可以登录系统。为了安全,在为用户创建密码时,请尽量设置复杂一些。阿铭建议你按照如下规则设置密码:
长度大于10个字符;
密码中包含大小写字母、数字以及特殊字符*、&、%等;
不规则性(不要出现happy、love、linux、7758520、111111等单词或者数字);
密码中不要带有自己的名字、电话、生日以及公司名字等。
为用户设置密码时,可以使用命令passwd,其格式为passwd [username]。该命令后面若不加用户名字,则是为自己设定密码,示例命令如下:
# passwd 更改用户root的密码 。 新的密码: 重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。
如果你登录的是root账户,后面可以跟普通账户的名字,意思是修改指定账户的密码,示例命令如下:
# passwd user11 更改用户 user11 的密码 。 新的密码: 重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。
需要注意的是,只有root才可以修改其他账户的密码,普通账户只能修改自己的密码。
5.3.2 命令mkpasswd
命令mkpasswd用于生成密码。我们安装的Linux默认是没有这个命令的,需要安装一个expect软件包,安装命令如下:
# yum install -y expect # mkpasswd vYIg|y43q
有时,我们需要生成指定长度的密码,用mkpasswd命令也可以满足。比如,生成12位长度的密码,示例命令如下:
# mkpasswd -l 12 4Kj3a$Voygxc
当然,我们还可以指定密码中有几个特殊字符或几个数字,示例命令如下:
# mkpasswd -l 12 -s 0 -d 3 e29kxw4aDZrt
上例中,-s指定特殊字符的个数,-d指定数字的个数。用这个随机字符串作为密码再好不过了,只不过它不方便记忆。大家是否还记得第1章阿铭介绍的KeePass工具?大家把密码记录在这里,还是很方便的。
5.4 用户身份切换
Linux系统中,有些事情只有root用户才能做,普通用户是不能做的,这时就需要临时切换到root身份了。下面阿铭带你做一个小试验,创建test账户,并修改其密码,这样我们就可以使用test账户登录Linux了。具体操作方法如下:
# useradd test # passwd test 更改用户 test 的密码 。 新的密码: 重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。
然后用test账户登录Linux,示例命令如下:
login as: test test@192.168.188.128's password: $ whoami test
登录后,使用whoami命令查看,发现当前用户是test。普通用户和root用户的shell提示符号有些区别,root账户是#,普通用户是$。
5.4.1 命令su
命令su的格式为su [-] username,后面可以跟-,也可以不跟。普通用户的su命令不加username时,就是切换到root用户。当然,root用户同样可以使用su命令切换到普通用户。该命令加上-后,会初始化当前用户的各种环境变量(关于环境变量这部分内容,阿铭放在第11章中讲解)。下面阿铭做个简单的试验来说明加与不加-的区别,示例命令如下:
$ su - 密码: # pwd /root 如果不加-切换到root账户时,当前目录没有变化;而加上-切换到root账户时,当前目录为root账户的家目录。这跟直接登录root账户是一样的。当由root切换到普通用户时,是不需要输入密码的。在root下切换到普通用户示例命令如下: # su - test 上一次登录:四 1月 2 0709 EST 2020从 192.168.72.1pts/2 上 $ whoami test
5.4.2 命令sudo
用su可以切换用户身份,而且每个普通用户都能切换到root身份。如果某个用户不小心泄漏了root的密码,那岂不是系统非常不安全?没错,为了改进这个问题,Linux系统工程师设计了sudo这个命令。使用sudo命令执行一个只有root才能执行的命令是可以办到的,但是需要输入密码。这个密码并不是root的密码,而是用户自己的密码。默认情况下,只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的。我们可以使用visudo命令编辑相关的配置文件/etc/sudoers。如果没有visudo这个命令,请使用命令yum install -y sudo安装。
默认root支持sudo,是因为这个文件中有一行root ALL=(ALL) ALL。在该行下面加入test ALL=(ALL) ALL,就可以让test用户拥有sudo的特权。从左到右,第一段test这里为一个用户,指定让哪个用户有sudo特权;第二段ALL=(ALL)比较难理解,左边的ALL指的是所有的主机,右边的ALL指的是获取哪个用户的身份,第二段几乎都不用配置;第三段设定可以使用sudo的命令有哪些。
使用visudo命令编辑/etc/sudoers配置文件(必须要使用root用户),它的使用方法和前面阿铭介绍的vi命令一样,即输入i进入编辑模式,编辑完成后,按Esc键,再输入:wq完成保存。具体操作方法如下所示:
## Allow root to run any commands anywhere root ALL=(ALL) ALL test ALL=(ALL) ALL
此时可以验证一下test账户的权限了,方法如下(如下操作是在root账号下进行的):
# su test $ ls //当前目录是在/root下 ls: 无法打开目录'.': 权限不够 $ sudo ls 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: #1) 尊重别人的隐私。 #2) 输入前要先考虑(后果和风险)。 #3) 权力越大,责任越大。 [sudo] test 的密码: 123 456 anaconda-ks.cfg
由于切换到test账户后当前目录还是/root,test账户没有任何权限,所以使用命令ls查看时,提示权限不够。然而使用命令sudo ls输入test账户自身的密码后,就有权限了。初次使用sudo命令时,会出现上面的一大段提示,当再次使用sudo命令时则不再提示。
如果每增加一个用户就设置一行,这样太麻烦了,所以可以这样设置:把# %wheel ALL=(ALL) ALL前面的#去掉,让这一行生效。它的意思是,wheel这个组的所有用户都拥有了sudo的权利。接下来,只要把需要设置sudo权限的所有用户加入到wheel这个组中即可。如下所示:
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
配置文件/etc/sudoers包含了许多配置项,可以使用命令mansudoers来获得帮助信息。下面阿铭介绍一个很实用的案例,我们的需求是把Linux服务器设置成这个样子:只允许使用普通账户登录,而普通账户登录后,可以不输入密码就能用sudo切换到root账户。阿铭的配置方法是,输入如下命令:
# visudo
然后在文件的最后加入如下3行:
User_Alias USER_SU = test, test1, aming Cmnd_Alias SU = /usr/bin/su USER_SU ALL=(ALL) NOPASSWD: SU
第一行设定了一个user别名,其实这个USER_SU相当于是test、test1和aming三个账户;第二行设定了一个命令别名,SU相当于/usr/bin/su;第三行我们刚刚介绍过。保存配置文件后,使用test、test1、aming这3个账户登录Linux。执行命令sudosu -切换到root账户,获取root账户的所有权利,如下所示:
# su - test $ sudo su - # whoami root
不允许root直接登录,这个问题如何解决呢?其实方法很简单,即设置一个复杂得连自己都记不住的密码。不过这样也会有一个问题,就是普通用户可以使用su命令切换到root,然后他再修改简单的密码就能直接登录root了。其实阿铭还有一个更好的办法。
5.4.3 不允许root远程登录Linux
/etc/ssh/sshd_config为sshd服务的配置文件,默认允许root账户通过ssh远程登录Linux。要想不允许root用户远程登录Linux,具体操作方法为:修改配置文件/etc/ssh/sshd_config,在文件中查找PermitRootLoginyes并修改为PermitRootLogin no。保存配置文件后,需要重启sshd服务,如下所示:
# systemctl restart sshd.service
需要注意的是,阿铭提供的这个方法只适用于通过ssh远程登录Linux的情况。
审核编辑:汤梓红
评论
查看更多