* nix 사용자 권한은 매우 간단하지만 주어진 파일에 도달하기 전에 모든 상위 디렉토리 액세스를 고려해야 할 때 상황이 복잡해질 수 있습니다. 사용자에게 충분한 권한이 있는지 어떻게 확인할 수 있습니까? 그렇지 않으면 어떤 디렉토리가 액세스를 거부합니까?
예를 들어, user joe
및 file 이라고 가정 하십시오 /long/path/to/file.txt
. 해도 file.txt
777 chmoded 한, 조 여전히 액세스 할 수 있습니다 /long/
다음, 그리고 /long/path/
다음 /long/path/to/
전에. 내가 필요한 것은 이것을 자동으로 확인하는 방법입니다. 경우 joe
에 액세스 할 수 없습니다, 나 또한 그가 거부되었습니다 어디 있는지 알고 싶습니다. 그는 액세스 할 수 /long/
있지만 액세스 할 수는 없습니다 /long/path/
.
답변
당신이 사용할 수있는
namei -m /path/to/really/long/directory/with/file/in
경로의 모든 권한을 세로 목록으로 출력합니다.
또는
namei -l /path/to/really/long/directory/with/file/in
모든 소유자와 권한을 나열
답변
bash를 사용 하여이 작업을 수행 할 수 있습니다.
$ cat check-permissions.sh
#!/bin/bash
file=$1
# Handle non-absolute paths
if ! [[ "$file" == /* ]] ; then
path=.
fi
dirname "$file" | tr '/' $'\n' | while read part ; do
path="$path/$part"
# Check for execute permissions
if ! [[ -x "$path" ]] ; then
echo "'$path' is blocking access."
fi
done
if ! [[ -r "$file" ]] ; then
echo "'$file' is not readable."
fi
$ ./check-permissions.sh /long/path/to/file.txt
특정 사용자에 대해이를 확인하려면을 사용할 수 있습니다 sudo
.
sudo -u joe ./check-permissions.sh /long/path/to/file.txt
답변
귀하의 질문에서 얻은 것처럼 다른 사용자 (joe뿐만 아니라)를 확인해야하므로 가장 쉬운 방법은 sudo를 통해 다음과 같이 반복적으로 확인하는 것입니다.
FILE=$1 ; T_USER=$2 ;
if sudo -u $T_USER [ -r "$FILE" ] ; then
echo "original file $1 is readable for $T_USER"
else
while sudo -u $T_USER [ ! -x "$FILE" ] ; do FILE=$(dirname "$FILE") ; done
echo "only $FILE is readable for $T_USER"
fi
용법:
./script.sh /long/path/to/file.txt joe
답변
이 기능을 제공하려는 시도는 다음과 같습니다. stat
, while
루프 및 을 사용하기로 선택했습니다 dirname
.
이 스크립트를 만들었습니다 walkdir.bash
:
#/bin/bash
cwd="$1"
while [ "x$cwd" != x/ ]; do
info=`stat "$cwd" |grep "Access: ("`
printf "%s : %s\n" "$info" "$cwd"
cwd=`dirname "$cwd"`;
done
당신은 다음과 같이 실행합니다 :
$ walkdir.bash "/home/saml/blog/vmware_networking_tutorial/url.txt"
Access: (0664/-rw-rw-r--) Uid: ( 500/ saml) Gid: ( 501/ saml) : /home/saml/blog/vmware_networking_tutorial/url.txt
Access: (0775/drwxrwxr-x) Uid: ( 500/ saml) Gid: ( 501/ saml) : /home/saml/blog/vmware_networking_tutorial
Access: (0775/drwxrwxr-x) Uid: ( 500/ saml) Gid: ( 501/ saml) : /home/saml/blog
Access: (0700/drwx------) Uid: ( 500/ saml) Gid: ( 501/ saml) : /home/saml
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) : /home