这可能是一个奇怪的问题,但我想知道是否有这种可能性。
当我配置系统时,我更喜欢使用 root 身份,这样我就不必执行所有操作。但是,root 帐户不是我的个人帐户,因此如果我更改 root 帐户中的设置(例如 bashrc 和 vimrc),其他人可能会感到恼火。因此,我想返回使用我的个人帐户进行配置,但我没有权限。
我仅对根帐户没有问题,有时我也需要在另一个用户帐户上执行操作。
理想的情况是我可以以不同的用户(或根帐户)身份验证自己,但不能以其身份登录。
我知道我也可以以某个用户身份登录,然后手动执行我的个人配置文件的配置文件(如 bashrc 和 vimrc),但这似乎每次都是一项烦人的任务。
有谁知道如何有效地完成我在这里描述的事情?或者你们认为这很奇怪并且不应该这样做?
答案1
我认为这个问题没有通用的解决方案。您不能同时成为两个用户。每当您运行命令时,shell 都必须猜测应该以哪个用户身份执行该命令。当您创建文件时,它必须猜测它应该属于谁等等。
我做你的第五段。我有一个脚本/usr/local/bin
(我称之为becomeme
),它源化/home/user/.bashrc
并调整 PATH、LD_LIBRARY_PATH、MANPATH 和 PKG_CONFIG_PATH,以包含我的主目录的路径。我还放置了一些包装,例如替换vi
为HOME=/home/me vi
.我基本上包装了一些东西来搜索用户的主目录中的配置。对于简单的用例 bashrc、vi 和 screen,它工作得相当好。
然而,这只在一定程度上有效,因为以另一个用户身份访问我的主目录通常意味着用户需要对某些文件和目录具有写权限,这是我不想要的。因此,它vi
更像是针对大多数常见用例的一种破解screen
。
这不是很复杂,因为我只需要记住becomeme
切换到另一个用户后键入即可。对于 root 来说,这工作得相当快,对于其他用户,我必须首先授予对我家中的文件的权限。
另一种方法,我还没有尝试过,但可能适用于您的用例:使用 UID 0 和您的用户的家庭创建另一个用户。您只需在/etc/passwd
和中添加一行即可/etc/shadow
。例如,如果您的根用户名是 admin,则相应的行/etc/passwd
可能如下所示:
admin:x:0:0:My personalized root account:/home/mynormaluser:/bin/bash
然后您键入passwd admin
以在 中创建一个条目/etc/shadow
。如果您现在登录admin
,它将是 UID 0,即 root,但具有您的普通主目录及其来自普通用户的设置。它还有自己的密码,您无需共享。但这对于 NFS-home 不起作用(请参阅 root_squash)。
虽然这可行,但每当您以用户身份admin
在主目录中创建文件时,都可能会产生一些文件权限方面的小问题。您可以使用适当的创建掩码和仅在您的用户和 之间共享的指定组来解决这些问题admin
。
答案2
双重认证
据我所知,没有办法完成你所要求的。
备择方案
多个终端
您始终可以打开多个窗口。我经常会进入多个选项卡gnome-terminal
,其中一些选项卡登录到其他系统上的其他帐户,而另一些选项卡仍然仅在我的本地系统上。
屏幕和TMUX
另一种选择是学习如何使用screen
或者tmux
这样您就可以在窗口之间来回切换。除了 中的多个选项卡之外,我还经常使用它gnome-terminal
。
这种方法的另一个好处是能够与远程系统断开连接并稍后重新连接,以便保存我的终端会话。
替代 sudo 工作流程
您可以通过使用此技巧来访问您的环境的别名。像这样设置别名:
$ alias sudo='sudo '
笔记:命令后的空格。从那时起,sudo
它将正常工作,并且您将能够毫无问题地使用用户的别名(正常情况下和具有 root 权限的情况下)。
更多的有关其工作原理的详细信息可以在这里找到。
摘抄
如果别名值的最后一个字符是空格或制表符,则还会检查别名后面的下一个命令字是否有别名扩展。
您还可以使用以下别名加载环境的 .profile:
$ alias sudo='sudo su -i ENV=/home/myuser/.profile'
还有什么?
您所遇到的工作流程正是 Unix 环境的工作方式。因此,最好尝试并适应它,并将重复的任务编写为脚本或别名,这样它们就不会出现。
如果您发现在登录系统帐户(例如 root)时需要特定的东西,您可能需要尝试与具有相同提升权限的其他人合作,以就这些帐户中的某些标准达成一致。
如果您要创建快捷方式和别名,则可能是或应该是其他情况,以便它们与您一样高效。