该模块囊括了那些对用户ID进行操作的方法. 其中定义了与Process::GID一样的方法.
rid返回当前的实用户 ID 。
eid返回当前的有效用户 ID 。
change_privilege(id)放弃实用户 ID, 有效用户 ID和保存用户 ID后,切换为其他用户. 若切换成功则返回id.
若未能进行彻底切换(无法变更部分用户ID)时,会引发ArgumentError异常. 若出现异常, 则无法保证调用该方法之前的各用户ID已被正确保存.
请注意,该方法无法兼容Process.uid=. 若您使用了setreuid(id,-1)的话, 则必须像下面这样进行改写.
Process::UID.re_exchange # (r,e,s)==(u1,u2,??) ==> (u2,u1,??) Process::UID.eid = id # (u2,u1,??) ==> (u2,id,??) Process::UID.re_exchange # (u2,id,??) ==> (id,u2,??)
grant_privilege(id)eid=(id)修改有效用户 ID. 若成功则返回id.
至于保存用户 ID是否会发生变化要看Process::UID.re_exchangeable?能否返回true而定. 若re_exchangeable?为false, 则保存用户 ID不会发生变化. 若为true,且其值有别与实用户ID的话, 将使用新的有效用户ID的值来设定保存用户ID.
若不能进行设定的话, 就会引发 Errno::EPERM 异常.
re_exchange将实用户 ID 和有效用户 ID 进行对调. 保存用户 ID的值会与有效用户 ID保持一致. 若系统所需资源尚未安装完全时, 将引发异常.
返回新的有效用户 ID 。
re_exchangeable?返回一个布尔值,以此表示当前环境中能否(Process::UID.re_exchange是否已安装)对实用户 ID 和有效用户 ID进行对调. 若可以对调则返回true.
sid_available?返回一个布尔值, 以此表示当前环境中的保存用户ID是否可用. 若可用的话就返回true. 但我们无法保证该方法的可靠性. 只要满足下列条件之一, 即认定保存用户 ID是可用的.
switchswitch { .... }暂时修改用户权限.
若该方法不带块的话, 则每次调用时,都会把有效用户ID变为实用户ID或保存用户ID. 其结果是如果您两次调用该方法的话,则只有两次调用间的有效用户ID才会被变为实用户ID.
若带块调用的话, 会将有效用户ID变为实用户ID, 在执行了块的内容之后,再将有效用户ID恢复为原来的值.
不带块时返回可复原(可更改)ID. 带块调用时返回块的计算值.
若调用该方法时, 各用户ID的状态不符合要求, 即实用户ID,有效用户ID和保存用户ID三者相同时, 会引发Errno::EPERM 异常. 另外, 若当前环境中尚未安装该方法时, 会引发NotImplementedError异常.
带块调用时, 若由于某些原因导致无法恢复到原有权限时, 将引发 Errno::EPERM 异常. 比如说,若块的内部对用户ID进行了改动的话就会出现这种情况.
另外, 若在那些保存用户ID不可用的环境中调用该方法的话,实用户ID就会发生变化.