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

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
自由建客
帖子: 13445
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: [email protected]
送出感谢: 12 次
接收感谢: 114 次
联系:

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

#1

帖子 自由建客 » 2016-10-28 20:00

脚本 mycmd 需要根特权,普通帐户通过 sudo 运行。
问题,在 mycmd 中能否获知是哪个帐户通过 sudo 来启动的自己?
不能让调用方通过参数传入,防欺诈。
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
送出感谢: 100 次
接收感谢: 990 次
联系:

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

#2

帖子 vickycq » 2016-10-28 20:16

尝试在脚本中检查 SUDO_UID, SUDO_USER 二变量的内容

参考 http://unix.stackexchange.com/questions ... pt-as-sudo
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
头像
lilydjwg
论坛版主
帖子: 4176
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

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

#3

帖子 lilydjwg » 2016-10-28 20:18

sudo env | grep SUDO
头像
自由建客
帖子: 13445
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: [email protected]
送出感谢: 12 次
接收感谢: 114 次
联系:

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

#4

帖子 自由建客 » 2016-10-28 20:26

vickycq, SUDO_UID、SUDO_USER 的确可以。但,如果是通过 su 来运行的,就失效了。
另,我很奇怪,id --real 为何会失效。
1.png
科学之子
帖子: 2280
注册时间: 2013-05-26 6:58
系统: Debian 9
送出感谢: 848 次
接收感谢: 32 次

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

#5

帖子 科学之子 » 2016-10-28 20:54

不能让调用方通过参数传入,防欺诈。
我想应该可以用MD5之类的方法来防止欺诈
这样除非某用户知道其它用户的"密码"否则无法假冒
头像
自由建客
帖子: 13445
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64
来自: [email protected]
送出感谢: 12 次
接收感谢: 114 次
联系:

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

#6

帖子 自由建客 » 2016-10-28 20:56

科学之子 写了:
不能让调用方通过参数传入,防欺诈。
我想应该可以用MD5之类的方法来防止欺诈
这样除非某用户知道其它用户的"密码"否则无法假冒
馊主意
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
送出感谢: 100 次
接收感谢: 990 次
联系:

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

#7

帖子 vickycq » 2016-10-28 21:15

自由建客 写了:但,如果是通过 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
这些用户感谢了作者 vickycq 于这个帖子:
科学之子 (2016-10-28 21:16)
评价: 3.7%
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
头像
lilydjwg
论坛版主
帖子: 4176
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

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

#8

帖子 lilydjwg » 2016-10-28 22:00

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

回到 “Shell脚本”