Tony Tsai

May the force of science be with you

Sep 30, 2014 - 2 minute read - Comments - Linux

Problems with adduser on Ubuntu and Solutions


最近想为Ubuntu服务器增加一个用户,然后ssh远程登录使用。折腾了好久总算搞定,现将过程中遇到的问题记录下来,以便将来参考。

1. 创建新用户

Linux系统中只有root用户有创建其它用户的权限。

切换到root,创建新用户zyw ,并设置密码

$ su - root
$ useradd zyw
$ passwd zyw

2. 用户缺少主目录

然后以zyw用户ssh登录Ubuntu服务器,却显示以下错误信息:

Could not chdir to home directory /home/zyw: No such file or directory

很显然问题在于使用useradd命令创建用户时,忘了使用-d参数指定用户主目录(其实我以为系统会根据用户名自动创建,看来系统没有那么智能)。解决办法是为zyw用户创建主目录/home/zyw并设定相应权限,输入以下命令:

$ mkdir /home/zyw
$ chown zyw:zyw /home/zyw
$ chmod 0700 /home/zyw

3. 终端提示符不是[user@host path]$

再次登录Ubuntu服务器,成功登录。但终端提示符只显示一个$,而不是常见的[user@host path]$。用ls命令列出当前目录清单时,目录和文件也没有用不同颜色标识,而且命令输入错误也不能删除,使用非常不方便。

通过google发现,原因在于用户使用的shell不是常用的bash。查看当前使用的shell,输入:

$ echo $SHELL

果然输出为sh,而不是bash。解决办法是修改/etc/passwd配置文件,将zyw用户使用的shell改为bash。修改/etc/passwd需要sudo权限,新建的用户使用不了sudo,提示该用户不在sudoers列表里。解决办法是切换到root用户,执行visudo或者修改/etc/sudoers,在root ALL=(ALL) ALL下面添加

zyw    ALL=(ALL)       ALL

这为zyw用户添加了所有权限。

切换回zyw用户,重新修改/etc/passwd,找到

zyw:x:1001:1001::/home/zyw:/bin/sh

其中最后一个分号后的内容指定zyw用户使用的shell,将其修改为/bin/bash

4. 终端缺少配置文件

重新登录Terminal,提示符正常,但仍没有颜色高亮。通过ls -a列出用户主目录下所有文件(包括隐藏文件),发现缺少终端配置文件.bashrc.profile。解决办法是从/etc/skel目录下拷贝过来,输入以下命令:

$ cp /etc/skel/.bashrc /home/zyw/
$ cp /etc/skel/.profile /home/zyw/

再次登录Terminal,一切都正常了,可以愉快地玩耍了。

参考链接

  1. Could not chdir to home directory: No such file or directory Error and Solution

  2. ubuntu下adduser创建新用户的问题

  3. linux 用户账户管理

  4. Why does my Linux prompt show a $, instead of the login name and path?