if 명령을 사용하여 폴더 소유자 가져오기 [닫기]

if 명령을 사용하여 폴더 소유자 가져오기 [닫기]

사람들이 내 스크립트에서 시스템의 중요한 파일을 실수로 삭제하는 것을 방지하고 싶습니다. 해당 명령문을 사용하여 폴더 소유자를 찾는 방법을 아는 사람이 있습니까?

답변1

find . -prune -user "$(id -u)"

.현재 디렉토리가 귀하의 소유인 경우 인쇄됩니다.

다음을 수행할 수 있습니다.

find . -prune -user "$(id -u)" -exec some command \;

또는:

if [ -n "$(find . -prune -user "$(id -u)")" ]; then
  some command
fi

some command현재 디렉터리를 소유한 경우에만 실행됩니다.

test대부분의 일명 구현(일명, 일명, 일명 및 [셸에 내장된 기능 중 하나 포함)에는 (대문자 O)도 있습니다.zshbashkshdashyashbosh-O

if [ -O . ]; then
  some command
fi

쉘에는 소유한 파일을 선택하기 위한 glob 한정자가 zsh있습니다 . U따라서 find다음과 유사한 작업을 수행할 수 있습니다.

if ()(($#)) .(NU); then
  some command
fi

현재 디렉터리 소유자인 POSIXly의 ID를 검색하려면 다음을 수행할 수 있습니다.

ownerid=$(LC_ALL=C ls -lnd . | awk '{print $3}')

또는 내장된 zsh기능을 사용하세요.stat

stat -LH stat . && ownerid=$stat[uid]

또는 GNU를 사용하십시오 find:

ownerid=$(find . -prune -printf %U)

또는 GNU를 사용하십시오 stat:

ownerid=$(stat -c %u .)

또는 BSD의 경우 stat:

ownerid=$(stat -f %u .)

이 정보가 있으면 $ownerid이를 사용할 수 있는 쉘 프로세스의 유효 사용자 ID와 비교할 수 있습니다 "$(id -u)". 일반적으로 말하면, 계정 데이터베이스의 각 사용자 ID에 대해 여러 사용자 이름을 가질 수 있으므로 사용자 이름보다는 사용자 ID를 사용하는 것이 더 좋습니다. 이렇게 하면 사용자 데이터베이스를 쿼리할 필요가 없습니다.

답변2

무엇을 기다립니다? 사람들이 중요한 시스템 파일을 삭제하는 것을 방지하려면 루트로 로그인하지 못하게 하고 스크립트를 setuid로 설정하지 못하게 하세요.

사람들이 자신에게 속하지 않은 파일을 관리하도록 도우려는 경우 그룹 권한을 이해하고 적절한 설정을 사용하십시오. (당신이 무엇을 하고 있는지 모르기 때문에 더 이상 말할 수 없습니다.)

정말로 루트 액세스가 필요한 경우(예: 일반 사용자가 시스템 로그를 관리하도록 허용하려는 경우) "화이트리스트" 접근 방식을 사용하세요. 스크립트는 특정 기준을 충족하는 파일만 관리해야 합니다. 그렇지 않으면 보호하는 것을 잊어버릴 수 있는 중요한 자원이 무엇인지 누가 알겠습니까?

관련 정보