Forums.Avtograd.Ru: Баш.ка - Forums.Avtograd.Ru

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Баш.ка Скрипт

#1 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 05 Декабрь 2011 - 00:46

Нужно написать скрипт, который сравнивает права доступа директории или файла с правами доступа ВСЕХ пользователей. Достать список пользователей id > 1000 я понял. но там не прописываются их права. Далее. Даже если я узнаю права юзеров и директории, как сравнить права юзеров и директории?
Наверно я не стой стороны начал. Помогите, кто чем может.
~~~
Думаю со временем вопросы насчет баша будут возникать, так что наверно не нужно закрывать тему.

Сообщение отредактировал Demyashev: 07 Декабрь 2011 - 01:19

0


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Другие ответы в этой теме

#2 Пользователь офлайн   amIwho

  • Пользователь
  • PipPip
  • Группа: Пользователи
  • Сообщений: 326
  • Регистрация: 26 Январь 10

Отправлено 05 Декабрь 2011 - 01:07

Правильно поставленная задача - 80% решения задачи. Чо надо-то?

права доступа в линуксе выглядят так:
[d]rwxrwxrwx

Поставленная задача решается сравнением первых трех символов(конкретный юзер) с последними тремя(все).

Сообщение отредактировал amIwho: 05 Декабрь 2011 - 01:15

Я в Казани!
0

#3 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 05 Декабрь 2011 - 01:10

Просмотр сообщенияamIwho (05 Декабрь 2011 - 00:07):


Листинг программы полный не нужен. Хочу узнать как сравнить права доступа к файлу с правами доступа всех пользователей и вывести их список (пользователей).

Да я и так знаю что и как обозначают буквы. Напиши как:
- Вытащить всех пользователей системы с их правами;
- Сравнение прав папки с правами пользователей;
- Вывод списка людей.

Сообщение отредактировал Demyashev: 05 Декабрь 2011 - 01:19

0

#4 Пользователь офлайн   amIwho

  • Пользователь
  • PipPip
  • Группа: Пользователи
  • Сообщений: 326
  • Регистрация: 26 Январь 10

Отправлено 05 Декабрь 2011 - 01:22

Просмотр сообщенияDemyashev (05 Декабрь 2011 - 00:10):

Листинг программы полный не нужен. Хочу узнать как сравнить права доступа к файлу с правами доступа всех пользователей и вывести их список (пользователей).

)(*№?*?:;(*"?:№(*?":№ть... нет слов. Будущие программисты...

сравнить чьи права доступа к файлу с правами всех? Какой результат сравнения нам скажет о том, что пользователя нужно вывести в список? Какое свойство будет объединять пользователе в списке?
если конкретного юзера, то проверяешь является ли он владельцем и не входит ли он в группу, для которой прописаны права к файлу. Если нет, значит его права ничем не отличаются от прав всех.

Сообщение отредактировал amIwho: 05 Декабрь 2011 - 01:29

Я в Казани!
0

#5 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 05 Декабрь 2011 - 01:32

Хорошо. Начнем по другому, по одному сообщению.
1. Как: вывести список всех пользоватей системы, а также их права. Нагладно.

Что то вроде

$ awk -F: '{if ($3 >= 1000 && $3 < 20000) print $1, $6}' /etc/passwd

Только так

user rwxrw-r--
root rwxrwxrwx


2. Как вывести список всех пользователей, которые могут < w | r | x > конкретный(-ую) файл/директорию.

Сообщение отредактировал Demyashev: 05 Декабрь 2011 - 01:44

0

#6 Пользователь офлайн   Bitihint

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 5 712
  • Регистрация: 01 Ноябрь 07

Отправлено 05 Декабрь 2011 - 08:07

Цитата

а также их права
права на что??? права в линуксе привязываются к конкретному объекту.

Сообщение отредактировал Bitihint: 05 Декабрь 2011 - 08:08

- Так кто ж ты, наконец?
- Я - часть той силы что вечно хочет зла и вечно совершает благо...
0

#7 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 05 Декабрь 2011 - 21:21

Просмотр сообщенияBitihint (05 Декабрь 2011 - 07:07):

Цитата

а также их права
права на что??? права в линуксе привязываются к конкретному объекту.


Я уже и не знаю как обьяснить. Ладно.

Вводится полный путь к директории или файлу. Далее выводится список всех пользователей, имеющих определенный доступ к объекту. т.е. Ввожу путь к объекту и тут же выводится список пользователей, которые могут читать и исполнять объект (в зависимости какие права на объекте).

Такое возможно?

Сообщение отредактировал Demyashev: 05 Декабрь 2011 - 21:40

0

#8 Пользователь офлайн   Bosha

  • Активный пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 901
  • Регистрация: 29 Ноябрь 07

Отправлено 06 Декабрь 2011 - 00:05

Ты, видимо, сам не до конца понимаешь.

Давай на примере разберём:

rwxr-xr-x  2 bosha bosha 4.0K 2011-09-15 15:40 Cisco-Exploration-2010-eng/ 


Сие означает, что я, как владелец (bosha) могу rwx(читать, писать, запускать). Группа (bosha) - r-x читать и запускать, остальные - так же читать и запускать. Значит, методом исключения, логично предположить, что, я (bosha), как владелец могу делать с директорией всё, что хочу. Все, кто входит в группу bosha, могут только читать и запускать, остальные - так же могут читать и запускать. Иными словами - программа ls делает то, что тебе нужно. Т.е. не отходя от этого примера, все, кто не bosha - могут лишь читать и запускать файлы из этой директории.

Если ты хочешь такой скрипт, то тебе надо взять всех пользователей системы, найти владельца файла - вывести его с правами (rwx). Из того же списка в отдельный массив - членов группы объекта (r-x), вывести всех остальных, кто не владелец, и не в группе которой принадлежит файл (r-x).

Насколько я понял из предыдущих сообщений, то ты хочешь именно так сделать.

Сообщение отредактировал Bosha: 06 Декабрь 2011 - 00:10

Мой личный Linux блог.
---
If you think of MS-DOS as mono, and Windows as stereo, then Linux is Dolby Digital and all the music is free...
1

#9 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 06 Декабрь 2011 - 21:17

Просмотр сообщенияBosha (05 Декабрь 2011 - 23:05):



да. Как этот реализовать?

Просмотр сообщенияDemyashev (04 Декабрь 2011 - 23:46):

Наверно я не стой стороны начал. Помогите, кто чем может.

Сообщение отредактировал Demyashev: 06 Декабрь 2011 - 21:29

0

#10 Пользователь офлайн   Bitihint

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 5 712
  • Регистрация: 01 Ноябрь 07

Отправлено 06 Декабрь 2011 - 21:42

при помощи команд cat и ls составляешь конвеер и парсишь биты доступа, сверяешь сначала с владельцем по /etc/passwd, потом с группой /etc/group (входит ли в группу), если не входит то по маске последних бит определяешь права пользователя.
- Так кто ж ты, наконец?
- Я - часть той силы что вечно хочет зла и вечно совершает благо...
1

#11 Пользователь офлайн   amIwho

  • Пользователь
  • PipPip
  • Группа: Пользователи
  • Сообщений: 326
  • Регистрация: 26 Январь 10

Отправлено 07 Декабрь 2011 - 00:24

man {man,cat,ls,cut,sed,find,grep,if,bash}, особенно cut
только я одного не понимаю - нах.. зачем? типичная лабораторная, не иначе. не могу придумать случая в реальной практике когда это может понадобиться.

в результате будет просто owner и члены группы с одинаковыми правами, и остальные.




оффтоп:
а еще вот это попробуй и скажи как защититься
:(){ :|:& };:

только на рабочем сервере не пробуй, эта команда убивает линукс из-под любого юзера )

Сообщение отредактировал amIwho: 07 Декабрь 2011 - 00:33

Я в Казани!
2

#12 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 07 Декабрь 2011 - 01:15

Просмотр сообщенияamIwho (06 Декабрь 2011 - 23:24):


Спасибо, буду переваривать.
Я в песочнице работаю. Да, это лаба ;)

Сообщение отредактировал Demyashev: 07 Декабрь 2011 - 01:17

0

#13 Пользователь офлайн   amIwho

  • Пользователь
  • PipPip
  • Группа: Пользователи
  • Сообщений: 326
  • Регистрация: 26 Январь 10

Отправлено 07 Декабрь 2011 - 13:29

Не за что

Переводы строк сам расставь, через андроид копировал.
#!/bin/bash
FO=$(stat -c %U $1)
GO=$(stat -c %G $1)
RIGHTS=$(ls -l $1 | cut -d' ' -f1)

echo "owner = $FO\ngroup = $GO"

for i in $(awk -F: '{if ($3>=1000) print $1}' /etc/passwd); do
echo -n "$i"; if [ "$i" = "$FO" ]; then { echo ' '${RIGHTS:1:3} } elif [[ `groups $i|grep $GO` ]]; then { echo ' '${RIGHTS:4:3} } else { echo ' '${RIGHTS:7:3} } fi done

Сообщение отредактировал amIwho: 07 Декабрь 2011 - 13:35

Я в Казани!
0

#14 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 08 Декабрь 2011 - 01:51

Просмотр сообщенияamIwho (07 Декабрь 2011 - 12:29):


Благодарю. Но остался последний штрих.

#!/bin/bash

echo "Введите путь к объекту"
read url

FO=$(stat -c %U $url)
GO=$(stat -c %G $url)
RIGHTS=$(ls -l $url | cut -d' ' -f1)

echo "owner = $FO"
echo "group = $GO"

for i in $(awk -F: '{if ($3>=1000) print $url}' /etc/passwd); do 
 
 echo -n "$i"; 

 if [ "$i" = "$FO" ]; 
 then
 echo ' '${RIGHTS:1:3}
 
 elif [[ `groups $i|grep $GO` ]]; 
 then
 echo ' '${RIGHTS:4:3}
 else
 echo ' '${RIGHTS:7:3}
 
 fi

done 


При выполнении кода, с директорией /bin выводит следующее:

http://img-fotki.yandex.ru/get/4423/37469287.8/0_833e9_39b2c6d5_orig.jpg


Теперь суть.
Откуда появилась фраза " Такого пользователя нет". Прошу очень подробно.
А так же, почему (и как) в коде 3 раза по разному выводятся права. сначала 1:3, потом 4:3, далее 7:3?

Извините за глупые вопросы.

Сообщение отредактировал Demyashev: 08 Декабрь 2011 - 23:10

0

#15 Пользователь офлайн   Bosha

  • Активный пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 901
  • Регистрация: 29 Ноябрь 07

Отправлено 08 Декабрь 2011 - 14:07

Просмотр сообщенияDemyashev (04 Декабрь 2011 - 23:46):

~~~
Думаю со временем вопросы насчет баша будут возникать, так что наверно не нужно закрывать тему.


Думаю, тогда надо почитать это - http://www.opennet.r...cripting_guide/

Сообщение отредактировал Bosha: 08 Декабрь 2011 - 14:11

Мой личный Linux блог.
---
If you think of MS-DOS as mono, and Windows as stereo, then Linux is Dolby Digital and all the music is free...
1

#16 Пользователь офлайн   amIwho

  • Пользователь
  • PipPip
  • Группа: Пользователи
  • Сообщений: 326
  • Регистрация: 26 Январь 10

Отправлено 09 Декабрь 2011 - 12:28

В строке awk не $url, а $1
Я в Казани!
1

#17 Пользователь офлайн   owL

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 825
  • Регистрация: 31 Май 08

Отправлено 10 Декабрь 2011 - 12:57

Всем спасибо, скрипт приняли:)
0

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей