리눅스 시스템 계정 전환에 따른 home 디렉토리 복제 스크립트 문의

   조회 3814   추천 0    

안녕하세요.


리눅스 시스템 계정을 전환해야 해서 

새로운 계정은 생성 했습니다. 문제는


home 디렉토리에서 하는 작업이 있어 홈 디렉토리를 복사하려 했으나

디렉토리 및 파일 및 하부 구성에 각기 다른 소유자와 이전 계정 존재로 인해

다중 서버 작업이 어려움을 겪습니다.

chown -R 을 쓰면 일괄 변환이 되어버려서 고심인데

가능한 스크립트가 있을까요?


조건은 특정 디렉토리(/home/계정) 하부의 모든 파일 및 디렉토리 복사 하면서

root 및 여타 계정 소유 및 그룹은 유지하고 특정 계정 (이전계정) 만 신규 생성한 계정으로

소유권 및 그룹 을 변경하는 조건입니다.


ex ) /home/oldinit/dir -> /home/newinit/dir

oldinit:oldinit       file   ->  newinit:newinit    file

root:oldinit       file2  ->    root:newinit    file2


짧은글 일수록 신중하게.
구차니 2019-06
https://serverfault.com/questions/440461/script-to-run-chown-on-all-folders-and-setting-the-owner-as-the-folder-name-minu

돌려안보고 검색만 해본거라 확인해보시기 바랍니다.
디렉토리 명이 계정명이니까 디렉토리 명으로 chown 하도록 for문 짜면 될듯 합니다만...
조금 더 좋게 짜려면 /etc/passwd와 /etc/groups를 이용해서 하는게 더 좋지 않을까 합니다.
     
겨울나무 2019-06
근접한 내용으로 보여 분석하고 있지만 어렵네요. 언어 + 스크립트 한계가 있네요.
엠브리오 2019-06
/etc/passwd 및 /etc/groups 에 사용자가 할당 받은 번호 및 그룹번호가 적혀 있습니다.

사용자 계정이름과 번호가 새로 옮긴 시스템에서도 일치해야 문제가 발생하지 않습니다.
     
겨울나무 2019-06
단일시스템 내부복제입니다. 말그대로 계정 추가 후 추가계정을 실사용하는 내용입니다.
          
엠브리오 2019-06
tar 로 묶어서 tar 로 풀면 그대로 유지된채 복사됩니다.
https://sancs.tistory.com/4
실전에서 많이 써먹는 방법이죠.

그 다음에 user id 및 group id를 써서 해당되는 파일만 바꿔주면 되겠죠.

리눅스의 find 명령어 에는 user id 및 group id 로 찾는 옵션이 있습니다.
https://www.unixtutorial.org/find-files-which-belong-to-a-user-or-unix-group
               
겨울나무 2019-06
cp 명령 옵션으로 훨씬 편하게 속성 유지한 채 복사 합니다. cp -p
저는 소유 및 그룹을 선별해서 홈디렉토리에 맞게 변경하길 원하는겁니다.
                    
엠브리오 2019-06
sudo find ./ -user oldinit  -group oldinit -exec chown  newinit:newinit {} \;
sudo find ./ -user root  -group oldinit -exec chown  root:newinit {} \;

해당 디렉토리에 가서 위처럼 입력하면 끝날것 같군요.

물론 책임은 못집니다. 제대로 동작하는지 테스트 해보려면 다른 테스트용 서버에서 미리 돌려보세요.
                         
겨울나무 2019-06
친절하게 작성까지 해주셨는데 자꾸 댓글 달게되어 죄송합니다.
예를 든것은 예를 든것 뿐이라 비단 저 2 경우만 있을 경우가 아닐수도 있습니다. 작업해야 할 대상 시스템들이
상당해서 변수가 많습니다. 특히나 접속계정 홈디렉토리에는요. 하지만 좋은 참고가 될 수 있을겁니다. 차분히 테스트 해봐야겠습니다.
구차니 2019-06
단순하게 추가하실 내용이라면 다음 생성분에 대해서는
/etc/skel에 넣어두시면 자동으로 복제 됩니다.
cp로는 모르겠는데 tar 기능에 그런게 있습니다. man page에서 --owner-map, --group-map 옵션에 대한 설명을 읽어보세요.
하셀호프 2019-06
질문이 좀 이해가 잘 가지 않아서요
/home 밑에 사용자가 유저1, 유저2, 유저3가 있는데
유저4를 생성해서 유저3에 있는 정보를 유저4에 복사해서 유저4 소유로 하고 싶다 - 뭐 이런 상황인가요?
아니면 /home 디렉을 가지고 있는 하드를 교환하고 싶으신건가요?
     
겨울나무 2019-06
예 까지 들어 최대한 쉽게 설명하였는데요.

단일 시스템에 root 제외한 접속계정을 전환하려고 계정 추가 하였고 기존 계정에서 작업하는 내용들이 기존 계정 홈 디렉토리에 존재하고
그것을 새로운 계정으로 복사하는 작업입니다. 당연히 기존 홈 디렉토리에는 기존 계정에 대한 소유권 과 그룹이 있고 일부는 root 계정으로 사용하는
파일 및 디렉토리도 존재하기에 이것의 속성 중 root나 다른 계정은 유지 기존 계정 소유나 그룹은 모두 새로 생성한 디렉토리에서는 새로운 계정이 사용할 수가 없으므로 이를 새로운 계정으로 기존계정 소유파일 및 그룹 혹은 그 반대의 경우에도 기존계정을 새로운 계정으로 소유권 및 그룹 변경하려는 작업을
다량작업 하므로 이것에 대한 스크립트를 알아보고 있는 중입니다.
          
하셀호프 2019-06
/home 밑에 계정이 (예를 들어) 2만개가 있는데 그중 일부는 root 계정으로 사용하는 계정도 있구요
그중 5천개는 계정을 유지하고 1만5천개는 새로운 계정을 만들어서 복사해서 사용하고 싶구요
그러니까 root 계정으로 사용하는 계정과 유지하는 5천개 계정은 그대로 하고 나머지 1만5천개 계정은 새로운
계정으로 소유권을 바꾸고 싶다는 상황인가요?
혹은 각 계정마다 root 권한으로 사용하는 파일이 있는데 이거를 유지하고 싶다는 말씀이신가요?
               
겨울나무 2019-06
계정과 소유권 그룹 의 관계를 먼저 정리해야 할 듯 합니다.
/home 밑에 계정이 있다는 전제가 일단 이상합니다. 계정은 시스템에서 관리하며 /etc/passwd 에서 정의해서 존재합니다.
/home 밑에 디렉토리와 파일이 있는데 이중에는 소유자가 old 그룹이 old 인 파일 및 디렉토리도 있고 어떤건 소유자가 root 이고
그룹이 root 일 경우도 있고 어떤건 소유자가 bbb 그룹이 bbb 인 것도 있고 이 홈디렉토리는 /home/new 안에 있습니다. 이 중 old 가 소유자 이거나
그룹 일 경우 이를 모두 new 로 바꿔야 하는데 각양 각색의 시스템들이라 존재 변수가 많아서 스크립트를 원했던 겁니다.
빈경윤 2019-06
특정 디렉토리에서 특정 사용자만 찾아서 소유권을 변경하는 방법을 찾으시는건가요?


# /home/2cpu 디렉토리 하위에서
# user/group 을 각각 daemon 에서 nobody 로 변경하기

find /home/2cpu -user daemon -exec ls -l {} \;|more
find /home/2cpu -user daemon -exec chown -v nobody {} \;|more

find /home/2cpu -group daemon -exec ls -l {} \;|more
find /home/2cpu -group daemon -exec chgrp -v nobody {} \;|more
     
겨울나무 2019-06
제가 설명을 너무 장황하게 했나 봅니다. 말씀처럼 한줄로 설명 되는것을...

예로 드신 find 문 위에 엠브리오님 것과 더해서 테스트 열심히 해보겠습니다.

감사합니다.
     
겨울나무 2019-06
빈경윤님 정말 감사합니다.

정리해서 계정과 그룹은 통일해도 되서

find /home/2cpu -user daemon -exec chown -v nobody:nobody {} \;|more

로 결정 했습니다.
          
빈경윤 2019-06
앞서 엠브리오님과 다른분들이 상황을 하나씩 구체화시켜나간 덕분에 저도 질문을 보다 정확히 이해할 수 있었던 것 같습니다.    잘 해결되셨으면 다행입니다.
하셀호프 2019-06
이런 작업은 root 계정에서 해야 할 텐데 스크립트에서 문제가 발생하면 전체가 엉망이 되겠네요
검증하는 것도 큰일이겠습니다


QnA
제목Page 1449/5709
2015-12   1682901   백메가
2014-05   5148314   정은준1
2018-08   3816   빠시온
2014-03   3816   김민수2
2017-10   3816   스톤콜드
2015-02   3816   isaiah
2016-06   3816   현철파워
2014-11   3816   Psychophysi…
2015-01   3816   epowergate
2018-01   3816   박준영2
2018-08   3816   신은왜
2017-07   3816   OTEP
2019-08   3816   긁긁
2017-08   3816   song05
2016-09   3816   초보IT
2017-03   3816   jang
2020-02   3816   아마데우쓰
2020-03   3816   송진홍
2015-01   3816   송주형
2020-12   3816   정의석
2015-02   3816   장동건2014
2021-04   3816   Sakura24