我这里有一个运行 Ubuntu 14.04.2 LTS(GNU/Linux 3.16.0-30-generic x86_64)的虚拟机,我们可以通过一个用户访问它,userx
我们每次通过如下方式登录到该虚拟机时都可以ssh
这样调用它:
ssh -p 22 [email protected]
它会自动将用户更改为根因此它进入机器时为:
root@machinename:~#
如果我运行它,pwd
它会显示我在userx
文件夹中/home/userx
。如果我运行su userx
它,再次以 root 身份登录。
那么我该如何改变这种情况,以便当我使用 登录时,我实际上可以像一样userx
登录?userx
userx@machinename:~#
编辑根据评论的要求:
root@machinename:~# grep userx /etc/passwd
userx:x:0:0:somename,,,:/home/userx:/bin/bash
我更改了值以somename
保护隐私。我认为它是群组,对吗?
root@machinename:~# ls -l /home
total 4
drwxr-xr-x 10 1000 userx 4096 Nov 8 11:10 userx
答案1
问题是“userx”是 root。root 的 UID 为 0,如 /etc/passwd 中所示
userx:x:0:0:somename,,,:/home/userx:/bin/bash
看https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/以理解输出。
因此,您可以做的是,尽管这具有中等程度的侵入性,但所有这一切都可以从 root shell 中完成 !!!
在你的情况下,你需要手动编辑etc/passwd
和/etc/groups
nano /etc/passwd
编辑 userx 行
userx:x:1000:1000:somename,,,:/home/userx:/bin/bash
然后 /etc/groups
至少
userx:x:1000:
到达那里后,您可以根据需要将 userx 添加到其他组。在行尾添加 userx,如果需要,请用逗号分隔(从桌面安装中发布此列表)。您可以根据需要将自己添加到其他组(www-data?)
adm:x:4:syslog,userx
cdrom:x:24:userx
sudo:x:27:userx
dip:x:30:userx
plugdev:x:46:userx
lpadmin:x:118:userx
userx:x:1000:
sambashare:x:128:userx
然后设置 ssh(如果需要)
cp -R /root/.ssh /home/userx
chown -R userx:userx /home/userx
退出 root shell 之前,从客户端测试 ssh 和 sudo
ssh [email protected] #you do not need to specify the port if it is the default
现在假设你可以通过 ssh 登陆,测试 sudo
sudo -i
只要您可以通过 ssh 登录并获取 root shell,就可以开始了。
如果您遇到问题,需要回复,我们可能需要配置 ssh 和/或 sudo
答案2
您的用户userx
ID 和组 ID 为 0,这意味着它自动成为 root 用户。您可能需要创建具有不同 ID 的用户,最佳做法是从 1000 开始,因为之前的 ID 应该为系统帐户保留。
用户x:x:0:0:somename,,,:/home/userx:/bin/bash
更改用户 ID 的语法是:
usermod -u UID userx
举例来说
usermod -u 1000 userx
并更改主要组
usermod -g groupx userx
例如,让用户成为具有相同组的成员(Linux 中的默认行为)。
groupadd userx # < Command useless for you as group userx already exists
usermod -g userx userx