此脚本查找其中包含字符串RECHERCHE的所有用户。我尝试在sudo中运行它并且它有效,但随后在第8行停止(权限被拒绝)。即使从脚本中删除sudo,这个问题仍然会发生。
#!/bin/bash
#challenge : user search and permission rewriting
echo -n "Enter string to search : "
read RECHERCHE
echo $(cat /etc/passwd | grep "/home" | cut -d: -f5 | grep -i "$RECHERCHE" | sed s/,//g)
echo "Changing permissions"
export RECHERCHE
sudo ./challenge2 $(/etc/passwd) &
然后,第二个脚本在后台更改属于RECHERCHE找到的每个用户的每个文件的权限。如果你能帮我弄清楚这不是正确的做法,那将是很好的服务。一世
#!/bin/bash
while read line
do
if [-z "$(grep "/home" | cut -d: -f5 | grep -i "$RECHERCHE")" ]
then
user=$(cut -f: -f1)
file=$(find / -user $(user))
if [$(stat -c %a file) >= 700]
then
chmod 700 file 2>> /home/$(user)/challenge.log
fi
if [$(stat -c %a file) < 600]
then
chmod 600 file 2>> /home/$(user)/challenge.log
fi
umask 177 2>> /home/$(user)/challenge.log
fi
done
我必须知道我在做什么。
答案 0 :(得分:0)
$(
... )
语法表示命令替换,即:它将被paranthesis中的命令输出替换。
由于/etc/passwd
不是命令而只是文本文件,因此您无法执行。
所以,如果你想将/etc/passwd
的内容传递给你的脚本,你只需要调用它:
./challenge2 < /etc/passwd
或者,如果您需要特殊权限来读取文件,例如
sudo cat /etc/passwd | ./challenge2
同样在您的challenge2
脚本中,您使用$(user)
这是错误的,因为您实际上只想展开user
变量:使用花括号这就像${user}
不是你问的问题,但你可能不应该直接阅读/etc/passwd
。
如果要获取用户列表,请使用以下命令:
$ getent passwd
这可能会比/etc/passwd
中存储的用户多,因为您的系统可能会使用其他PAM后端(ldap,...)