linux(Ubuntu) uid/gid 바꾸기. (mpd 덕에..)

TL;DR

백문이 불여일견.

# usermod -u <new uid> <username>
# groupmod -g <new gid> <groupname>

늘 신세지고 있는 nixCraft 에게 고마움을 전한다. (물질로도 보답을 해야 할텐데..)


우여곡절 끝에, mpd 서버가 2개가 돼 버렸다.

그냥 따로 따로 쓰면 아무 문제가 없겠지만, 굳이(!) 재생목록을 공유하고 싶어졌다.
다시 말해, mpd A 에서 만든 재생목록을 mpd B 에서도 그대로 쓰고 싶다.. 이런 얘기가 되겠다.

이러려면 동일한 위치(같은 경로명)에 음원파일이 저장돼 있어야 한다.
또, 아마도 save_absolute_paths_in_playlists "no" 가 설정돼 있어야 이 방식이 통하지 않을까? 물론 나는 no 로 해놨다.
예를 들어, mpd A 에서 /var/lib/mpd/music 하에 파일이 있다면, mpd B 도 같은 위치라야 한다. 그렇다고 해서, 꼭 저 위치에 파일을 저장할 필요는 없다. 실제 음원은 다른 곳에 저장돼 있더라도 심볼릭 링크를 걸어주기만 하면 된다.

아무튼..

playlist 는 기본값으로 /var/lib/mpd/playlists 에 저장돼 있는데, 이 디렉토리를 어떻게 공유할까 고민하다가, 그냥 간단하게 nfs 를 쓰기로 했다.
mpd B 는 이 디렉토리를 마운트하고, 재생목록용 디렉토리로 설정해주면 되는 건데..

그/런/데!


복잡한 문제는 여기서 발생했다.

mpd daemon 은 사용자 mpd 에 의해 작동되고, 재생 목록등 모두 자신에게 권한이 있어야만 한다. 모두에게 권한(777)을 주면 읽기는 가능해지지만, 재생 목록 작성 시에는 mpd 사용자 명의로 파일이 생성된다.

$ ll
total 364K
-rw-r--r-- 1 mpd audio  17K 2021-09-08 22:38  2016.06.m3u
-rw-r--r-- 1 mpd audio  23K 2019-07-31 15:31  2016.11.m3u
-rw-r--r-- 1 mpd audio  22K 2019-07-31 15:31  2017-12.m3u
-rw-r--r-- 1 mpd audio 4.2K 2019-07-31 15:31  2017-12-30.m3u
-rw-r--r-- 1 mpd audio  31K 2020-12-02 21:55  2020.11.m3u

이런 식으로, mpd:audio(644) 소유/허가권으로 파일이 생긴다. 여기서 문제가 되는 부분은 group 에 write 권한이 없다는데 있다.

그렇다하더라도, mpd A 와 mpd B 의 mpd 사용자가 같은 uid 를 갖고 있다면 아무 문제가 없다. 이 둘이 다르기에 애매한 문제가 생긴다.

뭔 소린고 하니..

  • mpd A 의 mpd 는 uid 가 114 다.
  • mpd B 의 mpd 는 uid 가 113 이다.
  • 둘 모두 gid 는 29 로 같다.

이 상태에서, mpd A 가 만든 playlist 는 소유권이 114:29, 허가권 644 가 된다.
이걸 nfs 마운트한 mpd B 는, 이 playlist 를 읽을 수는 있지만(Other 4 에 의해), 쓸 수는 없다. uid 114 가 쓴 파일을 uid 113 은 수정할 수가 없기 때문이다.


이를 위해 setgid 를 해보려고 했는데, umask 가 002 로 고정돼 있어, 이게 불가능했다.
로그인이 가능한 사용자라면 umask 를 쉽게 바꿔줄 수 있지만, 이런 시스템 사용자들의 umask 는 바꾸기가 좀 어려운 모양이다.

해당 내용이 stackexchange 에 올라 있다. 여기서 네가지 방법을 제시해주고 있는데, 첫번째와 세번째를 시험해봤으나 모두 실패했다.
두번째와 네번째는 해보지 못했다.

또, 아예 모든 사용자의 기본값을 바꾸는 방법도 있다. /etc/login.defs 에서 umask 값을 지정해주면 된다고는 한다.
하지만, 어쩐지 내키진 않았다.


여기까지 쓰고, 다시 시스템 사용자 umask 를 바꾸는 법을 찾아봤다. 되긴 된다.
하지만, mpd 는 그게 되지 않는다. 아마도 mpd 프로그램에서 의도가 된 모양이다.

아무튼!


그리하여, uid/gid 는 위와 같이 바꿀 수 있다.
nixCraft 에도 있지만, 사용자의 home 디렉토리 아래 uid/gid 는 알아서 바뀐다. 그러나, 다른 곳에 저장돼 있는 파일들은 그대로다. 그건 수동으로 바꿔줘야만 한다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.