如何以另一个非root用户身份获取交互式shell?

我正在使用Ubuntu 10.04 LTS服务器,采用默认的安全模型(root被锁定,使用sudo提升权限)。有时候,当我需要以提升的权限运行一系列命令,或者需要在只有root权限的目录中查找东西时,我会偶尔使用sudo -i。 有时候,在设置将作为自己非特权系统账户运行的软件时(adduser --system --group --no-create-home --disabled-login some-daemon-user),我发现我需要以该用户身份运行一系列命令,而不是以我的身份或root身份。我尝试过使用sudo -i -u some-daemon-user,但它只返回一个1状态,没有任何错误信息。 我已经检查了/var/log目录下的syslog、messages、auth和debug日志文件,其中没有任何与sudo或相关账户有关的消息。 那么,有没有可能像使用sudo一样成为另一个非root用户,而不仅仅是设置密码并登录(作为他们)?我的系统是否存在某种问题,还是我只是操作不正确?
2个回答

唔...问题是这些用户的标准Shell通常设置为/bin/false,出于安全原因你不应该更改它。但是你仍然可以运行例如:sudo -u www-data /bin/sh

1你能详细说明一下“安全原因”吗?如果我像Florian上面建议的那样使用sudo来以用户身份运行shell,会有什么不同吗? - Calrion
1原因是,任何攻击者通过利用登录程序中的错误来实现系统用户登录的行为,较少有可能获得有效的shell。因此,即使只是出于善意,你应该将设置保留在/etc/passwd文件中。直接通过sudo调用shell与此无关。 - Paul Hänsch
所以问题是在passwd文件中设置shell,而不是实际上作为用户运行shell。明白了! - Calrion

sudo -i运行由目标用户密码数据库条目指定的shell,对于您的系统用户来说是/bin/false

使用

 sudo -u some-daemon-user bash
或者
sudo -u some-daemon-user -H bash
如果你想为目标用户设置$HOME环境变量。