Самый легкий способ сделать это из командной строки должно использовать 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
для получения дополнительной информации об истечении пароля.
Вы можете использовать
namei -m /path/to/really/long/directory/with/file/in
, который выведет все разрешения в пути в вертикальном списке.
или
namei -l /path/to/really/long/directory/with/file/in
, чтобы перечислить всех владельцев и разрешения
Когда я добрался от Вашего вопроса, необходимо проверить его на различных пользователей (не только 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
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
-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
path
быть пустым? или /
?
– Gilles 'SO- stop being evil'
09.07.2013, 23:31
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