# 는 root로 작업을 의미함
1. rlogin 관련 서버 프로그램들이 설정되어 있는지 확인
# ntsysv
여기에 rexec, rlogin, rsh 에 체크가 되어 있어야함
여기에 rlogin 등의 서비스가 없으면 해당 서버 프로그램을 설치해야 합니다.
rloing 클라이언트 프로그램은 rsh-0.17-5.i386.rpm 에 들어있지만 서버 프로그램은 rsh-server-0.17-5.i386.rpm 에 있습니다.
(버전은 운영체제의 버전에 따라 다를 수 있습니다)
# rpm -qa | grep rsh
===> 여기서 rsh, rsh-server 가 둘다 있어야 합니다. rsh는 클라이언트 프로그램, rsh-server는 서버 프로그램입니다. 현재 ntsysv에서 rlogin 서비스가 나오지 않는다면 서버 프로그램이 없을 가능성이 가장 큽니다.
# rpm -ql rsh
/usr/bin/rcp
/usr/bin/rexec
/usr/bin/rlogin
/usr/bin/rsh
/usr/share/man/man1/rcp.1.gz
/usr/share/man/man1/rlogin.1.gz
/usr/share/man/man1/rsh.1.gz
# rpm -ql rsh-server
/etc/pam.d/rexec
/etc/pam.d/rlogin
/etc/pam.d/rsh
/etc/xinetd.d/rexec
/etc/xinetd.d/rlogin
/etc/xinetd.d/rsh
/usr/sbin/in.rexecd
/usr/sbin/in.rlogind
/usr/sbin/in.rshd
/usr/share/man/man8/in.rexecd.8.gz
/usr/share/man/man8/in.rlogind.8.gz
/usr/share/man/man8/in.rshd.8.gz
/usr/share/man/man8/rexecd.8.gz
/usr/share/man/man8/rlogind.8.gz
/usr/share/man/man8/rshd.8.gz
rsh-server 프로그램이 없으면 인터넷에서 다운받아 설치해야 합니다. 물론 cd를 통해서 설치하는것도 가능합니다.
여러곳에 레드햇 미러 사이트가 있는데 아래 사이트를 참고하셔도 됩니다. (여러 ftp 사이트에서 redhat 을 미러링하고 있습니다)
ncftp ...en/os/i386/RedHat/RPMS > pwd
ftp://ftp.nuri.net/pub/redhat/linux/7.3/en/os/i386/RedHat/RPMS/
ncftp ...en/os/i386/RedHat/RPMS > ls rsh*
rsh-0.17-5.i386.rpm rsh-server-0.17-5.i386.rpm
rsh-server 프로그램을 다운로드받아서 먼저 설치를 합니다
# rpm -Uvh rsh-server-0.17-5.i386.rpm
설치가 끝났다면 해당 서비스를 활성화해야합니다.
먼저 ntsysv 에서 해당 서비스를 활성화합니다. 그리고 활성화한것을 서버에서 인식하도록 해야 하고 접근할 ip등을 설정해야 합니다.
redhat 6.x 버전까지는 inetd를 이용했지만 redhat 7.x 버전에서는 xinetd 라는 프로그램을 이용하고 있습니다.
# /etc/init.d/xinetd restart
그런데 xinetd는 각 서비스에 접근할 수 있는 ip등을 지정할 수 있습니다. 현재 외부 인터넷망에는 연결되지 않고 내부에서만 사용하기에 내부에서는 모두
다 접속되도록 설정했다고 생각이 드는데요.
# cat /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
only_from = 0.0.0.0
}
includedir /etc/xinetd.d
위에서 /etc/xinetd.conf 파일은 xinetd를 이용하여 작동을 하는 모든 프로그램에 대한 기본설정이 들어갑니다.
위에서 말을 했듯이 현재 서버가 외부에는 연결되지 않은 것이라면
only_from = 0.0.0.0 이렇게 해놓고 사용을 해도 됩니다.
모든 ip에서 접속가능하다는 뜻입니다. 일반적으로는 해당 서비스만 열어놓으면 되는데 이경우에는 /etc/xinetd.d/ 디렉토리에서 해당 프로그램만 접속할 ip를 지정하면 됩니다. 예를 들어 211.11.11.11 에서만 rlogin을 활성화한다면
only_from = 211.11.11.11
이런 식으로 설정하면 됩니다.
그리고 xinetd.conf 나 /etc/xinetd.d/ 디렉토리에서 변경한 파일이 있으면 xinetd를 다시 띄워주어야 변경한 내용을 반영합니다.
# /etc/init.d/xinetd restart
해당 서비스가 열려있는지 netstat를 이용해서도 확인할 수 있습니다.
# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:exec *:* LISTEN
tcp 0 0 *:login *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
2. rlogin 설정
서로 접근할 호스트를 /etc/hosts.equiv 에 등록합니다. 물론 host 이름으로 사용하려면 아래 server1, server2를 /etc/hosts에 등록해놓아야 합니다.
# cat /etc/hosts.equiv
server1
server2
이제 rlogin 등의 프로그램을 이용하여 확인을 합니다.
# rsh server2 date
# rcp /etc/hosts server2:/tmp
# rlogin server2
# ls /tmp/hosts
---------------------------------------------------
1. rlogin 설정
client의 test, oracle user 가 server 의 oracle 계정에 접근하려고 하는 경우를 예로 들겠습니다.
(client, server는 hosts 파일에 ip를 등록해놓음)
server 에서 /etc/hosts.equiv 가 아래와 같이 설정되었을 경우.
client
호스트이름만 있을 경우 client 와 server 사이에 동일하게 있는 user는 client 에서 server로 동일한 계정으로 접근 가능합니다.
oracle user는 rcp 등의 명령을 사용할 수 있습니다.
[oracle@client oracle]$ rcp a.txt server:/home/oracle/b.txt
그런데 client 의 test 유저는 server의 오라클 계정에 접근하려면 접근 에러가 납니다.
[test@client test]$ rcp a.txt oracle@server:/home/oracle/b.txt
# tail -f /var/log/mesage -> 여기서 root 권한으로 로그파일 볼 수 있습니다
Apr 29 23:14:52 server pam_rhosts_auth[11961]: denied to test@client as oracle: access not allowed
Apr 29 23:14:52 server in.rshd[11961]: rsh denied to test@client as oracle: Permission denied.
server 의 /etc/hosts.equiv 에서 호스트명만 지정하면 동일한 계정만 접근이 된다는 것입니다.
server 에서 /etc/hosts.equiv 가 아래와 같이 설정되었을 경우.
client test
이 경우에는 client 호스트에서 test 사용자는 server 의 root 계정을 제외한 모든 계정에 대해 패스워드 없이 액세스할 수 있습니다. server 의 oracle 외
에도 다른 계정의 디렉토리에도 접근할 수 있다는 말입니다. /etc/hosts.equiv 에서 호스트명 사용자명의 형태로 들어가는데 여기서 사용자명은 서버 기준이 아니라 클라이언트 기준으로 된다는 것입니다. 바로 위에서는 client 의 test 사용자에게 어떤 계정에도 접근이 가능하다는 것이지 server의 test 계정에만 접근 가능하다는 것이 아닙니다.
그러면 개별 계정의 .rhosts 가 하는 역할은? 일단 server 에 위의 /etc/hosts.equiv 파일은 없다고 가정하겠습니다.
server 의 oracle 계정의 .rhosts 가 다음과 같을 경우.
client
이경우에는 client 의 oracle 사용자가 server의 oracle 계정에 접근할 수 있다는 것을 의미합니다. test 사용자는 oracle 계정에 접근할 수 없다는 것입니다.
server 의 oracle 계정의 .rhosts 가 다음과 같을 경우.
client test
이경우에는 client 의 test 사용자가 server의 oracle 계정에 접근할 수 있다는 것을 의미합니다. (그런데 client test 라고만 설정해두면 client 의 oracle 사용자는 접근하지 못합니다)
*********** 결론적으로 이야기를 하겠습니다. ******************
편리하게 사용하려면 아래와 같이 사용하는것이 좋을 것 같습니다.
- server 의 /etc/hosts.equiv 에는 rcp 등으로 접근할 클라이언트의 호스트명만 등록합니다. 그러면 client 와 server 의 동일한 계정은 접근이 가능합니다.
- server 의 접근해야 할 계정(예를 들어 oracle) 의 홈 디렉토리에 .rhosts 파일을 만들어 특정 client의 계정까지 등록합니다. (client test)
- .rhost 파일은 그룹이나 other 사용자가 w 권한을 가지고 있으면 에러가 생기므로 퍼미션을 644로 맞추어놓습니다 (chmod 644 .rhosts)
윈도우 2000에도 rcp 명령이 있어서 테스팅을 해보았습니다. 윈도우 2000의 로그인 사용자는 taejun 이며 서버의 oracle 계정에 접근합니다.
- 윈도우의 hosts 파일에 server의 ip와 호스트명을 입력합니다.
- server 의 /etc/hosts 파일에 윈도우의 ip와 호스트명을 입력합니다. (예 192.1.1.5 windows)
- server 의 /etc/hosts.equiv 파일에 /etc/hosts 파일에 등록한 윈도우의 호스트명을 넣습니다
- server의 oracle 계정에 .rhosts 파일을 만들고 윈도우 호스트명과 taejun 계정을 넣습니다 (windows taejun)
- .rhosts 파일의 퍼미션은 644 로 맞춥니다.
- 이제 윈도우의 taejun 사용자가 server 의 oracle 계정에 rcp 명령등을 사용할 수 있습니다.
** 참고로 /etc/hosts.equiv 에 windows taejun 이라고 등록을 하면 server의 다른 계정에도 접근 가능합니다
마지막 문제는 도스에서 접근할 경우 도스가 어떤 사용자로 접속하느냐를 판단해야 합니다. 가장 좋은 것은 /var/log/message 파일을 살펴보는 것입니다.
# tail -f /var/log/mesage
root 계정으로 계속 위의 메시지 파일을 참고하시면서 테스팅하면 되며 도스에서 접속시 어떤 사용자로 접속하는지를 보고 해당 사용자를 .rhosts 파일에
넣어주면 됩니다. (로그파일에는 접속을 하지 못할 경우 에러가 나며 그에 대한 예제는 위에 있습니다. )
1. rlogin 관련 서버 프로그램들이 설정되어 있는지 확인
# ntsysv
여기에 rexec, rlogin, rsh 에 체크가 되어 있어야함
여기에 rlogin 등의 서비스가 없으면 해당 서버 프로그램을 설치해야 합니다.
rloing 클라이언트 프로그램은 rsh-0.17-5.i386.rpm 에 들어있지만 서버 프로그램은 rsh-server-0.17-5.i386.rpm 에 있습니다.
(버전은 운영체제의 버전에 따라 다를 수 있습니다)
# rpm -qa | grep rsh
===> 여기서 rsh, rsh-server 가 둘다 있어야 합니다. rsh는 클라이언트 프로그램, rsh-server는 서버 프로그램입니다. 현재 ntsysv에서 rlogin 서비스가 나오지 않는다면 서버 프로그램이 없을 가능성이 가장 큽니다.
# rpm -ql rsh
/usr/bin/rcp
/usr/bin/rexec
/usr/bin/rlogin
/usr/bin/rsh
/usr/share/man/man1/rcp.1.gz
/usr/share/man/man1/rlogin.1.gz
/usr/share/man/man1/rsh.1.gz
# rpm -ql rsh-server
/etc/pam.d/rexec
/etc/pam.d/rlogin
/etc/pam.d/rsh
/etc/xinetd.d/rexec
/etc/xinetd.d/rlogin
/etc/xinetd.d/rsh
/usr/sbin/in.rexecd
/usr/sbin/in.rlogind
/usr/sbin/in.rshd
/usr/share/man/man8/in.rexecd.8.gz
/usr/share/man/man8/in.rlogind.8.gz
/usr/share/man/man8/in.rshd.8.gz
/usr/share/man/man8/rexecd.8.gz
/usr/share/man/man8/rlogind.8.gz
/usr/share/man/man8/rshd.8.gz
rsh-server 프로그램이 없으면 인터넷에서 다운받아 설치해야 합니다. 물론 cd를 통해서 설치하는것도 가능합니다.
여러곳에 레드햇 미러 사이트가 있는데 아래 사이트를 참고하셔도 됩니다. (여러 ftp 사이트에서 redhat 을 미러링하고 있습니다)
ncftp ...en/os/i386/RedHat/RPMS > pwd
ftp://ftp.nuri.net/pub/redhat/linux/7.3/en/os/i386/RedHat/RPMS/
ncftp ...en/os/i386/RedHat/RPMS > ls rsh*
rsh-0.17-5.i386.rpm rsh-server-0.17-5.i386.rpm
rsh-server 프로그램을 다운로드받아서 먼저 설치를 합니다
# rpm -Uvh rsh-server-0.17-5.i386.rpm
설치가 끝났다면 해당 서비스를 활성화해야합니다.
먼저 ntsysv 에서 해당 서비스를 활성화합니다. 그리고 활성화한것을 서버에서 인식하도록 해야 하고 접근할 ip등을 설정해야 합니다.
redhat 6.x 버전까지는 inetd를 이용했지만 redhat 7.x 버전에서는 xinetd 라는 프로그램을 이용하고 있습니다.
# /etc/init.d/xinetd restart
그런데 xinetd는 각 서비스에 접근할 수 있는 ip등을 지정할 수 있습니다. 현재 외부 인터넷망에는 연결되지 않고 내부에서만 사용하기에 내부에서는 모두
다 접속되도록 설정했다고 생각이 드는데요.
# cat /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
only_from = 0.0.0.0
}
includedir /etc/xinetd.d
위에서 /etc/xinetd.conf 파일은 xinetd를 이용하여 작동을 하는 모든 프로그램에 대한 기본설정이 들어갑니다.
위에서 말을 했듯이 현재 서버가 외부에는 연결되지 않은 것이라면
only_from = 0.0.0.0 이렇게 해놓고 사용을 해도 됩니다.
모든 ip에서 접속가능하다는 뜻입니다. 일반적으로는 해당 서비스만 열어놓으면 되는데 이경우에는 /etc/xinetd.d/ 디렉토리에서 해당 프로그램만 접속할 ip를 지정하면 됩니다. 예를 들어 211.11.11.11 에서만 rlogin을 활성화한다면
only_from = 211.11.11.11
이런 식으로 설정하면 됩니다.
그리고 xinetd.conf 나 /etc/xinetd.d/ 디렉토리에서 변경한 파일이 있으면 xinetd를 다시 띄워주어야 변경한 내용을 반영합니다.
# /etc/init.d/xinetd restart
해당 서비스가 열려있는지 netstat를 이용해서도 확인할 수 있습니다.
# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:exec *:* LISTEN
tcp 0 0 *:login *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
2. rlogin 설정
서로 접근할 호스트를 /etc/hosts.equiv 에 등록합니다. 물론 host 이름으로 사용하려면 아래 server1, server2를 /etc/hosts에 등록해놓아야 합니다.
# cat /etc/hosts.equiv
server1
server2
이제 rlogin 등의 프로그램을 이용하여 확인을 합니다.
# rsh server2 date
# rcp /etc/hosts server2:/tmp
# rlogin server2
# ls /tmp/hosts
---------------------------------------------------
1. rlogin 설정
client의 test, oracle user 가 server 의 oracle 계정에 접근하려고 하는 경우를 예로 들겠습니다.
(client, server는 hosts 파일에 ip를 등록해놓음)
server 에서 /etc/hosts.equiv 가 아래와 같이 설정되었을 경우.
client
호스트이름만 있을 경우 client 와 server 사이에 동일하게 있는 user는 client 에서 server로 동일한 계정으로 접근 가능합니다.
oracle user는 rcp 등의 명령을 사용할 수 있습니다.
[oracle@client oracle]$ rcp a.txt server:/home/oracle/b.txt
그런데 client 의 test 유저는 server의 오라클 계정에 접근하려면 접근 에러가 납니다.
[test@client test]$ rcp a.txt oracle@server:/home/oracle/b.txt
# tail -f /var/log/mesage -> 여기서 root 권한으로 로그파일 볼 수 있습니다
Apr 29 23:14:52 server pam_rhosts_auth[11961]: denied to test@client as oracle: access not allowed
Apr 29 23:14:52 server in.rshd[11961]: rsh denied to test@client as oracle: Permission denied.
server 의 /etc/hosts.equiv 에서 호스트명만 지정하면 동일한 계정만 접근이 된다는 것입니다.
server 에서 /etc/hosts.equiv 가 아래와 같이 설정되었을 경우.
client test
이 경우에는 client 호스트에서 test 사용자는 server 의 root 계정을 제외한 모든 계정에 대해 패스워드 없이 액세스할 수 있습니다. server 의 oracle 외
에도 다른 계정의 디렉토리에도 접근할 수 있다는 말입니다. /etc/hosts.equiv 에서 호스트명 사용자명의 형태로 들어가는데 여기서 사용자명은 서버 기준이 아니라 클라이언트 기준으로 된다는 것입니다. 바로 위에서는 client 의 test 사용자에게 어떤 계정에도 접근이 가능하다는 것이지 server의 test 계정에만 접근 가능하다는 것이 아닙니다.
그러면 개별 계정의 .rhosts 가 하는 역할은? 일단 server 에 위의 /etc/hosts.equiv 파일은 없다고 가정하겠습니다.
server 의 oracle 계정의 .rhosts 가 다음과 같을 경우.
client
이경우에는 client 의 oracle 사용자가 server의 oracle 계정에 접근할 수 있다는 것을 의미합니다. test 사용자는 oracle 계정에 접근할 수 없다는 것입니다.
server 의 oracle 계정의 .rhosts 가 다음과 같을 경우.
client test
이경우에는 client 의 test 사용자가 server의 oracle 계정에 접근할 수 있다는 것을 의미합니다. (그런데 client test 라고만 설정해두면 client 의 oracle 사용자는 접근하지 못합니다)
*********** 결론적으로 이야기를 하겠습니다. ******************
편리하게 사용하려면 아래와 같이 사용하는것이 좋을 것 같습니다.
- server 의 /etc/hosts.equiv 에는 rcp 등으로 접근할 클라이언트의 호스트명만 등록합니다. 그러면 client 와 server 의 동일한 계정은 접근이 가능합니다.
- server 의 접근해야 할 계정(예를 들어 oracle) 의 홈 디렉토리에 .rhosts 파일을 만들어 특정 client의 계정까지 등록합니다. (client test)
- .rhost 파일은 그룹이나 other 사용자가 w 권한을 가지고 있으면 에러가 생기므로 퍼미션을 644로 맞추어놓습니다 (chmod 644 .rhosts)
윈도우 2000에도 rcp 명령이 있어서 테스팅을 해보았습니다. 윈도우 2000의 로그인 사용자는 taejun 이며 서버의 oracle 계정에 접근합니다.
- 윈도우의 hosts 파일에 server의 ip와 호스트명을 입력합니다.
- server 의 /etc/hosts 파일에 윈도우의 ip와 호스트명을 입력합니다. (예 192.1.1.5 windows)
- server 의 /etc/hosts.equiv 파일에 /etc/hosts 파일에 등록한 윈도우의 호스트명을 넣습니다
- server의 oracle 계정에 .rhosts 파일을 만들고 윈도우 호스트명과 taejun 계정을 넣습니다 (windows taejun)
- .rhosts 파일의 퍼미션은 644 로 맞춥니다.
- 이제 윈도우의 taejun 사용자가 server 의 oracle 계정에 rcp 명령등을 사용할 수 있습니다.
** 참고로 /etc/hosts.equiv 에 windows taejun 이라고 등록을 하면 server의 다른 계정에도 접근 가능합니다
마지막 문제는 도스에서 접근할 경우 도스가 어떤 사용자로 접속하느냐를 판단해야 합니다. 가장 좋은 것은 /var/log/message 파일을 살펴보는 것입니다.
# tail -f /var/log/mesage
root 계정으로 계속 위의 메시지 파일을 참고하시면서 테스팅하면 되며 도스에서 접속시 어떤 사용자로 접속하는지를 보고 해당 사용자를 .rhosts 파일에
넣어주면 됩니다. (로그파일에는 접속을 하지 못할 경우 에러가 나며 그에 대한 예제는 위에 있습니다. )