Ruby 获取当前进程保存集用户id
很明显,在stdlib帮助下,如何获得Ruby中当前运行进程的真实用户ID()和有效用户ID()。但是我想知道保存的set用户ID的同级方法在哪里,比如Ruby 获取当前进程保存集用户id,ruby,unix,process,privileges,Ruby,Unix,Process,Privileges,很明显,在stdlib帮助下,如何获得Ruby中当前运行进程的真实用户ID()和有效用户ID()。但是我想知道保存的set用户ID的同级方法在哪里,比如Process.suid?只有一种方法可以确定运行平台是否支持所描述的功能。好吧,您不会喜欢这样,但是,这是为流程获取suid的唯一方法 suid = `ps -o pid,suid`[/(?<=^#{Process.pid}\s)\s*\d+/].strip #⇒ "1000" suid=`ps-o pid,suid`[/(?基于此问题
Process.suid
?只有一种方法可以确定运行平台是否支持所描述的功能。好吧,您不会喜欢这样,但是,这是为流程获取suid
的唯一方法
suid = `ps -o pid,suid`[/(?<=^#{Process.pid}\s)\s*\d+/].strip
#⇒ "1000"
suid=`ps-o pid,suid`[/(?基于此问题的答案:
这里可以猜测初始有效UID(以及保存的UID):由于文件设置了“setuid”标志,并且由用户“anna”拥有,因此运行它将创建一个具有“anna”用户有效UID的进程
suid它是文件的属性之一,所以我们可以比较文件的当前进程uid和所有者id
从文件
您可以尝试从stat使用此方法:
拥有?→ 正确或错误
如果进程的有效用户id与stat的所有者相同,则返回true。
示例:
File.stat(“testfile”).owned?#=>true
File.stat(“/etc/passwd”).owned?#=>false
如果进程uid和文件所有者不相等,我们可以说二进制文件有suid,我们可以更好地确定我们有suid和文档中的下一个方法:
setuid?→ 正确或错误
如果stat设置了set user id permission位,则返回true;如果未设置,则返回false;如果操作系统不支持此功能,则返回false
File.stat(“/bin/su”).setuid?#=>true
对于MacOS,suid
应替换为svuid
较短版本–`ps-p{Process.pid}-o svuid=`.strip
link-only答案不受欢迎,因为如果外部资源被更改、删除或移动,答案将变得毫无用处。请在此处发布链接中的相关部分。感谢@bolov对改进答案的评论感谢@Cristic对改进答案的评论。让我继续你的答案,以确保我理解就内核复制(保存)有效的UID在进程开始时保存UID而言,其他任何东西都不重要(是<代码> SUID标志是否被设置)-我们只需检查可执行文件所有者,并将其视为已保存的ID(<代码> SUID >)->代码>文件。STAT(0美元)。UID < /代码>。还是我错过了一些特定的情况?