최근 AWS Linux 서버 인스턴스 유형을 업그레이드했습니다. 여전히 SLES 12 SP1입니다. 그러나 몇 가지 차이점을 발견했는데 그 중 일부는 혼란스럽습니다.
$ sudo -u xyz cmd ...
<it asks for password, causing old scripts to break>
$ sudo -u xyz /path/to/cmd ...
<works>
$ sudo --version
Sudo version 1.8.10p3
Sudoers policy plugin version 1.8.10p3
Sudoers file grammar version 43
Sudoers I/O plugin version 1.8.10p3
$ uname -a
Linux ovcp6hana1 3.12.69-60.64.32-default #1 SMP Wed Feb 15 08:57:04 UTC 2017 (76392c8) x86_64 x86_64 x86_64 GNU/Linux
(sudoer는 "/path/to/cmd"에 대한 Cmnd_Alias 및 인증으로 구성됩니다)
이전 버전은 작동했지만 지금은 작동하지 않습니다. 이전에는 경로가 자동으로 확장되었지만 더 이상 확장되지 않는 것과 같습니다.
이전 양식을 작동하게 하는 방법이 있나요? 감사해요.
- 편집하다
나는 그것이 정확히 동일한 명령, which xyz
즉 /path/to/xyz
.
--편집 2
문제를 발견한 것 같지만 여전히 내 응용 프로그램과의 호환성을 유지할 수 있는 방법이 없습니다. sudo
1.7.6 버전과 1.8.10 버전에는 차이가 있는 것 같습니다. 하지만 sudo 릴리스 노트에서 그런 언급을 찾지 못했습니다.
sudo 1.7을 실행하는 이전 서버에서 비슷한 권한을 가진 다른 사용자를 만들었습니다. 구체적인 권한은 다음과 같습니다. 두 구성 파일의 옵션이 일치합니다.
#added in /etc/sudoers
#userA ALL=(userABC) NOPASSWD: /bin/bash, /usr/local/bin/aws
#with both sudo versions
userA$ sudo -u userABC bash -c "echo \$PATH"
/usr/bin:/bin:/usr/sbin:/sbin
userA$ sudo -u userABC bash -c "which aws"
/usr/bin/aws <<<< but this is not reached in either of the two cases
userA$ which aws
/usr/local/bin/aws <<<<<< this is the right binary
#with sudo version 1.7.6
userA$ sudo -u userABC aws
..the right binary runs, so path must have been set between check and run
#with sudo version 1.8.10
userA$ sudo -u userABC aws
failure! sudo asks for password of userABC
이 프로그램은 /usr/bin/aws
일종의 패키징을 수행합니다. 지금까지 존재하는지 몰랐지만(!) 프로그램을 일시적으로 삭제해도 아무 영향이 없었습니다.
따라서 문제에 대해 더 잘 이해하고 있지만 응용 프로그램을 변경하는 것 외에 다른 옵션이 있는지는 여전히 알 수 없습니다.
답변1
파일의 실행 파일에 대한 전체 경로를 지정하는 규칙을 통해 사용자가 다른 사용자로서 명령을 실행할 수 있도록 허용하는 경우 sudoers
명령줄에도 해당 전체 경로가 필요합니다.
이는 안전 조치입니다.
또한 파일의 명령이 sudoers
명령줄 플래그를 사용하여 지정된 경우 이러한 플래그는필요명령 호출을 전달할 때 나타납니다 sudo
.
답변2
sudoers
이는 실행 파일에 대한 명시적 경로를 호출할 때 파일에서 속성을 적용할 수 있도록 허용 NOPASSWD
하지만 경로 검색에 의존할 때는 그렇지 않은 경우 다른 실행 파일이 발생할 수 있기 때문에 발생합니다 .