차이점이 무엇인지 설명해 주세요.sudo su "사용자 이름"대su "사용자 이름"
어느 쪽이 더 높은 권한을 갖고 있나요? 내가 루트에 로그인하면sudo su "사용자 이름", 나는 하나의 명령에만 루트입니까? 그렇다면 스크립트의 시작 부분은 제대로 작동하지만 나머지는 그렇지 않을 수 있습니까? 그래서 이 경우에는su "사용자 이름"더 높은 권한이 있기 때문에 제안됩니까? 두 명령의 차이점을 설명해 주세요. 감사합니다.
답변1
차이점은 다음과 같습니다.
su <someuser>
사용자에 대한 쉘을 시작합니다someuser
. 루트가 아닌 경우 의 비밀번호를 묻는 메시지가 표시됩니다someuser
.su
(사용자 이름 없이) 사용자에 대한 쉘을 시작합니다root
(루트 비밀번호를 요청한 후).sudo
비밀번호를 묻고 (sudo 권한이 있다고 가정) 루트 권한으로 명령을 실행합니다 (sudo reboot
비밀번호를 묻고 컴퓨터를 재부팅합니다).sudo su <somesuer>
su
루트 권한으로 실행됩니다 . 그래서someuser
의 비밀번호를 묻지 않습니다 . 그러나 그것은 요구할 것입니다당신의sudo 권한을 확인하기 위한 비밀번호입니다. 그 후에는 쉘이 시작됩니다사용자 someuser의 경우.
특권의 측면에서sudo su <someuser>
, 또는 에 의해 열린 쉘에는 차이가 없습니다 su <someuser>
. 이것그렇지 않다쉘 프로세스가 상위 프로세스의 권한으로 승격될 수 없기 때문에 보안 문제가 발생합니다.
너~할 수 있다프로세스 트리를 보면 차이점을 알 수 있습니다. sudo su <someuser>
쇼 (bash 가정):
+───bash───su───bash
쇼 중 su <someuser>
:
+───bash───sudo───su───bash
다음 질문은 아마도 사용자 입력이 필요하지 않은 무인 스크립트에서 비밀번호를 전달하는 방법일 것입니다. 나는 두 가지 옵션이 있다고 생각합니다.
- cron(또는 그 변형)에서 스크립트를 실행하고 루트로 실행합니다.
- 자신의 계정에서 스크립트를 실행하고 다음과 같이 sudo의 -S 옵션을 사용하십시오.
echo <yourpassword> | sudo -S su -l <someuser>
또는 더 나은 방법은 다음과 같습니다echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'
. 비밀번호가 포함되어 있으므로 스크립트를 본인만 읽을 수 있는지 확인하세요. 보다 간접적으로, 비밀번호를 파일에 저장하고 이를 sudo로 분류할 수 있습니다. 그러면 스크립트를 읽을 수 있지만 비밀번호 파일은 읽을 수 없습니다.