如何以nobody用户执行命令?

最近在logstash中使用nobody用户启动logstash,一想,nobody用户的shell不是/sbin/nologin吗? 不能登录执行命令呀?

于是看了一下它的启动脚本,是使用其他方式进行的。。。

玩了几年linux竟然还不知道chroot可以干这事,只知道chroot将根目录切换到某一位置,,汗颜。。

使用su -l nobody -c "命令"方式

然,nobody用户的shell是/sbin/nologin,执行命令失败

# su -l nobody -c "/usr/bin/ls /tmp"
This account is currently not available.

那runuser呢? 同样不行。。。

# runuser -c "ls /tmp" nobody
This account is currently not available.

最后使用chroot是可以的。。

# chroot --userspec=99:99 / sh -c id
uid=99(nobody) gid=99(nobody) 组=99(nobody),0(root)

知识贵在积累。

chroot命令帮助

# chroot --help
用法:chroot [选项] 新根 [命令 [参数]...]
 或:chroot 选项
以指定的新根为运行指定命令时的的根目录。

  --userspec=用户:组      指定所用的用户及用户组(可使用"数字""名字")
  --groups=组列表         指定可供选择的用户组列表,形如组1,组2,组3...
      --help        显示此帮助信息并退出
      --version        显示版本信息并退出

If no command is given, run '${SHELL} -i' (default: '/bin/sh -i').

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告chroot 的翻译错误
要获取完整文档,请运行:info coreutils 'chroot invocation'
原文地址:https://www.cnblogs.com/xiaoming279/p/6115167.html