답변:
사용자 이름은 고유해야하므로 Owen Hines의 답변 에서 언급 했듯이이 사용자를 만들 수 없습니다. 그러나 여기서 중요한 점은 슈퍼 유저 권한 (모든 가능한 권한)이 username root
이 아니라 UID에 의해 부여된다는 것 입니다.
UID 0을 가진 사용자는 수퍼 유저입니다.
따라서 UID 0을 가진 사용자의 이름이 다르고라는 사용자를 만들면 root
특별한 상태가 없습니다.
루트 태그 위키 를 참조하십시오 !
root
. 좋은 생각은 아니지만 가능합니다. 예를 들어 god
uid로 불리는 수퍼 유저 계정 과 uid 또는 다른 숫자로 0
불리는 일반 사용자 root
를 만들 1000
수 있습니다.
이미있을 것 때문에 그것은 당신을 못하게합니다 root
사용자 .
그러나 Florian Diesch 가 의견에서 말한 것처럼 :
일부 도구는 불만을 표시하지만 라는 이름의 두 번째 사용자를 만들기 위해 항상 수동으로 편집
/etc/passwd
하고 편집 할 수 있습니다 .etc/shadow
root
chown root file
?
먼저 다른 사람들이 언급했듯이 UID 0을 가진 사용자를 다른 것으로 변경하는 방법. 그런 다음 루트 이름과 1000보다 높은 UID로 일반 사용자를 만들 수 있습니다. "정상"작동합니다. 모든 권한 및 핵심 시스템 기능은 사용자 이름이 아닌 UID를 사용합니다. 실제로 이것은 Linux 시스템을 강화하는 첫 번째 단계입니다. (루트를 비활성화하는 것이 훨씬 좋지만 sudo 전에는이 작업을 수행했습니다).
이제 일어날 일에 관해서.
대부분의 경우 아무것도 없습니다. 권한 부여 또는 인증과 관련된 모든 시스템 호출은 내가 알고있는 UID를 사용합니다. 그리고 그것은 한동안 그렇게되었습니다. 평소와 같이 시스템이 계속 실행됩니다. 시스템 도구는 새로운 사용자 이름을 반영하지만 계속 정상적으로 작동합니다. 다시 말해서, 관례 적으로 "뿌리"이며 돌로 설정되지 않습니다.
즉, 제대로 작성되지 않은 도구와 프로그램이 있다고 확신합니다. $ USER 환경 변수를 확인하는 프로그램이 제대로 작동하지 않을 수 있습니다. 일반적으로 이것들은 스크립트와 작은 프로젝트이지만 6 년 전 fdisk에서 한 번의 잘못된 커밋을 추적하는 데 시간을 소비하여 두통을 계속 일으킬 수 있습니다.
이것은 내가 항상했던 일입니다. 쉬운 단계였으며 "예측할 수없는 사용자 이름"의 규칙에 해당합니다. 오늘날에도 같은 목표를 달성 할 수있는 훨씬 더 나은 방법이 있습니다.
다른 사람들이 설명했듯이 UID = 0은 사용자 이름이 "root"가 아니라 "superpowers"에게 사용자에게 제공합니다. 따라서 "원본"의 이름을 바꾸거나 삭제 한 후 "루트"라는 다른 사용자를 만들면 사용자의 슈퍼 상태는 사용자가 제공 한 UID에 따라 달라집니다.
또 다른 흥미로운 아이디어로 연결됩니다 : 동일한 UID를 가진 여러 사용자를 가질 수 있습니다 (파일 시스템 권한의 관점에서 본질적으로 동일한 사용자이지만 쉘 및 홈 디렉토리는 다를 수 있음). 사실, 일부 유닉스 계열 시스템은 다른 수퍼 유저 계정이라는이 toor 다른 설정이 개 수퍼 유저 계정을 가질 수 있습니다 (루트 뒤쪽을).
예, 이론 상으로는 동일한 사용자 이름 또는 동일한 ID를 가진 두 명의 사용자가 없어야합니다. 그리고 표준 유틸리티는 완벽하며 그러한 사용자를 대신하지는 않습니다. 그러나 항상 / etc / passwd를 수동으로 편집 할 수 있습니다.
예를 들어, 나는했다 :
$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'.
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)
보시다시피, 우리는 지금 뿌리입니다! 예, 실제 루트는 아니지만 (uid = 0 아님) 네 글자와 같습니다. 인상적이고 쓸모없는.
또한 다른 수정을 수행 할 수 있습니다. 사용자 이름을 그대로 (yourname 또는 root2) 그대로두고 uid를 변경하십시오.
$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash
(UID 및 GID 필드는 0 임) 이제 거의 의심스럽지 않은 사용자 이름을 가진 일반 (루트가 아닌) 사용자가 있습니다 (또는 더 나은 효과를 위해 사용자 이름을 'johndoe'로 설정). 그러나 실제로이 사용자에게는 강력한 기능이 있습니다!
$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda
Command (m for help):
보시다시피 일반 사용자는 / dev / sda에서 fdisk를 사용할 수 없지만 root2는 무엇이든 할 수 있습니다!
백도어를 제공하기 위해 시스템을 해킹 한 후이 간단한 트릭을 사용하기도합니다. 실제 루트가 자신의 키 / 암호를 변경하더라도 해커는 여전히 uid = 0 인 다른 사용자를 통해 시스템을 완전히 제어 할 수 있습니다.
실제로, 사용자 이름 'root'나 uid = 0도 그 자체로는 마법이 아닙니다. 이것은 단지 관습의 문제입니다. 그리고 그것은 항상 사실이 아닙니다. (이 질문을보십시오 : 루트 계정에 항상 UID / GID 0이 있습니까? ) 커널 코드는 마법입니다. 실제로 사용자 공간 코드 자체 는 루트가 할 수있는 작업을 수행 할 수 없습니다. 루트로 실행 되더라도! 루트 파워는 커널에 있습니다. 예를 들어 "cat / etc / shadow"를 수행하는 경우 (일반적으로 root 만 가능) / bin / cat 프로그램은 여전히 사용자 공간 코드 인 libc open () 함수를 호출하고이 open () 함수는 커널에 대한 시스템 호출을 수행합니다. 그런 다음 커널 자체가 무엇을할지 결정합니다. 예를 들어, 효과적인 사용자가 id == 0 인 경우 커널은 일부 작업을 허용 할 수 있습니다.
이론적으로 커널에서 일부 코드를 변경하고 'www-data'사용자를 다르게 처리하는 경우 일부 작업은 'www-data'사용자에게만 허용 될 수 있으며 루트도 허용되지 않을 수 있습니다.