Определение пустоты каталога и безопасность.

Модератор: Модераторы разделов

Аватара пользователя
fatboy
Сообщения: 156
ОС: Zenwalk Linux, Windows XP

Определение пустоты каталога и безопасность.

Сообщение fatboy »

1. Как на shell определить пуст ли каталог лкроме как

Код: Выделить всё

`echo ``ls -A | wc -l```
или

Код: Выделить всё

`ls -A | wc -l`
? И то и то возвращает 0 если пуст.
2. Больше, наверное, по администрированию: есть скрипт который должен выполнять в том числе и нескольлко рутовских действий. Как это обезопасить но дать право простым пользователям его выполнять (корявенькое объяснение :rolleyes: ). Подойдет ли просто засунуть его в /bin/ , запретить все, кроме исполнения, всем. Но как сделать чтобы при запуске его простым пользователем в скрипте выполнялись рутовские действия (удаление каталогов в НЕ общедоступных каталогах)?
Zenwalk 4.0
TOSHIBA Satellite A100
Спасибо сказали:
Аватара пользователя
Cap. J2A
Сообщения: 300

Re: Определение пустоты каталога и безопасность.

Сообщение Cap. J2A »

fatboy писал(а):
29.09.2005 11:01
1. Как на shell определить пуст ли каталог лкроме как

Код: Выделить всё

`echo ``ls -A | wc -l```
или

Код: Выделить всё

`ls -A | wc -l`
? И то и то возвращает 0 если пуст.

ls -la | egrep -v ^total | wc -l будет возвращать 2(. и ..), если каталог пуст.
2. Больше, наверное, по администрированию: есть скрипт который должен выполнять в том числе и нескольлко рутовских действий. Как это обезопасить но дать право простым пользователям его выполнять (корявенькое объяснение :rolleyes: ).

Раздать правильные права, sudo на крайний случай.
Подойдет ли просто засунуть его в /bin/ , запретить все, кроме исполнения, всем.

Нет. Для скрипта еще нужно, чтобы его читать могли:

Код: Выделить всё

j2a@debsmart:~/tmp$ cat ./script
#!/bin/sh

ls -la

j2a@debsmart:~/tmp$ ./script
total 12
drwxr-xr-x   2 j2a j2a   36 Sep 29 14:57 .
drwxr-xr-x  36 j2a j2a 4096 Sep 29 14:56 ..
-rwxr-xr-x   1 j2a j2a   19 Sep 29 14:57 script
j2a@debsmart:~/tmp$ chmod -r ./script
j2a@debsmart:~/tmp$ ./script
./script: ./script: Permission denied
Debian GNU/Linux 3.1 2.6.12-1-k7 на AXP1700+/nF2/Radeon 9600 (debsmart)
Debian GNU/Linux 3.1 2.6.15.1 на hp compaq nx9020 (moby)
:Wq
E492: Not an editor command: Wq
Спасибо сказали:
Аватара пользователя
fatboy
Сообщения: 156
ОС: Zenwalk Linux, Windows XP

Re: Определение пустоты каталога и безопасность.

Сообщение fatboy »

Получилось так: запулил я этот свой скрипт в /bin, изменил владельца и группу на root, проставил права на него 0755 а дальше было вот что (сейчас под Виндой - все события по памяти):

Код: Выделить всё

[fatboy@host ~/tmp]$ cat /bin/script > ./lst
[fatboy@host ~/tmp]$ chmod +x ./lst
[fatboy@host ~/tmp]$ ./lst

... и погнал выполняться скрипт ...
...Хотя с такими правами можно было бы просто скопировать /bin/script в свой каталог. Разве что владелец и група сохранились бы.

Выход нашел в том что убрал чтение для всех кроме владельца (root).
Сейчас скрипт выполняется через sudo.
Zenwalk 4.0
TOSHIBA Satellite A100
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Определение пустоты каталога и безопасность.

Сообщение madskull »

Для определения "пустости" пользуюсь примерно такой "конструкцией":

Код: Выделить всё

if ls $DIR/* &>/dev/null; then
   echo "not empty"
else
   echo "empty"
fi
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Определение пустоты каталога и безопасность.

Сообщение t.t »

2madskull: одно "но": дот-файлы.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
fatboy
Сообщения: 156
ОС: Zenwalk Linux, Windows XP

Re: Определение пустоты каталога и безопасность.

Сообщение fatboy »

по-моему ls -A какраз печатает все кроме ./ ../
Zenwalk 4.0
TOSHIBA Satellite A100
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Определение пустоты каталога и безопасность.

Сообщение t.t »

по-моему ls -A какраз печатает все кроме ./ ../
Предлагаю осмыслить разницу между ls и ls * -- именно на ней базируется этот метод.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Определение пустоты каталога и безопасность.

Сообщение madskull »

t.t писал(а):
01.10.2005 23:26
2madskull: одно "но": дот-файлы.

Да, конечно, поторопился. Несомненно, -A нужно.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
Чучок
Сообщения: 390
ОС: Debian 4.0 etch

Re: Определение пустоты каталога и безопасность.

Сообщение Чучок »

madskull писал(а):
01.10.2005 11:55
Для определения "пустости" пользуюсь примерно такой "конструкцией":

Код: Выделить всё

if ls $DIR/* &>/dev/null; then
   echo "not empty"
else
   echo "empty"
fi

Не пашет твоя конструкция! В любом случае выдаёт, что мол пусто.

И всё же как сделать, чтобы можно было определить на пустоту каталог (это для скрипта)? Команда test тут никак не тянет. Когда каталог пустой, то реакция test нормальнa, а если не пустой, то bash ругается, что мол слишком много параметров, и скрипт обрывается.
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Определение пустоты каталога и безопасность.

Сообщение Subj »

Код: Выделить всё

#!/bin/bash
if [ -z `ls -A $1` ];then echo "Empty";else echo "Not Empty";fi



Запускать
скрипт каталог

SUID и GUID бит может поможет чтоб с правами рута запускалось?
chown root:root script
chmod 0000 script
chmod ug+rws script
chmod o+rx script

ну или как там в циферках записать

Добавленно:
блин, забыл что сьюиды на скрипты не действуют

у мня вроде работает, ток чет на ./ и на / ругается
Building better software with Ada
Спасибо сказали:
Аватара пользователя
Чучок
Сообщения: 390
ОС: Debian 4.0 etch

Re: Определение пустоты каталога и безопасность.

Сообщение Чучок »

Subj писал(а):
20.04.2007 12:47

Код: Выделить всё

#!/bin/bash
if [ -z `ls -A $1` ];then echo "Empty";else echo "Not Empty";fi

Запускать
скрипт каталог

SUID и GUID бит может поможет чтоб с правами рута запускалось?
chown root:root script
chmod 0000 script
chmod ug+rws script
chmod o+rx script

ну или как там в циферках записать

у мня вроде работает, ток чет на ./ и на / ругается

А твой скрипт пишет в любом случае (даже когда каталог пустой): "Not Empty".
ИМХО права тут не причём. Мне не нужен скрипт зависимый от прав root'a.
Слов много, а никто толком не знает, как это реализовать. Такое впечатление создалось, что это нормальным путём не реализуемо. А если реализовать, то можно тока левым путём, например:

Код: Выделить всё

#!/bin/bash
read dir
ls $dir > dir.txt
if [ -s dir.txt ]; then
   echo "Не пустой"
else
   echo "Пустой"
fi
rm -f dir.txt

У меня такое сработало, но мне кажется такой способ не очень-то грамотный. Но я пока не теряю надежды, что есть более граммотный способ, т.е. без создания файла. Всё же попробую найти этот способ.
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Определение пустоты каталога и безопасность.

Сообщение Subj »

Чучок писал(а):
20.04.2007 14:30
А твой скрипт пишет в любом случае (даже когда каталог пустой): "Not Empty".


[root@localhost /]# ./isempt.sh /dir
Not Empty
[root@localhost /]# ls /dir
.file
[root@localhost /]# rm -f /dir/.file
[root@localhost /]# ./isempt.sh /dir
Empty

Выходит это только у меня так?
там в скрипте
`ls -A $1` - тут не одиночные кавычки а эти, блин, как их, обратные чтоли?, кароче на клавише с буквой ё поищи либо напиши $(ls -A $1)
Building better software with Ada
Спасибо сказали:
Аватара пользователя
Чучок
Сообщения: 390
ОС: Debian 4.0 etch

Re: Определение пустоты каталога и безопасность.

Сообщение Чучок »

Subj писал(а):
20.04.2007 14:53
Выходит это только у меня так?
там в скрипте
`ls -A $1` - тут не одиночные кавычки а эти, блин, как их, обратные чтоли?, кароче на клавише с буквой ё поищи либо напиши $(ls -A $1)

С обратными кавычками bash сообщает, что много аргументов: "...[: too many arguments".
Так, что похоже такой скрипт работает тока у тебя.
P.S. А рутовские действия меня щас не интересуют, всё равно у меня в скриптах через sudo исполняются.
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Определение пустоты каталога и безопасность.

Сообщение Subj »

Чучок писал(а):
20.04.2007 15:35
С обратными кавычками bash сообщает, что много аргументов: "...[: too many arguments".
Так, что похоже такой скрипт работает тока у тебя.

А, блин
Попробуй так:

Код: Выделить всё

#!/bin/bash
if [ -z $(echo `ls -A $1 2>/dev/null`|sed "s/ //g") ];then echo "Empty";else echo "Not Empty";fi

хотя вариант с
ls -A | wc -l по лучше будет :)

Код: Выделить всё

#!/bin/bash
if [ $(ls -A $1 2>/dev/null|wc -l) -eq 0 ];then echo "Empty";else echo "Not Empty";fi
Building better software with Ada
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Определение пустоты каталога и безопасность.

Сообщение v04bvs »

find -mindepth 1 -maxdepth 1|wc -l
Спасибо сказали:
Аватара пользователя
Чучок
Сообщения: 390
ОС: Debian 4.0 etch

Re: Определение пустоты каталога и безопасность.

Сообщение Чучок »

Спасибо всем за помощь!
У меня возник один вопрос, может быть, для вас идиотский, но всё же если не влом.

Код: Выделить всё

#!/bin/bash
if [ $(ls -A $1 2>/dev/null|wc -l) -eq 0 ];then echo "Empty";else echo "Not Empty";fi

Что за двойка такая перед отправлением вывода и что она даёт? Я методом научного тыка заметил, что без неё или другим числом результат иной.
P.S. Я читал на про это bash-conspect из ЛОРа, но там написано об этом как-то очень скользко.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Определение пустоты каталога и безопасность.

Сообщение Uncle_Theodore »

Чучок писал(а):
24.04.2007 02:28
Спасибо всем за помощь!
У меня возник один вопрос, может быть, для вас идиотский, но всё же если не влом.

Код: Выделить всё

#!/bin/bash
if [ $(ls -A $1 2>/dev/null|wc -l) -eq 0 ];then echo "Empty";else echo "Not Empty";fi

Что за двойка такая перед отправлением вывода и что она даёт? Я методом научного тыка заметил, что без неё или другим числом результат иной.
P.S. Я читал на про это bash-conspect из ЛОРа, но там написано об этом как-то очень скользко.

2 -- это standard error. Простой пример. Вот, скажем, нет у тебя директории dudu
тогда
$ ls -A dudu 2>/dev/null
не возвращает ничего, а вот
$ ls -A dudu
ls: dudu: No such file or directory
выводит ошибку, которая в первом примере была отправлена в /dev/null

А при каких обстоятельствах результаты разные с переаддрессацией и без? Я понимаю, что если там 2 заменить на 1 (стандартный вывод), то результат будет другой, но вроде так не должно быть разницы...
Спасибо сказали:
Mellon
Сообщения: 655
Статус: Powered by Gentoo
ОС: Gentoo

Re: Определение пустоты каталога и безопасность.

Сообщение Mellon »

чтото я не увидел варианта
$ find <path> -type d -empty
Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
--------------------
Переворачиватель пингвинов
Спасибо сказали: