/etc/sudoers 파일에 예외를 추가한 후에도 비밀번호를 묻는 메시지가 계속 표시되는 이유는 무엇입니까?

/etc/sudoers 파일에 예외를 추가한 후에도 비밀번호를 묻는 메시지가 계속 표시되는 이유는 무엇입니까?

사용자에게 rm 명령을 사용할 수 있는 권한을 특정 디렉토리에만 부여하려면 어떻게 해야 합니까? 이것을 /etc/sudoers 파일에 추가해 보았습니다.

myuser ALL = NOPASSWD : /bin/rm ???? /usr/java/jboss/standalone/vfs/*

하지만 해당 사용자로 로그인하고 명령을 실행하면

/bin/find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec sudo rm -rf {} \;

시스템에서 비밀번호를 입력하라는 메시지를 표시합니다.

[sudo] password for myuser:

작동하게 하려면 또 무엇을 변경해야 합니까?

답변1

sudoers에는 "stalone"이 있고 find 명령에는 "standalone"이 있습니다. 이것이 문제일 수 있습니다.

답변2

이 sudo 명령 a를 사용하는 것도 /bin/rm -rf /usr/java/jboss/standalone/vfs/file /something_other_might_be_whole_filesystem허용됩니다(roaima가 주석에서 말한 것과 유사).

이 작업을 수행해야 한다면 와일드카드가 없으므로 전체 find 명령을 sudoers 아래에 두는 것이 좋습니다.

아마도 더 나은 해결책은 디렉토리의 소유권이나 배치를 변경하는 것입니다.내 사용자위 디렉터리에 대한 쓰기 권한이 있는 그룹.

답변3

다른 사람들이 이미 지적했듯이, 명령을 사용하면 사용자는 시스템에서 디렉터리 트리를 삭제할 수 있습니다. 사용자에게 특정 디렉터리의 파일을 삭제할 수 있는 권한을 부여하려면 래퍼 스크립트를 작성해야 합니다. sudoers 파일에서:

myuser ALL = NOPASSWD: /usr/local/sbin/rm_jboss_vfs

존재하다 /usr/local/sbin/rm_jboss_vfs:

#!/bin/sh
for x do
  case "$x" in
    */../*|*/..) echo >&2 "$0: .. forbidden"; exit 3;;
    /usr/java/jboss/standalone/vfs/[!.]*) rm -rf -- "$x";;
    *) echo >&2 "$0: only absolute paths under /usr/java/jboss/standalone/vfs are permitted"; exit 3;;
done

/usr/java/jboss/standalone/vfs심볼릭 링크가 존재하는 경우 사용자는 여전히 이스케이프할 수 있습니다. 더 안전한 방법은 디렉토리로 루트를 이동하는 것입니다. rm다음과 같은 내장 명령이 포함된 셸을 사용하세요 .허리띠.

#!/bin/sash
set -e
-chroot /usr/java/jboss/standalone/vfs
for x do
  case "$x" in
    /usr/java/jboss/standalone/vfs/[!.]*) -rm -rf -- "$x";;
    *) echo >&2 "$0: only absolute paths under /usr/java/jboss/standalone/vfs are permitted"; exit 3;;
done

암호 프롬프트의 문제는 사용자가 암호 프롬프트와 함께 이 명령을 실행할 수 있도록 하는 파일에 다른 항목이 있기 때문에 발생할 수 있습니다. 두 항목이 일치하면 sudo는 마지막 항목을 사용하므로 모든 NOPASSWD:항목이 마지막에 배치됩니다. 바라보다비밀번호를 묻지 않고 루트로 특정 프로그램을 어떻게 실행할 수 있나요?


권한 에스컬레이션을 사용하는 대신 사용자에게 필요한 작업을 수행할 수 있는 권한을 부여하십시오. Unix 권한은 너무 대략적입니다. 사용자에게 디렉터리의 파일을 삭제할 수 있는 권한을 부여하려면 해당 디렉터리에 대한 쓰기 권한(특히 파일을 생성할 수 있는 권한)을 부여해야 합니다. 최소한 제거 스크립트를 루트로 실행하지 말고 그룹으로 실행 jboss_vfs_deleters하고 그룹에 관련 디렉터리에 대한 쓰기 권한을 부여하십시오. 디렉터리 권한을 설정합니다.

setfacl -d -R -m group:jboss_vfs_deleters:rwX /usr/java/jboss/standalone/vfs
setfacl -R -m group:jboss_vfs_deleters:rwX /usr/java/jboss/standalone/vfs

sudoers파일 에서 :

myuser ALL = (jboss_vfs_deleters) NOPASSWD: /usr/local/sbin/rm_jboss_vfs

실행 sudo -g jboss_vfs_deleters /usr/local/sbin/rm_jboss_vfs …(권한이 없는 래퍼 스크립트에서 이를 숨길 수 있음)

그룹 사용의 단점은 더 이상 사용할 수 없으며 chroot덜 강력한 명명 기반 필터링 방법을 사용해야 한다는 것입니다.

/usr아래 파일은 정상적인 동작 중에는 수정하지 마시기 바랍니다. 이 파일들이 무엇인지는 모르지만, 일반적인 작업에서 수정한다면 아마도 /var.

관련 정보