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:

Источник — «http://www.xgu.ru/wiki/Chmod»