process - Crystal lang 进程是否可以更改其用户(euid/uid)?

标签 process crystal-lang

如果 Crystal 语言进程以 root 身份运行,是否可以将其 euid/uid 更改为其他内容?例如:

 old_euid, old_ui = Process.euid, Process.uid
 Process.euid = someone_else
 Process.uid  = someone_else

最佳答案

是的,通过使用 libc 的绑定(bind):

lib LibC
  fun setuid(uid_t : Int)
  fun getuid : Int
end

LibC.getuid                         #=> 0
Process.run("whoami", output: true) #=> root

LibC.setuid(uid)
LibC.getuid                         #=> my uid
Process.run("whoami", output: true) #=> my user name

程序当然需要以root身份运行(即sudo crystal source.cr)

关于process - Crystal lang 进程是否可以更改其用户(euid/uid)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47557469/

相关文章:

c - 如何防止不同子进程的打印重叠

java - 为什么 InputStreamReader 不实时读取进程的输出?

crystal-lang - Crystal C 绑定(bind),简单的 hello world 示例。

crystal-lang - 大括号构造函数?

lazy-evaluation - 在 Crystal 中实现惰性枚举器

linux - 进程等待使用linux系统调用wait

multithreading - 低级编程 : How does the OS start a new thread/process?

java - 使用java在Linux中运行的程序列表

mysql - Crystal 郎 : can't compile App with MySQL library on OSX El Capitan

crystal-lang - 在 Controller 上声明实例变量的类型