Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

18.4. 설정 예

18.4.1. CVS 설정

이 예제에서는 간단한 CVS 설정과 원격 액세스를 허용하는 SELinux 구성을 설명합니다. 이 예에서는 두 개의 호스트 이름이 cvs-srv 이며 IP 주소가 192.168.1.1 이고 호스트 이름이 cvs-client 인 클라이언트와 IP 주소가 192.168.1.100 인 CVS 서버가 사용됩니다. 두 호스트 모두 동일한 서브넷(192.168.1.0/24)에 있습니다. 이 예제는 cvsxinetd 패키지가 설치되어 있고, SELinux 대상 정책이 사용되고 SELinux가 강제 모드로 실행 중이라고 가정하는 유일한 예입니다.
이 예에서는 전체 DAC 권한을 가진 경우에도 SELinux가 파일 레이블을 기반으로 정책 규칙을 시행할 수 있으며 CVS에서 액세스하기 위해 특별히 레이블이 지정된 특정 영역에만 액세스할 수 있음을 보여줍니다.
참고
1~9단계는 CVS 서버 cvs-srv 에서 수행되어야 합니다.
  1. 이 예에서는 cvsxinetd 패키지가 필요합니다. 패키지가 설치되었는지 확인합니다.
    [cvs-srv]$ rpm -q cvs xinetd
    package cvs is not installed
    package xinetd is not installed
    
    설치되지 않은 경우 yum 유틸리티를 root로 사용하여 설치합니다.
    [cvs-srv]# yum install cvs xinetd
  2. 다음 명령을 root로 입력하여 CVS 라는 그룹을 만듭니다.
    [cvs-srv]# groupadd CVS
    이 작업은 system-config-users 유틸리티를 사용하여 수행할 수도 있습니다.
  3. 사용자 이름이 cvsuser 인 사용자를 만들고 이 사용자를 CVS 그룹의 멤버로 설정합니다. 이 작업은 system-config-users 를 사용하여 수행할 수 있습니다.
  4. /etc/services 파일을 편집하고 CVS 서버에 다음과 유사한 항목이 있는지 확인합니다.
    cvspserver	2401/tcp			# CVS client/server operations
    cvspserver	2401/udp			# CVS client/server operations
    
  5. 파일 시스템의 루트 영역에 CVS 리포지토리를 만듭니다. SELinux를 사용하는 경우 다른 하위 디렉터리에 영향을 주지 않고 재귀 레이블을 제공할 수 있도록 루트 파일 시스템에 리포지토리가 있는 것이 가장 좋습니다. 예를 들어 root로 리포지토리를 저장할 /cvs/ 디렉토리를 생성합니다.
    [root@cvs-srv]# mkdir /cvs
  6. 모든 사용자에게 /cvs/ 디렉토리에 대한 전체 권한을 부여합니다.
    [root@cvs-srv]# chmod -R 777 /cvs
    주의
    이는 예제일 뿐이며 이러한 권한은 프로덕션 시스템에서 사용해서는 안 됩니다.
  7. /etc/xinetd.d/cvs 파일을 편집하고 CVS 섹션의 주석 처리되지 않고 /cvs/ 디렉터리를 사용하도록 구성되어 있는지 확인합니다. 파일은 다음과 유사해야 합니다.
    service cvspserver
    {
    	disable	= no
    	port			= 2401
    	socket_type		= stream
    	protocol		= tcp
    	wait			= no
    	user			= root
    	passenv			= PATH
    	server			= /usr/bin/cvs
    	env			= HOME=/cvs
    	server_args		= -f --allow-root=/cvs pserver
    #	bind			= 127.0.0.1
    
  8. xinetd 데몬을 시작합니다.
    [cvs-srv]# systemctl start xinetd.service
  9. system-config-firewall 유틸리티를 사용하여 포트 2401에서 TCP를 통한 인바운드 연결을 허용하는 규칙을 추가합니다.
  10. 클라이언트 측에서 cvsuser 사용자로 다음 명령을 입력합니다.
    [cvsuser@cvs-client]$ cvs -d /cvs init
  11. 이때 CVS는 구성되었지만 SELinux는 여전히 로그인 및 파일 액세스를 거부합니다. 이를 시연하려면 cvs-client 에서 $CVSROOT 변수를 설정하고 원격으로 로그인하십시오. 다음 단계는 cvs-client 에서 수행해야 합니다.
    [cvsuser@cvs-client]$ export CVSROOT=:pserver:cvsuser@192.168.1.1:/cvs
    [cvsuser@cvs-client]$
    [cvsuser@cvs-client]$ cvs login
    Logging in to :pserver:cvsuser@192.168.1.1:2401/cvs
    CVS password: ********
    cvs [login aborted]: unrecognized auth response from 192.168.100.1: cvs pserver: cannot open /cvs/CVSROOT/config: Permission denied
    
    SELinux가 액세스를 차단했습니다. SELinux가 이러한 액세스를 허용하려면 cvs-srv 에서 다음 단계를 수행해야 합니다.
  12. /cvs/ 디렉토리의 기존 및 새 데이터에 재귀적으로 레이블을 지정하여 cvs_data_t 유형을 지정하도록 /cvs/ 디렉터리의 컨텍스트를 root로 변경합니다.
    [root@cvs-srv]# semanage fcontext -a -t cvs_data_t '/cvs(/.*)?'
    [root@cvs-srv]# restorecon -R -v /cvs
  13. 클라이언트 cvs-client 는 이제 이 리포지토리의 모든 CVS 리소스에 로그인하고 액세스할 수 있어야 합니다.
    [cvsuser@cvs-client]$ export CVSROOT=:pserver:cvsuser@192.168.1.1:/cvs
    [cvsuser@cvs-client]$
    [cvsuser@cvs-client]$ cvs login
    Logging in to :pserver:cvsuser@192.168.1.1:2401/cvs
    CVS password: ********
    [cvsuser@cvs-client]$