Как проверить, может ли пользователь получить доступ к данному файлу?

Самый легкий способ сделать это из командной строки должно использовать passwd команда с полномочиями пользователя root.

passwd username

От man 1 passwd

NAME
       passwd - update user's authentication token
SYNOPSIS
       passwd  [-k]  [-l]  [-u [-f]] [-d] [-n mindays] [-x maxdays]
       [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
DESCRIPTION
       The passwd utility is used to update user's authentication token(s).

После установки пароля пользователя можно вынудить пользователя изменить его на следующем входе в систему с помощью chage команда (также с полномочиями пользователя root), который истекает пароль.

chage -d 0 username

Когда пользователь успешно проходит проверку подлинности с паролем, Вы устанавливаете, пользователю автоматически предложат изменить его. После успешного изменения пароля пользователь будет разъединен, вызывая переаутентификацию с новым паролем.

Посмотрите man 1 chage для получения дополнительной информации об истечении пароля.

62
09.07.2013, 22:19
4 ответа

Вы можете использовать

namei -m /path/to/really/long/directory/with/file/in

, который выведет все разрешения в пути в вертикальном списке.

или

namei -l /path/to/really/long/directory/with/file/in

, чтобы перечислить всех владельцев и разрешения

75
27.01.2020, 19:32

Когда я добрался от Вашего вопроса, необходимо проверить его на различных пользователей (не только joe), таким образом, в этом случае самый легкий путь - к проверке recursivly это через 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
3
27.01.2020, 19:32
  • 1
    Joe должен выполнить полномочия на каталогах, не полномочия чтения. сценарий –   09.07.2013, 17:20
  • 2
    @EvanTeitelman да, Вы правы. Фиксированный. –  rush 09.07.2013, 17:29
  • 3
    @rush я пытался протестировать его с помощью следующего файла: /root/test/test.txt (полномочия 0755, 0700, и 0777). Я вышел ./script.sh /root/test/test.txt joe и это отозвалось эхом original file /root/test/test.txt is readable for joe. Кроме того, при попытке этого я ввел тестовый dir с опечаткой: ./script.sh /root/tst/test.txt joe, и это отозвалось эхом original file /root/tst/test.txt is readable for joe. Я пропустил что-то? –  Metalcoder 10.07.2013, 20:46
  • 4
    @Metalcoder извините, это - мой отказ. Было одно дополнительное восклицание. Это удалено теперь, можно попробовать его еще раз, это должно хорошо работать теперь. модули –  rush 10.07.2013, 20:50
  • 5
    @rush это работало! То дополнительное восклицание инвертирует результат -r $FILE, право? –  Metalcoder 10.07.2013, 21:10

Можно использовать удар, чтобы сделать это.

$ 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
16
27.01.2020, 19:32
  • 1
    sudo-u joe. Здесь сценарий является названием права файла сценария? таким образом, Ваше сообщение sudo для действия как joe называло сценарий? –  tgkprog 09.07.2013, 17:24
  • 2
    Точно. Я изменил свой ответ для разъяснения этого. –   09.07.2013, 17:31
  • 3
    я сделал небольшую модификацию к своему сценарию для обработки неполных путей. –   09.07.2013, 17:47
  • 4
    @EvanTeitelman С полным путем, сделал Вы означаете инициализировать path быть пустым? или /? –  Gilles 'SO- stop being evil' 09.07.2013, 23:31
  • 5
    @Gilles: Я имел в виду, чтобы это было пусто. В примере, path установлен на /long в первый раз вокруг цикла, который корректен. Если я установил path ни к чему явно (path=)? Кроме того, благодарит упростить мое использование tr. –   09.07.2013, 23:58

Вот моя попытка обеспечения этой функциональности. Я решил использовать stat, a 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
1
27.01.2020, 19:32

Теги

Похожие вопросы