其实关于降权运行,也就这么一句: su - user -c "xxxxxx",也没必要写一篇文章来解释,但是出于安全考虑,以及对之前出现的aria2权限过高的问题,写一篇详细解释的文章。
1.降权运行程序的方法:
先查看下su命令的解释:
su -help
用法:
su [选项] [-] [USER [参数]...]
将有效用户 id 和组 id 更改为 USER 的 id。
单个 - 视为 -l。如果未指定 USER,将假定为 root。
选项:
-m, -p, --preserve-environment 不重置环境变量
-g, --group <组> 指定主组
-G, --supp-group <组> 指定一个辅助组
-, -l, --login 使 shell 成为登录 shell
-c, --command <命令> 使用 -c 向 shell 传递一条命令
--session-command <命令> 使用 -c 向 shell 传递一条命令
而不创建新会话
-f, --fast 向shell 传递 -f 选项(csh 或 tcsh)
-s, --shell <shell> 若 /etc/shells 允许,则运行 shell
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
-g, --group <组> 指定主组
-G, --supp-group <组> 指定一个辅助组
-, -l, --login 使 shell 成为登录 shell
-c, --command <命令> 使用 -c 向 shell 传递一条命令
--session-command <命令> 使用 -c 向 shell 传递一条命令
而不创建新会话
-f, --fast 向shell 传递 -f 选项(csh 或 tcsh)
-s, --shell <shell> 若 /etc/shells 允许,则运行 shell
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
根据提示,我们只需要如下操作即可:
su - user -c "xxxxxx" //user为用户名,xxxxxx为执行的命令
这样我们就把程序运行用户切换为非root用户了,这样提高了安全性。
2.关于ShadowsocksR降权运行
之前我一直没这个意识,一个安装脚本的执行全部通过root来完成,包括安装,运行,自启,使整个程序权限都为root权限,这样做非常危险,毕竟root用户啥都能干,但是鉴于这两年使用shadowsocks以来,的确没发生过什么通过shadowsocks获取到系统权限导致系统出现问题的情况,其实最主要还是我们运行的小鸡上很少会出现生产环境,毕竟主要功能也就是扶墙罢了,所以可能出现问题,大不了重装系统解决,使得我有这个意识的是之前出现的一个问题,服务器安装Aria2之后,由于是通过root用户运行,并且Aria的WebUI可以自己设置下载路径,所以问题来了,一些别有用心的用户,把公钥文件下载到/root/.ssh文件夹,这样就可以直接通过密钥验证来登陆服务器?恐怖吧,如果Aria2权限降低些,也就恐怕不会出现这个问题了。所以对于运行权限来说,我们最好保持最小化原则。能用即可,不是万不得已,不要使用root运行。
我们可以这样做:
root安装程序,新建用户,chown把所有者全部改为新用户,通过su切换新用户运行命令。
说到这里,很多人就纳闷了,那为啥不直接使用普通用户安装运行程序呢?
这就涉及到sudo命令,所以能做的时候,尽量通过sudo来安装程序,不要直接切换为root用户运行,不出问题还好,出问题获取的是整个系统的权限。