2013. 1. 18. 20:19

연구실에서 현재 ubuntu 12.10이 설치된 PC와 windows 8 이 설치된 PC를 같이 쓰다 보니, 서로 파일을 주고받을 일이 종종 생긴다. 이걸 전부 메신저나 ftp같은걸로 주고받을려면 상당히 귀찮다. 그래서 windows 홈 디렉토리를 SMB로 공유해서 리눅스에 마운트시키고, 리눅스 홈 디렉토리도 samba로 공유해서 윈도에 네트워크 드라이브로 연결해서 쓰고 있었다.

근데 이게 좀 애매했던 것이, windows 홈 디렉토리를 리눅스에 마운트시키려고 할 때 계정 정보를 파일로 어딘가에 써놔야만 한다는거다. 그것도 plain text로! 그동안은 600으로 퍼미션을 줘서 숨긴다고 숨겼지만 여전히 불안한 것은 사실이었다.

그래서 이번에 뭘 좀 찾아보다 보니 pam_mount란걸 발견해서 잘 쓰고 있었다. 과거형인 이유는, Windows 7 쓰다가 8로 바꾸는 과정에서 계정을 라이브 계정으로 바꿨는데, 이게 라이브 계정이 되면서 계정 자체가 이메일처럼 바뀌면서 리눅스 계정과 호환이 안되는 사태가 발생했기 때문이다 ㅜㅜ

그래도 로컬 계정을 쓴다거나 Windows 7을 쓴다거나 하는 경우는 별 문제가 없으니 일단 팁으로 써본다.

pam_mount 모듈은 linux에서 계정 인증할때 쓰는 pam의 모듈로써, linux 인증 시스템의 정보를 이용해서 인증을 필요로 하는 여러 가지 파일 시스템을 계정 로그인시 자동으로 mount해주는 기능을 가지고 있다. 지원되는 것 중에 굵직한 것 몇 가지만 예를 들어보면, 내가 예전까지 잘 쓰고 있던 SMB(CIFS), 또 ssh 서버만 있으면 특별한 서버가 따로 필요 없는 sshfs 정도가 있고, fuse를 이용한 경우도 적용이 되는 것으로 보인다.

우분투의 경우 pam_mount 모듈을 설치하기가 쉬운데, 간단하게

apt-get install libpam-mount

명령으로 설치 가능하다.

global한 환경 파일은 /etc/security/pam_mount.conf.xml (Ubuntu 12.10 기준)에 들어 있는데, 여기서 luserconf 항목의 주석을 해제해주면 각 사용자별 설정을 홈디렉토리/.pam_mount.conf.xml 파일에서 설정해줄 수 있다. 또 mntoptions 항목에서 mount 명령어에 -o 옵션으로 넘겨지는 옵션 중 허용할 것과 불허할 것을 설정해 줄 수 있는데, 허용되지 않은 옵션을 넘길 경우 pam_mount.conf.xml 파일의 해당 명령을 무시하고 에러메시지를 밷는다. 기본적으로 화이트리스트 기반이며, allow="*" 항목을 추가시켜주면 블랙리스트 기반으로 처리 가능하다.

그리고 실제 마운트시키는 볼륨에 대한 정보는, LDAP등으로 동시에 계정이나 홈디렉토리가 관리되는 계정이 아닌 이상에는 각자 개인별로 설정파일을 갖는 편이 나을텐데, 내가 설정해놓은 CIFS 설정 파일을 첨부한다.

<?xml version="1.0" encoding="utf-8" ?>

<pam_mount>

  <volume
    options="uid=%(USER),dir_mode=0755,file_mode=0644,ip=x.x.x.x,nodev,nosuid"
    user="*"
    mountpoint="/home/%(USER)/Mounts/Windows"
    path="Users"
    server="WINDOWS-PC"
    fstype="cifs"
    />

</pam_mount>

%(USER)는 로그인되는 계정명으로 치환되는 매크로다. user에는 이 설정 파일이 적용되는 유저네임을 쓰면 된다.

주의할 점은, linux에서 사용하는 계정/비밀번호로 마운트를 시도하기 때문에 계정과 비밀번호가 일치해야 한다는 점이다. 현재 내가 못쓰고 있는 이유이기도 하다. ㅜㅜ Windows8에서 계정명에 대한 alias가 지원된다면 좋겠는데... 찾아도 잘 모르겠더라.

좀 더 자세한 정보가 필요하면 pam_mount 공식 홈페이지를 참조하시길...