Chmod
Материал из Xgu.ru
|
Если вы изучаете иностранный язык, прочитайте про скрипт new-words. |
|
Эта статья находится в процессе написания. |
Чтобы передать права в формате ls -l (rwxrwxrwx) в качестве аргумента chmod их можно преобразовать при помощи простой функции:
rwx2dig() { ( echo ibase=2; echo obase=8; sed s/^.// | tr -- -rwx 01 ) | bc; }
Полученное число может использовать как аргумент для chmod:
# ls -l /etc/passwd | awk '{print $1}' | rwx2dig
644
# find /bin /boot /etc /initrd /lib /sbin /usr /var -ls \
| egrep -v "/usr/src" \
| awk '{print$3" "$11}' \
| sed 's/^.//' \
| while read var1 var2
do
echo "chmod -v `(echo ibase=2; echo obase=8; echo $var1 \
| tr -- -rwxsStT 01 )|bc` \"$var2\" 1>> /tmp/log.perm 2>>/tmp/log.err.perm"
done
chmod -v 755 "/bin" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/dd" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/cp" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/df" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/ed" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/ip" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/ln" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/ls" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 777 "/bin/nc" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 777 "/bin/mt" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
chmod -v 755 "/bin/mv" 1>>/tmp/log.perm 2>>/tmp/log.err.perm
В итоге:
find /usr/bin/sudo -ls \
| grep -v \/usr\/src \
| awk '{print $3" "$11" ; chown "$5":"$6" "$11}' \
| sed 's/^./u=/' \
| while read var1 var2 var3 var4 var5 var6 var7
do
echo "$var4 -v $var5 \"$var6\" $var3 chmod -v `echo $var1 \
| sed 's/\(.....\)\(...\)\(...\)/\1\,\g\=\2\,o\=\3/' \
| sed 's/\(.\{4\}s\)/\1x/' \
| sed 's/\(.\{11\}s\)/\1x/' \
| sed 's/\(.\{16\}t\)/\1x/' \
| tr -- ST st \
| tr -d '-'` \"$var2\""
done \
| ssh 192.168.7.249
root@192.168.7.249's password:
изменен владелец `/usr/bin/sudo' на root:root
права доступа `/usr/bin/sudo' изменены на 4755 (rwsr-xr-x)
# find /bin /boot /etc /initrd /lib /sbin /usr /var -ls \
| egrep -v "/usr/src|/usr/share" \
| awk '{print $3" "$11" ; chown "$5":"$6" "$11}' \
| sed 's/^./u=/' \
| while read var1 var2 var3 var4 var5 var6 var7
do
echo "$var4 -v $var5 \"$var6\" 1>/dev/null 2>/dev/null $var3 chmod -v `echo $var1 \
| sed 's/\(.....\)\(...\)\(...\)/\1\,\g\=\2\,o\=\3/' \
| sed 's/\(.\{4\}s\)/\1x/' \
| sed 's/\(.\{11\}s\)/\1x/' \
| sed 's/\(.\{16\}t\)/\1x/' \
| tr -- ST st \
| tr -d '-'` \"$var2\" 1>/dev/null 2>/dev/null"
done \
| ssh 192.168.7.249
root@192.168.7.249's password:
