Content deleted Content added
revised lede; +"Overview" table and refs; added to "Further reading" section |
GoingBatty (talk | contribs) →top: fixed reference |
||
(37 intermediate revisions by 19 users not shown) | |||
Line 1:
{{Short description|Suite of remote-access utilities}}
{{Infobox Software
| name = Berkeley r-commands
| logo =
| screenshot =
| screenshot size =
| caption =
| developer = [[Computer Systems Research Group]] at the [[University of California, Berkeley]]
| released = {{Start date and age|1981|6}}
| latest release version =
| latest release date =
| operating system = [[Unix]] and [[Unix-like]]
| genre = [[Command (computing)|Command]] [[Software suite|suite]]
| license = [[BSD licenses|BSD]]
| website =
}}
{{IPstack}}
The '''Berkeley r-commands''' are a [[Software suite|suite]] of [[computer program]]s designed to enable users of one [[Unix]] system to [[log in]] or issue [[Command (computing)|commands]] to another [[Unix]] computer via [[TCP/IP]] [[computer network]].<ref>{{cite book |title=Unix System Management: Primer Plus |last=Horwitz |first=Jeff |chapter=Using the Berkeley r-commands Without a Password |chapter-url=https://books.google.com/books?id=-sue_SyjuCMC&pg=PA339 |page=339 |year=2003 |orig-year=2002 |publisher=Sams Publishing |via=Google Books |isbn=978-0-672-32372-0 |access-date=2018-03-04}}</ref> The r-commands were developed in 1982 by the [[Computer Systems Research Group]] at the [[University of California, Berkeley]], based on an early implementation of [[TCP/IP]] (the [[protocol stack]] of the [[Internet]]).<ref name="McKusick">{{cite book |title=Open Sources: Voices from the Open Source Revolution |last=McKusick |first=Marshall Kirk |authorlink=Marshall Kirk McKusick |year=1999 |isbn=978-1-56592-582-3 |chapter=Twenty Years of Berkeley Unix: From AT&T-Owned to Freely Redistributable |chapter-url=http://www.oreilly.com/openbook/opensources/book/kirkmck.html |publisher=O'Reilly & Associates |at=[https://archive.org/details/isbn_9781565925823/page/ Section: "4.2BSD"] |access-date=2018-03-03 |title-link=Open Sources: Voices from the Open Source Revolution }}</ref>
The CSRG incorporated the r-commands into their [[Unix]] [[operating system]], the [[Berkeley Software Distribution]] (BSD). The r-commands premiered in BSD v4.1.<ref name="McKusick"/> Among the programs in the suite are: {{code|rcp}} (remote [[File copying|copy]]), {{code|rexec}} (remote [[Execution (computing)|execution]]), {{code|rlogin}} (remote [[login]]), {{code|rsh}} (remote [[Shell (computing)|shell]]), {{code|rstat}}, {{code|ruptime}}, and {{code|rwho}} (remote [[who (Unix)|who]]).<ref name="McKusick"/><ref>{{cite book |title=Guide to TCP/IP: IPv6 and IPv4 |first1=James |last1=Pyles |first2=Jeffrey L. |last2=Carrell |first3=Ed |last3=Tittel |chapter=Which IP Services Are Most Vulnerable? |chapter-url=https://books.google.com/books?id=sQevDAAAQBAJ&pg=PA659 |page=659 |publisher=Cengage Learning |year=2017 |edition=5th |isbn=978-1-305-94695-8 |via=Google Books}}</ref>
The r-commands were a significant innovation, and became ''de facto'' standards for Unix operating systems.<ref>Casad (2008), p. [https://books.google.com/books?id=q81cs5140_YC&pg=PT346 346]</ref><ref>{{cite book |title=Red Hat Fedora Linux 2 Bible |last=Negus |first=Christopher |publisher=Wiley |isbn=0-7645-5745-9 |oclc=441918216 |chapter=About "r" Commands |chapter-url=https://www.wiley.com/legacy/compbooks/negus/rhbf2/r-commands.html |access-date=2018-03-04|date=2004-07-02 }}</ref> With wider public adoption of the Internet, their inherent security vulnerabilities became a problem,<ref>{{Cite CiteSeerX|citeseerx = 10.1.1.178.8497|title = A Case Study of Using a Secure Network Layer Protocol}}</ref> and beginning with the development of [[Secure Shell]] protocols and applications in 1995, its adoption entirely supplanted the deployment and use of r-commands (and [[Telnet]]) on networked systems.<ref>{{cite journal
|url=https://dash.harvard.edu/bitstream/handle/1/16781951/sshVsTelnetWeb3.pdf?sequence=1|title=How and Why More Secure Technologies Succeed in Legacy Markets: Lessons from the Success of SSH|access-date=13 April 2023|author1=Nicholas Rosasco|author2=David Larochelle|website=Harvard University|format=Conference Paper|doi=10.1007/1-4020-8090-5_18|s2cid=19035681 }}</ref>
{| class="wikitable" style="clear:right; float:right; text-align:center; margin-left:3ex"
|+ Overview
! scope="col" colspan="2" | Service !! scope="col" rowspan="2" | [[Port (computer networking)|Port]] !! scope="col" rowspan="2" | [[Transport protocol|Transport]] || scope="col" rowspan="2" | {{abbr|Refs|References}}
|-
! scope="col" | [[Client (computing)|Client]] !! scope="col" | [[Daemon (computer software)|Daemon]]
|-
| style="text-align:left" | rcp || style="text-align:left" | rshd || 514 || TCP ||
|-
| style="text-align:left" | {{code|rexec}} || style="text-align:left" | rexecd || 512 || TCP || <ref>{{cite book |chapter-url=https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu001/rexsyn.htm |chapter=REXEC command—Execute a command on the remote host and receive the results on your local host |title=z/OS Communications Server: IP User's Guide and Commands |orig-year=1990 |year=2013 |access-date=2018-03-04}}</ref>
|-
| style="text-align:left" | rlogin || style="text-align:left" | rlogind || 513 || TCP || <ref name="NAG">{{cite book |title=FreeBSD Network Administrators Guide |chapter-url=https://people.freebsd.org/~nik/nag/book.html#x-087-2-intro.tcpip.ports |chapter=More on Ports |access-date=2018-03-04}}</ref>
Line 30 ⟶ 42:
|-
| style="text-align:left" | rwho || <ref name="NAG"/><ref name="Casad-350"/>
|}
==Protocol==
The original Berkeley package that provides {{code|rlogin}} also features {{code|rcp}} (remote-copy, allowing files to be copied over the network) and [[Remote Shell|rsh]] (remote-shell, allowing commands to be run on a remote machine without the user logging into it).
As an example, the protocol is as follows:<ref>{{Cite report |url=https://datatracker.ietf.org/doc/rfc1282/ |title=BSD Rlogin |last=Kantor |first=Brian |date=December 1991 |publisher=Internet Engineering Task Force |issue=RFC 1282}}</ref><syntaxhighlight lang="bash">
Client:
<null>
user name on the client<null>
user name on the server<null>
terminal type/terminal baud rate<null>
Server:
</syntaxhighlight>The server would check that the user should have access. If so, it returns a message with nothing in it (not even a [[null character]]), meaning the connection is established.
For example:<syntaxhighlight lang="bash">
Client:
<null>
bostic<null>
kbostic<null>
vt100/9600<null>
Server:
</syntaxhighlight>Both {{code|rlogin}} and {{code|rsh}} share the {{code|/etc/hosts.equiv}} (applies to all users on the server) and {{code|$HOME/.rhosts}} (applies to only the user that puts the file in its home folder) access-control scheme, although they connect to different daemons. {{code|rlogin}} connects to {{code|rlogind}}, while {{code|rsh}} connects to {{code|rshd}}.
{{code|hosts.equiv}} and {{code|.rhosts}} uses the same format. The following shows some aspects of the format:<ref>{{Cite web |title=.rhosts File Format for TCP/IP |url=https://www.ibm.com/docs/en/aix/7.2?topic=formats-rhosts-file-format-tcpip |access-date=2023-11-29 |website=www.ibm.com |language=en-us}}</ref><ref>{{Cite web |title=hosts.equiv File Format for TCP/IP |url=https://www.ibm.com/docs/en/aix/7.2?topic=formats-hostsequiv-file-format-tcpip |access-date=2023-11-29 |website=www.ibm.com |language=en-us}}</ref><syntaxhighlight lang="bash">
host1
host2 user_a
-host3
+@group1 -user_b
-@group2
</syntaxhighlight>This allows all users from host1 to login, user_a from host2 to login, no users from host3, all users on group1 except user_b, and no users on group2.
==Commands==
===rlogin===
{{See also|Telnet}}
{{code|rlogin}} enables a user to log in on another [[Server (computing)|server]] via [[computer network]], using [[Transmission Control Protocol|TCP]] [[network port]] 513.
{{code|rlogin}} is also the name of the [[application layer]] [[Communications protocol|protocol]] used by the software, part of the [[TCP/IP]]
==
{{Further|Remote Shell}}
{{code|rsh}} opens a [[Shell (computing)|shell]] on a remote computer without a [[login]] procedure. Once connected, the user can execute commands on the remote computer through the shell's [[command-line interface]]. {{code|rsh}} passes input and output through the [[standard streams]], and it sends [[standard output]] to the user's [[Virtual console|console]]. Over the network, [[standard input]] and standard out flow through TCP port 514, while [[Standard_streams#Standard_error_(stderr)|Standard Error]] flows through a different TCP port, which the {{code|rsh}} [[Daemon (computing)|daemon]] ({{code|rshd}}) opens.<ref>{{cite book |url=https://books.google.com/books?id=-hF7sqwrcrwC&pg=PA154 |title=CCSP: Secure PIX and Secure VPN Study Guide |last1=Edwards |first1=Wade |last2=Lancaster |first2=Tom |last3=Quinn |first3=Eric |last4=Rohm |first4=Jason |last5=Tow |first5=Bryant|publisher=[[Sybex]] |page=154 |isbn=0-7821-4287-7 |year=2004 |via=Google Books |access-date=2018-03-07}}</ref>
===rexec===
Like {{code|rsh}}, {{code|rexec}} enables the user to run shell commands on a remote computer. However, unlike the rsh server, the {{code|rexec}} server ({{code|rexecd}}) requires login: it authenticates users by reading the username and password (unencrypted) from the [[network socket]].<ref>{{cite web |url=http://www.manpagez.com/man/8/rexecd/ |title=rexecd(8) |website=manpagez.com |access-date=2018-03-03}}</ref> {{code|rexec}} uses TCP port 512.
===rcp===
{{code|rcp}} can copy a file or directory from the local system to a remote system, from a remote system to the local system, or from one remote system to another.<ref name="Farrell">{{cite web |url=https://earthsci.stanford.edu/computing/unix/netcommands/rcp.php |title=rcp |last=Farrell |first=Phillip |date=3 August 2004 |website=earthsci.stanford.edu |publisher=Stanford University School of Earth, Energy & Environmental Sciences |access-date=2018-03-06 |archive-date=2021-02-07 |archive-url=https://web.archive.org/web/20210207204751/https://earthsci.stanford.edu/computing/unix/netcommands/rcp.php |url-status=dead }}</ref> The command line [[Parameter (computer programming)|arguments]] of {{code|cp}} and {{code|rcp}} are similar, but in {{code|rcp}} remote files are prefixed with the name of the remote system:
rcp file.txt subdomain.___domain:~/home/foo/file.txt
As with the Unix copy command [[cp (Unix)|cp]], {{code|rcp}} overwrites an existing file of the same name in the target; unlike {{code|cp}}, it provides no mechanism for warning the user before overwriting the target file.<ref name="Farrell"/> Like {{code|rsh}}, {{code|rcp}} uses TCP port 514.<ref>{{cite web |url=http://sourcedaddy.com/networking/rlogin-rsh-and-rcp.html |title=Rlogin, RSH, and RCP |website=SourceDaddy |access-date=2018-02-18}}</ref>
===rwho===
Just as the [[who (Unix)|who]] command lists the users who are logged in to the local Unix system, {{code|rwho}} lists those users who are logged into all [[multi-user]] Unix systems on the local network.<ref>{{cite web |url=https://www.systutorials.com/docs/linux/man/1-rwho/ |title=rwho (1) - Linux Man Pages |access-date=2018-03-07}}</ref> {{code|rwho}}'s daemon, {{code|rwhod}}, maintains a database of the status of Unix systems on the local network. The daemon and its database are also used by the {{code|ruptime}} program.<ref name="syst_rwhod">{{cite web |url=https://www.systutorials.com/docs/linux/man/8-rwhod/ |title=rwhod (8) - Linux Man Pages |access-date=2018-03-07}}</ref>
===rstat===
{{code|rstat}} returns performance statistics from the kernel.
===ruptime===
Just as the {{code|uptime}} command shows how long a Unix system has been running since the last restart, {{code|ruptime}} requests a status report from all computers on the local network. It then returns the uptime report. If a computer did not respond within the time limit, then {{code|ruptime}} reports that the system is [[Downtime|down]].<ref>{{cite web |url=https://www.systutorials.com/docs/linux/man/1-ruptime/ |title=ruptime (1) - Linux Man Pages |website=SysTutorials |access-date=2018-03-07}}</ref> This information is tracked and stored by the daemon {{code|rwhod}}, which is also used by the rwho command.<ref name="syst_rwhod"/>
==Security==
Those r-commands which involve user authentication ({{code|rcp}}, {{code|rexec}}, {{code|rlogin}}, and {{code|rsh}}) share several serious security vulnerabilities:
* All information, including passwords, is transmitted unencrypted (making it vulnerable to interception).
* The {{code|.rlogin}} (or {{code|.rhosts}}) file is easy to misuse. They are designed to allow logins without a [[password]], but their reliance on remote usernames, hostnames, and IP addresses is exploitable. For this reason many corporate system administrators prohibit {{code|.rhosts}} files, and actively scrutinize their networks for offenders.
* The protocol partly relies on the remote party's {{code|rlogin}} client to provide information honestly, including source port and source host name. A malicious client can forge this and gain access, as the {{code|rlogin}} protocol has no means of [[Authentication|authenticating]] the client is running on a trusted machine. It also cannot check if the requesting client on a trusted machine is the real {{code|rlogin}} client, meaning that malicious programs may pretend to be a standard-conforming {{code|rlogin}} client by using the same protocols.
* The common practice of mounting users' home directories via [[Network File System]] exposes rlogin to attack by means of fake {{code|.rhosts}} files - this means that any of its security faults automatically plague {{code|rlogin}}.
Due to these problems, the r-commands fell into relative disuse (with many Unix and [[Linux]] distributions no longer including them by default). Many networks that formerly relied on {{code|rlogin}} and {{code|telnet}} have replaced them with [[Secure shell|SSH]] and its {{code|rlogin}}-equivalent {{code|slogin}}.<ref name="Sobell">{{cite book|last=Sobell|first=Mark|title=A Practical Guide to Linux Commands, Editors, and Shell Programming|isbn=978-0-13-136736-4|date=2010|publisher=Pearson Education, Inc}}</ref><ref name="iu">{{cite web|title=Unix job control command list|publisher=Indiana University|url=https://kb.iu.edu/d/afnw|accessdate=20 December 2014}}</ref>
==See also==
*[[List of Unix commands]]
==Notes==
{{
==
{{refbegin}}
* {{cite book |title=Sams Teach Yourself TCP/IP in 24 Hours |last=Casad |first=Joe |chapter=Berkeley Remote Utilities |year=2008 |publisher=Pearson Education |chapter-url=https://books.google.com/books?id=q81cs5140_YC&pg=PT346 |isbn=978-0-13-271513-3 |via=Google Books}}
{{refend}}
Line 72 ⟶ 141:
* {{man|1|rlogin|Solaris|remote login}}
{{Unix commands}}
[[Category:Internet protocols]]
|