![쉼표가 포함된 명령에 대한 비밀번호 없는 sudo](https://linux55.com/image/44225/%EC%89%BC%ED%91%9C%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EB%8C%80%ED%95%9C%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%20%EC%97%86%EB%8A%94%20sudo.png)
저는 데스크톱 컴퓨터 사용자가 많으며 각 사용자는 원격 삼바 서버에 폴더를 가지고 있습니다. 여기에 설명된 대로 이러한 네트워크 폴더의 사용자별 설치를 설정하려고 합니다.
https://askubuntu.com/questions/67405/auto-mounting-network-shares-per-user
이 기사에서는 sudoers에 다음 줄을 추가할 것을 권장합니다.
user ALL= NOPASSWD: /bin/mount -t cifs -o cred=/home/user/.Music.cred //server/music /home/user/MyMusicFolder
명령은 제대로 작동하지만 특정 그룹이 소유하도록 공유를 마운트해야 합니다. 나는 다음과 같이 줄을 변경해 보았습니다.
user ALL= NOPASSWD: /bin/mount -t cifs -o cred=/home/user/.Music.cred,gid=xxx //server/music /home/user/MyMusicFolder
그러나 ,gid=xxx를 추가한 후에는 sudoers 파일이 더 이상 올바르게 구문 분석되지 않습니다. 이는 NOPASSWD 명령이 실제로 쉼표로 구분된 매개변수 목록을 사용하기 때문이라고 생각하므로 명령에서 쉼표를 이스케이프해야 합니다. 다음과 같이 백슬래시를 사용하여 이 작업을 수행할 수 있습니다.
user ALL= NOPASSWD: /bin/mount -t cifs -o cred=/home/user/.Music.cred\,gid=xxx //server/music /home/user/MyMusicFolder
이제 sudoers 파일이 구문 분석되고 비밀번호를 입력하지 않고도 sudo를 사용하여 mount 명령을 실행할 수 있습니다. 불행히도 이제 다음 오류가 발생합니다.
Sorry, user is not allowed to execute '/bin/ls /home/' as root on ubuntu.
다른 명령을 실행하려고 할 때. \,gid=xxx
줄에서 제거 하면 이 오류가 발생하지 않습니다. 그렇다면 sudoers 파일에서 쉼표를 이스케이프 처리하는 올바른 방법은 무엇입니까?
답변1
sudoers(5)
매뉴얼 페이지 에서 :
명령 인수에 사용되는 경우 ",", ":", "=", "\" 문자는 "\"로 이스케이프해야 합니다.