分页: 1 / 1

是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 20:00
自由建客
脚本 mycmd 需要根特权,普通帐户通过 sudo 运行。
问题,在 mycmd 中能否获知是哪个帐户通过 sudo 来启动的自己?
不能让调用方通过参数传入,防欺诈。

Re: 是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 20:16
vickycq
尝试在脚本中检查 SUDO_UID, SUDO_USER 二变量的内容

参考 http://unix.stackexchange.com/questions ... pt-as-sudo

Re: 是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 20:18
lilydjwg
sudo env | grep SUDO

Re: 是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 20:26
自由建客
vickycq, SUDO_UID、SUDO_USER 的确可以。但,如果是通过 su 来运行的,就失效了。
另,我很奇怪,id --real 为何会失效。
1.png

Re: 是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 20:54
科学之子
不能让调用方通过参数传入,防欺诈。
我想应该可以用MD5之类的方法来防止欺诈
这样除非某用户知道其它用户的"密码"否则无法假冒

Re: 是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 20:56
自由建客
科学之子 写了:
不能让调用方通过参数传入,防欺诈。
我想应该可以用MD5之类的方法来防止欺诈
这样除非某用户知道其它用户的"密码"否则无法假冒
馊主意

Re: 是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 21:15
vickycq
自由建客 写了:但,如果是通过 su 来运行的,就失效了。
猜测可能原因 su 进入其它用户的提示符后不会设定环境变量 SUDO_*
可通过 logname 得出之前的用户名。

代码: 全选

$ whoami
vicky
$ su
Password: 
# whoami
root
# logname
vicky
参考 http://stackoverflow.com/questions/4598 ... u-commands
自由建客 写了:另,我很奇怪,id --real 为何会失效。
猜测可能原因 无论是 sudo id -u --real 还是 su 后 id -u --real,id -u --real 的父进程 ruid 均为 0
对于前者,进程 sudo 在运行 id -u --real 时的 ruid 为 0 (但在运行 id 之前,进程 sudo 的 ruid=1000)
对于后者,进程 bash 的 ruid 为 0 (未继承进程 su 的 ruid=1000)

参考
https://en.wikipedia.org/wiki/User_identifier
http://www.beautifulwork.org/id-print-r ... -group-ids
https://intelligea.wordpress.com/2014/0 ... -group-id/
http://stackoverflow.com/questions/2050 ... s-can-have
http://stackoverflow.com/questions/3245 ... ed-user-id
http://unix.stackexchange.com/questions ... -from-euid

Re: 是否可以获知是谁通过 sudo 运行的我

发表于 : 2016-10-28 22:00
lilydjwg
其实能 su 的话,再怎么弄也没用。实在不行,su 成别的用户再 su 回 root。有完整的 root 权限什么手段都能绕过的。
sudo 可以指定只能执行特定的命令,所以才需要能够安全地判断是谁在 sudo。