저는 비교적 새로운 Linux 사용자입니다. 컴퓨터를 바꾸고 CentOS 6에서 CentOS 7로 시작했습니다.
그래서 파일을 백업하기 위해 기존 하드 드라이브를 새 컴퓨터에 연결했습니다. 이제 파일을 복사하면(그리고 권한과 모든 것을 유지하면서) 파일 소유자가 500(이전 UID였던 것 같습니다)으로 표시됩니다.
새 사용자 이름으로 변경할 수 있는 방법이 있나요? 다른 소유자(예: 501)를 표시하는 파일을 제외하고 싶습니다.
편집하다:
예:
ls -l
total 3
-rw-rw-r--. 1 500 500 210 Jan 10 2012 about.xml
drwxr-xr-x. 2 500 500 4096 May 15 2013 apache
drwxrwxr-x. 2 500 500 4096 Dec 9 2012 etc
이제 chown -R xyz:xyz .
다음과 같이 만들 수 있습니다.
ls -l
total 3
-rw-rw-r--. 1 xyz xyz 210 Jan 10 2012 about.xml
drwxr-xr-x. 2 xyz xyz 4096 May 15 2013 apache
drwxrwxr-x. 2 xyz xyz 4096 Dec 9 2012 etc
하지만 사용자 500을 사용자 "xyz"에 매핑할 수 있는 일종의 명령이 있는지 알고 싶습니다.
감사해요.
답변1
내가 올바르게 이해했다면 다른 사용자가 소유한 파일을 수정하지 않고 사용자 #500이 소유한 디렉터리(또는 루트 디렉터리) 내의 모든 파일의 소유자를 다른 사용자의 소유로 변경하려고 합니다. 이러한 상황은 다른 시스템에서 전체 디렉토리 트리를 복사했기 때문에 해당 트리 내의 파일을 여러 다른 사용자가 소유하고 있지만 현재는 "귀하의" 사용자가 소유한 파일 업데이트에만 관심이 있고 다른 시스템 업데이트에는 관심이 없기 때문에 발생합니다. 사용자 #501 또는 다른 사용자가 소유한 파일입니다.
GNU chown
지원--from=500
-R
이를 수행하기 위해 재귀 옵션과 함께 사용할 수 있는 옵션은 다음과 같습니다.
chown -R --from=500 yourusername /path/here
GNU를 사용하는 경우 이것이 가장 빠른 옵션이 될 것이며 chown
CentOS에서는 이 작업을 수행해야 합니다.
아니면 당신은 사용할 수 있습니다find
모든 시스템에서:
find /path/here -user 500 -exec chown yourusername '{}' '+'
find
/path/here
내부의 모든 파일과 디렉터리는 사용자 #500이 소유한 모든 파일과 디렉터리와 일치하여 재귀적으로 조사됩니다 . 이러한 모든 파일에 대해 chown yourusername file1 file2...
필요한 만큼 여러 번 실행 됩니다 . 명령이 완료되면 사용자 #500이 소유한 모든 파일은 사용자 #500의 소유가 됩니다 . 파일 소유자를 변경 yourusername
하려면 명령을 실행해야 합니다 .root
동일한 명령을 실행하여 find
명령을 실행하지 않고도 낙오자가 있는지 확인할 수 있습니다.
find /path/here -user 500
지금은 파일이 나열되지 않습니다.
중요한 경고: 사용자 #500이 소유한 파일이 심볼릭 링크인 경우 chown
기본적으로 링크 자체가 아닌 심볼릭 링크가 가리키는 파일의 소유자가 변경됩니다. 검사 중인 파일을 신뢰하지 않는다면 이는 보안 취약점입니다. chown -h
이 경우에 사용됩니다.
답변2
이 명령의 한 가지 문제점 chown
(그러나 실제로는 chown()
시스템 호출에 따라 다름)은 보안 조치로서 권한에서 setuid 및 setgid 비트를 제거한다는 것입니다.
ACL도 다루지 않습니다.
이 문제를 해결하기 위한 한 가지 방법은 rsync
디렉토리 자체에서 사용하는 것입니다.고쳐 쓰다모드 및 옵션 --usermap
:
$ ls -ln
total 6732
-rwsr-xr-x 1 1002 1000 6888896 Nov 3 21:50 a
drwxr-xr-x+ 2 1002 1000 4096 Nov 3 21:46 x
$ getfacl -n x
# file: x
# owner: 1002
# group: 1000
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:1002:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
$ sudo rsync -rAau --usermap=1002:1000 . .
$ ls -ln
total 6732
-rwsr-xr-x 1 1000 1000 6888896 Nov 3 21:50 a
drwxr-xr-x+ 2 1000 1000 4096 Nov 3 21:46 x
$ getfacl -n x
# file: x
# owner: 1000
# group: 1000
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:1000:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
파일 소유자와 ACL 항목의 1002가 모두 1000으로 변경됩니다.
또한 심볼릭 링크도 올바르게 처리합니다.