我有一个应用程序,可能会或可能不会运行,而用户被sudo'ed共享用户帐户。 我想可靠地确定谁是真正的用户是一种“荣誉系统”ACL。 我认为通过追踪父/组/会话进程ID, pstree命令的方式有一些方法,但我不知道如何做到最好,或者如果有更好的select。
我最初尝试getlogin() 。 如果使用./myapp ,那么这将起作用,但是它会失败,并input'cat input | 。/ myapp“(因为”控制terminal“是共享帐户拥有的pipe道)。
我宁愿不相信环境variables,因为我不希望我的“荣誉系统”被一个简单的未unset完全挫败,当信息在其他地方仍然可用时。
我也想避免强制在密码数据库中查找,因为这是一个远程RPC(NIS或LDAP),我非常确定wtmp已经包含我需要的信息。
如何杀死在c + +的过程,只知道它的名字的一部分
gfortran:在64位系统中编译32位可执行文件
在Linux x64上与x86共享库链接
Node.js(Mac OSX)的性能问题 – 进程
PID,PPID和TGID的含义
怎么没有Windows的64位版本的R?
如何从Windows服务作为不同的用户运行进程
想学习大会,困惑从哪里开始
Android模拟器不会在Linux中启动
对于一个shell脚本,你可以用它来获取sudo'ing用户:
WHO=$(who am i | sed -e 's/ .*//'`)
ID_WHO=$(id -u $WHO)
稍后我会发现C库相当于。
sudo设置环境变量SUDO_USER , SUDO_UID和SUDO_GID 。
你可以用这个来测试
$ sudo env [sudo] password for shteef: TERM=xterm # [...snip...] SHELL=/bin/bash LOGNAME=root USER=root USERNAME=root SUDO_COMMAND=/usr/bin/env SUDO_USER=shteef SUDO_UID=1000 SUDO_GID=1000
但是,如果你的用户在共享帐户上有外壳访问,那么我想你也不能盲目地相信这个。
怎么样:
#!/usr/bin/ksh username=`id | cut -d"=" -f2 | cut -d" " -f1` if [ $username == "0(root)" ] then print "Yes,the user is root" else print "Sorry! the user $username,is not a root" fi
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。