chmod

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Не указан параметр (1)


[править] Описание

Программная утилита, которая служит для изменения флагов модификаторов файла.

Модификаторы доступа или права доступа в Unix системах состоят из трех групп по три разряда. Первая группа описывает права владельца, вторая группы и третья всех остальных. Первый разряд доступ на запись, второй - чтение и третий на исполнение.

Примером числовой записи может служить '755', которая эквивалентна записанной выше строковой записи: каждое право имеет числовой код и может быть задано вручную:

  • 400 — владелец имеет право на чтение;
  • 200 — владелец имеет право на запись;
  • 100 — владелец имеет право на выполнение;
  • 40 — группа имеет право на чтение;
  • 20 — группа имеет право на запись;
  • 10 — группа имеет право на выполнение;
  • 4 — остальные имеют право на чтение;
  • 2 — остальные имеют право на запись;
  • 1 — остальные имеют право на выполнение.

Суммировав эти коды можно получить символьную запись. Например, chmod 444 {имяфайла}: 400+40+4=444 — все имеют право только на чтение.

Также разрешается применение символьного указателя:

# chmod u+x file.txt

где u - право относительно пользователя, может принимать значения g - группа, a - все остальные, или вовсе отсутствовать, и тогда модификатор будет применен ко всем трём группам.

+ означает установку, соответственно сброс обозначен знаком -.

x - модификатор исполнения, r - чтение, w - запись.

[править] Пример

Чтобы передать права в формате 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://xgu.ru/wiki/chmod»