RCMD - Linux手册页

时间:2019-08-20 18:00:39  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

rcmd,rresvport,iruserok,ruserok,rcmd_af,rresvport_af,iruserok_af,ruserok_af-将流返回到远程命令的例程

语法

#include <netdb.h>   /* Or <unistd.h> on some systems */

int rcmd(char **ahost, unsigned short inport, const char *locuser,
         const char *remuser, const char *cmd, int *fd2p);

int rresvport(int *port);

int iruserok(uint32_t raddr, int superuser,
             const char *ruser, const char *luser);

int ruserok(const char *rhost, int superuser,
            const char *ruser, const char *luser);

int rcmd_af(char **ahost, unsigned short inport, const char *locuser,
            const char *remuser, const char *cmd, int *fd2p,
            sa_family_t af);

int rresvport_af(int *port, sa_family_t af);

int iruserok_af(const void *raddr, int superuser,
                const char *ruser, const char *luser, sa_family_t af);

int ruserok_af(const char *rhost, int superuser,
               const char *ruser, const char *luser, sa_family_t af);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

rcmd(),rcmd_af(),rresvport(),rresvport_af(),iruserok(),iruserok_af(),ruserok(),ruserok_af():
从glibc 2.19开始:
_DEFAULT_SOURCE
Glibc 2.19及更早版本:
_BSD_SOURCE

说明

超级用户使用rcmd()函数通过基于特权端口号的身份验证方案在远程计算机上执行命令。 rresvport()函数将文件描述符返回到具有特权端口空间中地址的套接字。服务器使用iruserok()和ruserok()函数对通过rcmd()请求服务的客户端进行身份验证。 rshd(8)服务器使用了这四个函数(还有其他功能)。

rcmd()

rcmd()函数使用gethostbyname(3)查找主机* ahost,如果主机不存在,则返回-1。否则,将* ahost设置为主机的标准名称,并建立与位于众所周知的Internet端口inport的服务器的连接。

如果连接成功,则将Internet类型为SOCK_STREAM的套接字​​返回给调用方,并以stdin和stdout的形式提供给远程命令。如果fd2p不为零,则将建立控制过程的辅助通道,并将其文件描述符放置在* fd2p中。控制进程将在该通道上从命令(单元2)返回诊断输出,并且还将在此通道上将字节作为UNIX信号编号接受,并转发给命令的进程组。如果fd2p为0,则stderr(远程命令的第2单元)将与stdout相同,并且不提供向远程进程发送任意信号的条件,尽管您可以通过使用out来引起注意。带数据。

该协议在rshd(8)中进行了详细描述。

rresvport()

rresvport()函数用于获取绑定了特权端口的套接字。该套接字适合rcmd()和其他几个函数使用。特权端口是介于0到1023之间的端口。只有特权进程(在Linux上:在用户命名空间中具有CAP_NET_BIND_SERVICE功能的进程,用于管理其网络命名空间)。允许绑定到特权端口。在glibc实现中,此函数将其搜索范围限制在512到1023之间。port参数为value-result:它提供给调用的值用作循环搜索端口范围的起点;返回(成功)时,它包含绑定到的端口号。

iruserok() and ruserok()

iruserok()和ruserok()函数分别获取远程主机的IP地址或名称,两个用户名和一个标志,指示本地用户的名称是否是超级用户的名称。然后,如果用户不是超级用户,它将检查/etc/hosts.equiv文件。如果该查找未完成或不成功,则检查本地用户主目录中的.rhosts,以查看是否允许该服务请求。

如果此文件不存在,不是常规文件,由用户或超级用户以外的任何人拥有,可由所有者以外的任何人写,或者在任何地方进行硬链接,则检查将自动失败。如果在hosts.equiv文件中列出了计算机名称,或者在.rhosts文件中找到了主机名和远程用户名,则返回零。否则,iruserok()和ruserok()返回-1。如果本地域(从gethostname(2)获得)与远程域相同,则仅需要指定计算机名。

如果知道远程主机的IP地址,则应优先使用iruserok()而不是ruserok(),因为它不需要为远程主机的域信任DNS服务器。

*_af() variants

上面描述的所有功能都可用于IPv4(AF_INET)套接字。 " _af"变量采用一个额外的参数,该参数允许指定套接字地址系列。对于这些功能,可以将af参数指定为AF_INET或AF_INET6。另外,rcmd_af()支持AF_UNSPEC的使用。

返回值

rcmd()函数成功返回有效的套接字描述符。错误返回-1,并在标准错误上打印诊断消息。

rresvport()函数在成功时返回有效的绑定套接字描述符。如果发生错误,则返回-1,并根据失败原因设置了全局值errno。错误代码EAGAIN重载,表示"所有网络端口正在使用"。

有关ruserok()和iruserok()返回的信息,请参见上文。

版本

从2.2版开始,函数iruserok_af(),rcmd_af(),rresvport_af()和ruserok_af()函数在glibc中提供。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
rcmd(),rcmd_af()Thread safetyMT-Unsafe
rresvport(),rresvport_af()Thread safetyMT-Safe
iruserok(),ruserok(),
iruserok_af(),ruserok_af()
Thread safetyMT-Safe locale

遵循规范

不在POSIX.1中。存在于BSD,Solaris和许多其他系统上。这些功能出现在4.2BSD中。 " _af"变体是最近添加的,在广泛的系统中不存在。

BUGS

iruserok()和iruserok_af()仅在2.12版以后才在glibc标头中声明。

另外参见

rlogin(1),rsh(1),intro(2),rexec(3),rexecd(8),rlogind(8),rshd(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/