기본 콘텐츠로 건너뛰기

추천 가젯

Tmux 환경에서 Vim 컴파일 시 발생하는 termio/termios 감지 오류 해결 방법

 리눅스 환경에서 소스코드를 직접 빌드하다 보면 의외의 환경 변수나 터미널 세션 설정 때문에 엉뚱한 빌드 에러를 마주할 때가 있습니다. 대표적인 예로 Tmux 세션 내부에서 Vim 소스를 컴파일할 때 발생하는 termio/termios 감지 오류 가 있습니다. 이번 글에서는 해당 에러가 발생하는 원인과, 단순한 clean 으로는 해결되지 않는 이유 및 올바른 해결 방법을 정리합니다. 1. 문제 원인 Vim의 소스 코드 빌드 과정( configure )은 시스템이 System V 계열인지 Linux 계열인지 판별하기 위해 termio.h 와 termios.h 헤더 파일 및 터미널 인터페이스를 검사(Probe)합니다. 하지만 Tmux 내부(세션 안)에서 컴파일을 진행할 경우 , Tmux가 제공하는 PTY(Pseudo-Terminal) 환경과 TERM=screen 등의 특수한 환경 변수 영향으로 인해 Autoconf가 터미널 인터페이스를 검출하는 과정에서 오동작을 일으킵니다. 그 결과, 실제 시스템 조건과 무관하게 설정 에러를 발생시키게 됩니다. 2. 왜 make clean 으로는 해결되지 않을까? 일반적인 개발 과정에서는 빌드가 꼬였을 때 make clean 을 실행하곤 합니다. 하지만 make clean 은 컴파일된 오브젝트 파일이나 바이너리( .o 파일 등)만 삭제할 뿐, Autotools가 시스템 환경을 탐색한 결과로 남긴 캐시( config.cache 또는 내부 매크로 변수)나 설정 파일들은 그대로 유지 합니다. 일반적인 상황에서는 시스템의 하드웨어/OS 정보가 바뀌지 않기 때문에 이 잔여물이 문제가 되지 않습니다. 그러나 Tmux나 Screen 같은 터미널 멀티플렉서 환경에서 탐색된 왜곡된 정보가 캐시에 박혀버리면, 나중에 Tmux 외부(일반 터미널)로 나와서 빌드를 시도해도 이전의 오염된 캐시 때문에 계속해서 오류가 발생하게 됩니다. 3. 해결 방법 이 문제를 해결하기 위해서는 반드시 Tmux 외부 환경 에서 기존의 오염된 설정 파일을 ...

(Gemini)fstab, cifs mount, 파일을 이용한 보안 로그인.

CIFS 공유 자동 마운트 설정 (보안 강화)

이 문서는 Linux 시스템(Kubuntu 포함)에서 CIFS(SMB/Samba) 네트워크 공유를 /etc/fstab에 등록하여 부팅 시 자동으로 마운트하되, 비밀번호를 /etc/fstab 파일에 직접 노출하지 않고 별도의 자격 증명 파일을 사용하는 보안 강화 방법을 설명합니다.

1. 자격 증명 파일 생성

비밀번호와 사용자 이름을 담을 파일을 생성합니다. 이 파일은 외부인의 접근이 불가능하도록 권한을 엄격하게 제한할 것입니다.

  1. 디렉토리 생성 (선택 사항): 보안을 위해 /etc/samba/credentials와 같이 전용 디렉토리를 만드는 것이 좋습니다.

    sudo mkdir -p /etc/samba/credentials
    
  2. 자격 증명 파일 작성: 예를 들어 /etc/samba/credentials/my_share.cred 파일을 생성하고 다음 내용을 추가합니다.

    sudo vim /etc/samba/credentials/my_share.cred
    

    파일 내용:

    username=당신의_삼바_사용자이름
    password=당신의_삼바_비밀번호
    domain=당신의_삼바_도메인 # (선택 사항: 도메인 환경인 경우에만 추가)
    

    당신의_삼바_사용자이름과 당신의_삼바_비밀번호를 실제 값으로 교체하세요.

  3. 파일 권한 설정 (매우 중요!): 생성한 자격 증명 파일은 root 사용자만 읽을 수 있도록 권한을 설정해야 합니다.

    sudo chmod 600 /etc/samba/credentials/my_share.cred
    

    이 권한 설정이 제대로 되지 않으면 fstab 마운트가 실패하거나 보안 문제가 발생할 수 있습니다.

2. /etc/fstab 설정

이제 /etc/fstab 파일을 편집하여 CIFS 공유를 등록합니다. 이 파일에서는 직접 비밀번호를 쓰는 대신, 위에서 만든 자격 증명 파일을 참조합니다.

  1. /etc/fstab 파일 열기:

    sudo vim /etc/fstab
    
  2. 새로운 마운트 엔트리 추가: 파일의 가장 마지막 줄에 다음 형식을 참고하여 한 줄을 추가합니다.

    //삼바_서버_IP_또는_호스트이름/공유_이름  /마운트_포인트  cifs  credentials=/etc/samba/credentials/my_share.cred,uid=당신의_리눅스_사용자이름,gid=당신의_리눅스_그룹이름,vers=3.0,_netdev  0  0
    
    • //삼바_서버_IP_또는_호스트이름/공유_이름: 마운트하려는 삼바 공유의 네트워크 경로입니다. (예: //192.168.1.100/data 또는 //myserver/share)

    • /마운트_포인트: 공유 폴더를 마운트할 로컬 디렉토리입니다. (예: /mnt/myshare). 이 디렉토리는 미리 생성되어 있어야 합니다. (예: sudo mkdir -p /mnt/myshare)

    • cifs: 파일 시스템 유형입니다.

    • credentials=/etc/samba/credentials/my_share.cred: 위에서 생성한 자격 증명 파일의 경로를 지정합니다.

    • uid=당신의_리눅스_사용자이름: 마운트된 공유 폴더의 파일 소유자를 현재 리눅스 사용자로 지정합니다. 이를 통해 해당 리눅스 사용자가 공유 폴더에 대한 쓰기/읽기 권한을 가질 수 있습니다. (예: uid=myuser)

    • gid=당신의_리눅스_그룹이름: 마운트된 공유 폴더의 그룹 소유자를 현재 리눅스 그룹으로 지정합니다. (예: gid=mygroup)

    • vers=3.0: 사용할 SMB 프로토콜 버전을 명시합니다. 일반적으로 3.0 또는 2.1이 권장되며, 서버 환경에 따라 적절한 버전을 선택합니다. (버전을 명시하지 않으면 간혹 문제가 발생할 수 있습니다.)

    • _netdev: 네트워크 장치가 온라인 상태가 될 때까지 마운트를 기다리도록 지시합니다. 이는 네트워크 부팅 시 마운트 실패를 방지합니다.

    • 0 0: dump와 pass 옵션으로, 일반적으로 자동 마운트에는 0 0을 사용합니다.

    예시 (/mnt/samba_share에 마운트, 사용자 myuser, 그룹 mygroup):

    //192.168.1.10/myshare /mnt/samba_share cifs credentials=/etc/samba/credentials/my_share.cred,uid=myuser,gid=mygroup,vers=3.0,_netdev 0 0
    

3. 마운트 테스트 및 적용

fstab 설정을 저장한 후, 변경 사항이 올바르게 적용되는지 테스트합니다.

  1. 기존 마운트 해제 (선택 사항): 이전에 해당 공유를 수동으로 마운트했다면 먼저 해제합니다.

    sudo umount /마운트_포인트
    
  2. fstab을 이용한 마운트 시도:

    sudo mount -a
    

    이 명령은 /etc/fstab에 정의된 모든 파일 시스템을 마운트합니다. 오류 메시지 없이 성공적으로 실행되면 마운트가 정상적으로 된 것입니다.

  3. 마운트 확인:

    df -h /마운트_포인트
    ```df -h` 명령으로 해당 마운트 포인트가 올바르게 마운트되었는지 확인합니다.
    
    
  4. 시스템 재부팅 후 확인: 모든 설정이 완료되면 시스템을 재부팅하여 부팅 시 자동으로 마운트되는지 최종 확인합니다.

    sudo reboot
    

주의사항

  • 비밀번호 보안: 자격 증명 파일의 권한 설정(chmod 600)은 매우 중요합니다. 이 권한이 제대로 설정되지 않으면 비밀번호가 외부에 노출될 위험이 있습니다.

  • 네트워크 연결: 시스템 부팅 시 네트워크 연결이 완전히 이루어지기 전에 마운트가 시도될 경우 _netdev 옵션이 있더라도 간혹 문제가 발생할 수 있습니다.

  • Samba 버전: vers 옵션은 Samba 서버의 버전에 따라 다르게 설정해야 할 수 있습니다. 일반적으로 3.0 또는 2.1이 널리 사용됩니다.

  • cifs-utils 설치: CIFS 마운트를 위해서는 cifs-utils 패키지가 설치되어 있어야 합니다. (sudo apt install cifs-utils)

댓글