매뉴얼 페이지에 정의된 모든 형태의 매개변수를 포함하여 /bin/date 명령에 대한 전체 루트 액세스 권한을 사용자 또는 그룹에 부여하고 싶습니다.
명시적인 명령 정의가 필요하다는 것을 이해하므로 /etc/sudoers
현재 다음이 있습니다.
%some_group ALL=(root) NOPASSWD: /bin/date
예를 들어 some_group의 모든 사용자가 다음을 실행할 수 있기를 바랍니다.
sudo /bin/date +%T "12:34:56"
게다가 수많은 다른 주장의 조합도 있습니다.
내 질문은 정규식이나 안전한(안전에 중점을 둡니다!) 와일드카드를 사용하여 더 세밀하게 세분화할 수 있는 방법이 있습니까?입니다.
고쳐 쓰다
나는 Cmnd_Alias와 비슷한 것을 달성했습니다. 이것이 없이는 작동하지 않는 이유는 더 자세히 읽을 시간 과 sudoer의 내부 작동을 sudo
제외하고는 미스터리입니다 .
귀하의 구문이 완전히 수용되지는 않았지만 다음을 통해 필요한 것을 달성했습니다.
Cmnd_Alias DATE=/bin/date
%some_group ALL=(root) NOPASSWD: DATE
이것이 바로 정의 그룹의 구성원으로서 나에게 필요한 것입니다.
답변1
GNU/Linux를 사용하고 특정 사용자가 "새로운" 것을 사용할 수 있다고 느끼는 경우 pam_cap.so
일반 사용자는 CAP_SYS_TIME
또는 없이 시스템 시간을 변경할 수 있습니다. 기본적으로 인증(또는 무엇이든)을 위한 세션 모듈로 구성하고 원하는 사용자/기능을 추가한 다음 작업을 수행합니다. 그러나 pam_cap은 아직 그룹 작업을 수행할 수 없으므로 이 작업을 수행하려는 각 사용자에 대해 복사/붙여넣기해야 합니다.sudo
su
ssh
login
/etc/security/capability.conf
setcap CAP_SYS_TIME+ei /bin/date
모든 시스템 사용자가 시스템 시간을 변경할 수 있도록 하려면 모든 pam_cap 항목을 잊어버리고 setcap CAP_SYS_TIME+ep /bin/date
본질적으로 기능적으로 유사한 작업을 수행하여 setuid 비트를 바이너리에 추가하면 됩니다(다시 말하지만 스크립트에서는 해당 작업을 수행할 수 없습니다). (실행 파일을 작성하면 기능 플래그와 setuid/setgid 비트가 커널에 의해 지워집니다.)
date
sudo를 통해 실행하는 것은 상당히 안전합니다(직접 교체 외에 이러한 간단한 유틸리티를 악용할 수 있는 방법은 많지 않지만 공격자는 루트만 쓰기 액세스 권한을 갖고 있는 디렉터리에 쓸 수 있는 방법을 찾아야 합니다. ), 괜찮습니다. 하지만 이 기능을 사용하면 최종 사용자에게 권한을 부여하는 것이 더 원활해 보입니다. ("아, 이걸 sudo해야 해"라고 생각할 필요가 없고 그냥 원하는 대로 하면 작동합니다.) ) 및 제한됨(특정 상승된 권한 세트만 부여함) sudo는 setuid 전용 메커니즘(적어도 현재로서는)이며 이것 또는 저 실행 파일의 관점에서만 생각할 수 있습니다. 해당 파일이 무엇을 하든(바이너리든 작성한 스크립트든) 상관없이 사용할 수 있습니다. 이를 수행하려면 루트 권한이 필요하며 사용자에게 실행 파일에 대한 액세스 권한을 부여한 이유와 관련이 없는 권한도 포함됩니다.
setuid는 오래된 것입니다오래된대부분의 GNU/Linux 및 Unix 구현에서는 본질적으로 사라졌습니다. 전체 루트 액세스 권한을 부여하는 것은 새를 위한 것입니다. 사용자가 시스템 시간을 변경하도록 하려면 왜 CAP_SYS_ADMIN 또는 CAP_NET_ADMIN을 부여합니까? 물론 나쁜 일을 하기 위해 이를 악용하는 방법을 생각할 수는 없지만 /bin/date
대부분의 악용은 발견되고 시연될 때까지 직관적이지 않습니다(소프트웨어에 명백한 악용이 포함되지 않기를 바랍니다).
*BSD 또는 Solaris를 사용하는 경우 "기능" 대신 "권한"이라고 하는 동일한 개념이 있습니다. "기능"은 이미 해당 플랫폼의 보안 관련 메커니즘 이름이기 때문입니다(대략 LxC와 유사). 또는 SELinux, FWIW). 구현 세부 사항은 권한과 Linux 기능에 따라 다르지만 기본 개념은 동일합니다(Solaris 11이 "루트로서의 역할" 보안 모델을 구현하는 방법).
답변2
이를 수행하려면 sudo 명령을 사용할 수 있습니다. 다음과 같이 /etc/sudoers 파일에 다음 규칙을 추가하면:
sudo를 루트로 사용하거나 일반 사용자 계정에서 사용하십시오.
$ sudo visudo
/etc/sudoers
그러면 vi/vim에서 파일이 열립니다. 열리면 다음 줄을 추가하십시오.
Cmnd_Alias NAMEOFTHIS=/bin/date
ALL ALL=NOPASSWD: NAMEOFTHIS
여기서 "users"는 모든 사용자가 구성원인 UNIX 그룹입니다. groups <username>
명령이나 보기 및 파일을 사용하여 /etc/groups
사용자가 구성원인 그룹을 확인할 수 있습니다 /etc/passwd
.
이와 같은 섹션이 있는 경우 여기에 다음과 같이 위의 규칙을 추가합니다.
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
# my extra rules
Cmnd_Alias NAMEOFTHIS=/bin/date
ALL ALL=NOPASSWD: NAMEOFTHIS