Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 获取当前进程保存集用户id_Ruby_Unix_Process_Privileges - Fatal编程技术网

Ruby 获取当前进程保存集用户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`[/(?基于此问题

很明显,在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`[/(?基于此问题的答案:

这里可以猜测初始有效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 < /代码>。还是我错过了一些特定的情况?