몇 가지 일반적인 질문을 제기하는 구체적인 질문이 있습니다.
특정 문제:
특정 제한 사항이 적용되는 사용자 집합에 적용되는 sudoers 규칙이 있습니다. 문제의 규칙은 %pusers ALL=(ALL) NOPASSWD: /bin/vi /etc/httpd/conf/*
사용자가 원하는 것 cd /etc/httpd/conf
입니다 . 현재 sudoers는 이를 허용하지 않지만 절대 경로에 대해 vi: 실행을 허용합니다 . sudo가 허용되는지 확인하기 전에 상대 경로가 전체 경로로 변환되지 않는다고 가정하고 있지만 이 문제를 해결하는 이유와 방법을 정확히 모르겠습니다.sudo vi httpd.conf
sudo vi ./httpd.conf
sudo vi /etc/httpd/conf/httpd.conf
저는 RHEL7을 독점적으로 사용하고 있으며 다른 *nix 시스템에서는 이것을 테스트하지 않았지만 비슷한 동작이 나타날 것으로 예상합니다.
일반적인 질문들:
- sudo가 전달된 상대 경로를 처리하는 방법구현하다위의 예처럼 옆으로? (상대 명령 경로가 아니라 명령 실행에 대한 상대 경로입니다.)
- sudoer 규칙과 비교하여 명령을 확인할 때 sudo가 명령의 상대 실행 경로를 인식/변환하도록 하려면 어떻게 해야 합니까?
답변1
일반 사용자에게 sudo
또는 같은 편집자에 대한 액세스 권한을 부여하는 것은 위험합니다.vi
vim
자세한 설명은 이 질문을 참조하세요..
최신 버전 sudo
에서는 다음을 지정할 수 있습니다 sudoers
.
%pusers ALL=(ALL) sudoedit /etc/httpd/conf/*
그런 다음 사용자는 평소와 같이 VISUAL 또는 EDITOR 환경 변수를 사용하여 선택한 편집기를 지정한 다음 다음을 사용할 수 있습니다.
$ sudoedit /etc/httpd/conf/httpd.conf
또는
$ cd /etc/httpd/conf
$ sudoedit httpd.conf
대신 을 사용할 수도 있습니다 sudoedit
.sudo -e
최신 sudo는 이것을 sudoedit
내장 명령으로 인식 sudo
하고 사용할 때 sudo
인수가 편집할 파일의 경로 이름이어야 한다는 것을 이해하고 상대 경로 이름을 처리할 수 있습니다.
일반적인 경우(= 키워드를 사용하지 않는 경우 sudoedit
) 명령 매개변수에 대한 정보는 알려진 바가 없다고 가정하므로 sudo
파일에 특정 매개변수가 포함된 명령을 지정하는 경우에만 sudoers
"멍청한" 문자열 일치를 수행할 수 있습니다 .
sudo
엄밀히 말하면 실제로 Apache 구성 파일에 대한 액세스 권한을 부여할 필요조차 없습니다 . Apache는 구성 파일을 읽을 수 있는 한 구성 파일의 권한이 무엇인지 특별히 신경 쓰지 않습니다(Apache가 포트 < 1024를 사용하는 경우 일반적으로 루트로 시작하므로 파일을 읽는 것은 문제가 되지 않습니다). 이제 그룹이 생겼으니 다음과 같이 할 수 있습니다.
chgrp -R pusers /etc/httpd/conf
chmod g+rws /etc/httpd/conf
chmod g+rw /etc/httpd/conf/*
RHEL7은 기본적으로 "사용자 그룹" 시스템도 사용하므로 사용자 값은 umask
이미 002 또는 007이어야 합니다. 이것이 사실이라면 이러한 간단한 일회성 설정만으로 사용자에게 Apache 구성 파일에 대한 쓰기 액세스 권한을 부여하는 데 필요한 전부입니다. 사용자는 구성 디렉터리에 새 파일을 만들 수도 있으며 자동으로 올바른 그룹 소유권과 권한을 얻게 됩니다.
실제로 이 시나리오에서 구성 파일 권한을 실수로 망칠 가능성이 가장 높은 방법은 새 파일을 루트로 추가하는 것입니다. 루트 사용자는 일반적으로 그룹 쓰기 비트(전통적으로 022 또는 더 엄격한 077)가 없는 umask를 갖습니다. , 루트 권한이 setgid
디렉터리 권한보다 우선할 수도 있습니다.
몇 가지 새로운 습관을 배워야 할 수도 있지만 이 경우 "Apache를 구성하려면 루트여야 합니다"라는 사실을 잊어버리는 것이 실제로는 좋은 일일 수 있습니다. ( sudo
더 많은 감사 추적을 제공한다고 생각한다면 구성 파일을 Git이나 다른 버전 제어 시스템에 두는 것을 고려해 보십시오.)