CentOS7.x 下安装 gosu 程序
前言
gosu
是一个简单的工具,源于su
和sudo
具有非常奇怪且经常令人讨厌的TTY和信号转发行为这一简单事实。它们的设置和使用也有些复杂(特别是在sudo
的情况下),这允许大量的表达性,但如果你所需要的只是“作为特定的用户运行特定的应用程序并退出管道”,那么它们就会失败。
gosu工作的核心是直接从Docker/libcontainer本身在容器中启动应用程序的方式中窃取的(实际上,是直接从libcontainer的代码库中使用 /etc/passwd
处理代码)。
$ gosu
Usage: ./gosu user-spec command [args]
eg: ./gosu tianon bash
./gosu nobody:root bash -c 'whoami && id'
./gosu 1000:1 id
./gosu version: 1.1 (go1.3.1 on linux/amd64; gc)
一旦处理完了“用户/组”,我们就切换到该用户,然后执行指定的程序,gosu本身就不再驻留在或参与进程生命周期中。这避免了信号传递和TTY的所有问题,并将它们转移到调用gosu的进程和被gosu调用的进程,它们属于这些进程。
1. 下载
现在版本已经1.16了,详情参见https://github.com/tianon/gosu。执行以下命令下载安装gosu1.16:
GOSU_VERSION=1.16; \
wget -O /usr/local/bin/gosu https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-amd64; \
wget -O /usr/local/bin/gosu.asc https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-amd64.asc
2. 校验
对下载的文件进行校验,执行以下命令:
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc
个人认为作用不大,强迫症状者可以执行它们。
3. 验证
修改权限,验证二进制文件是否能运行
chmod +x /usr/local/bin/gosu; \
gosu --version; \
gosu nobody true
后记
gosu 一般在docker中用的多一些。感谢阅读,有问题留言一起讨论哈(●’◡’●)
文章评论