Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
Unix 如何执行';苏';在Haskell(web)应用程序中_Unix_Haskell_Authentication_Login_Passwords - Fatal编程技术网

Unix 如何执行';苏';在Haskell(web)应用程序中

Unix 如何执行';苏';在Haskell(web)应用程序中,unix,haskell,authentication,login,passwords,Unix,Haskell,Authentication,Login,Passwords,我正在编写一个基于YesSOD的应用程序,作为一个选项,允许通过与本地“su”相同的方式进行身份验证是很有用的;也就是说:用户提供登录名和密码,会话使用这些凭据有效地执行“su”,并以与用户在计算机上本地登录相同的权限运行。这是因为一个部署场景中web应用程序访问和操作用户$HOME中的文件。然而,由于缺乏API,我得出结论:出于某种原因,我想要的东西是不可行的或毫无意义的。我能找到的最接近的函数是crypt()函数,但(1)它需要salt,(2)/etc/shadow只能由root读取。我期待

我正在编写一个基于YesSOD的应用程序,作为一个选项,允许通过与本地“su”相同的方式进行身份验证是很有用的;也就是说:用户提供登录名和密码,会话使用这些凭据有效地执行“su”,并以与用户在计算机上本地登录相同的权限运行。这是因为一个部署场景中web应用程序访问和操作用户$HOME中的文件。然而,由于缺乏API,我得出结论:出于某种原因,我想要的东西是不可行的或毫无意义的。我能找到的最接近的函数是crypt()函数,但(1)它需要salt,(2)/etc/shadow只能由root读取。我期待一些功能,如:

setEffUId :: String -> String -> IO (Either SomeError Bool)
可能有人会写这篇文章,如果这样做是可行的,那么为什么不呢?

该软件包具有与您想要的功能类似的功能:

setEffectiveUserID :: UserID -> IO () 

该功能似乎是通过FFI实现的。话虽如此,我认为使用YesSOD中基于
su
的东西不是一个好主意。另外,看到上面的API,我想它只有在从更高权限调用时才能工作

它在YesSOD中没有意义的原因是Warp不会为每个连接生成新进程(至少不是默认情况下)


在这种情况下:您应该使用一个单独的程序来执行所有每个用户的操作,并使用
系统中的一个函数调用它。Process

请记住,unix不允许进程提升其权限。setuid/seteuid只能在当前uid是root或者只是在uid和euid之间“移动”uid时更改当前进程的uid。操作系统本身从不检查密码,su是这样做的,因为su是以root用户身份运行的,所以它可以将UID设置为正确的用户。这绝对不能满足我的要求,因为它没有将密码作为参数。