한번은 내 친구(경험이 풍부한 Unix/Linux 사용자)가 루트 쉘을 sh가 아닌 다른 것(예: bash 또는 zsh)으로 설정하면 일부 스크립트에서 쉘이 sh라고 가정하고 이상한 작업을 수행하기 때문에 문제가 발생할 수 있다고 말했습니다. .
그런데 우분투의 기본 루트 쉘은 bash로 설정되어 있고, 젠투도 bash를 사용하고 있는 것 같아요. 누구든지 이 신화를 깨뜨릴 수 있을까요?
답변1
예. 시작하는 동안 시스템에 오류가 발생하면 루트 셸에 로그인할 수 있습니다. 별도의 /usr이 있으면 일부 쉘이 성공적으로 시작되지 않을 수 있습니다.
toor
루트 권한을 유지하기 위해 기본 쉘을 사용하는 동안 비표준 쉘을 사용하여 계정(uid 0, gid 0)을 생성하는 것이 좋습니다 .
답변2
문제가 되지 않습니다.
쉘 스크립트 파일은 실행되는 쉘을 명시적으로 인코딩합니다. 첫 번째 줄에 인코딩되어 있거나 다른 프로그램이나 스크립트가 특정 셸을 실행하고 셸 스크립트를 인수로 사용합니다.
사용자 계정 쉘 정보(로그인 프로세스 제외)를 사용하는 유일한 프로그램은 procmail입니다. 사용자가 메일 서버에 쉘 /bin/false를 설정했다면 정말 흥미로울 것입니다. 하지만 일반적으로 루트로 procmail을 실행하지는 않을 것입니다.
또 다른 후보는 루트의 crontab에 있는 줄입니다. crond 전략이 무엇인지, 어떤 쉘을 사용해야할지 모르겠습니다.
답변3
Bourne Shell용으로 작성된 스크립트는 BASH, ZSH 또는 $foo에서 대부분 문제 없이 실행됩니다.
많은 Linux 시스템에는 원시 sh가 설치되어 있지 않지만 일반적으로 /bin/bash에 대한 심볼릭 링크가 설치되어 있습니다.
일부 스크립트가 쉘이 명시적으로 sh라고 "가정"하는 경우 다시 작성해야 합니다. 스크립트에 필요한 인터프리터를 선택하는 shebang 메커니즘이 있습니다. sh의 경우 #!/bin/sh
첫 번째 줄에 스크립트가 포함되어야 합니다.
기본 셸 설정은 이 컨텍스트와 관련되어서는 안 됩니다.
답변4
사용자의 로그인 셸은 시작 프로세스에 영향을 주지 않습니다. 이 쉘을 원하는 대로 설정할 수 있습니다. 모든 시스템에 bash가 있는 것은 아니며 제대로 작동합니다. 또한 /usr/bin/zsh
잘못 설치된 경우 모든 시스템 쉘은 이어야 합니다 . 그러나 많은 스크립트가 bash를 사용하기 때문에 기본값이 아닌 다른 것을 가리키도록 /bin
변경해서는 안 됩니다. 가리키지 않는 bashisms 및 기타 행동. 참여 하거나 일하십시오 ./bin/sh
#!/bin/sh
#!/bin/bash
zsh
dash