Проблемы безопасности

Недавно я боролся с тем, как облегчить моему отцу как монтирование, так и демонтаж жесткого диска в системе на базе Linux. Я думал о способе выполнения сценария оболочки с PHP. Ниже приводится то, что я придумал:

Сначала я сделал 2 сценария, которые позаботятся о монтаже и размонтировании жесткого диска:

unmount_script.sh:

#!/bin/bash MOUNT="/home/media/externalHardDrive" if grep -qs "$MOUNT" /proc/mounts; then umount "$MOUNT" if [ $? -eq 0 ]; then echo "HardDrive kan veilig worden verwijderd :D" else echo "Er is iets mis gegaan, blijf overal vanaf :(" fi else echo "Er is geen HardDrive gemount op $MOUNT, deze kan daarom niet verwijderd worden!" fi 

mount_script.sh

 #!/bin/bash MOUNT="/home/media/externalHardDrive" if grep -qs "$MOUNT" /proc/mounts; then echo "HardDrive is al gemount op $MOUNT ;)" else mount /dev/sdc1 "$MOUNT" if [ $? -eq 0 ]; then echo "HardDrive is succesvol gemount :D" fi fi 

Эти 2 скрипта будут просто проверять, монтируется ли / dev / sdc0 и выполнять свои задачи, если нет.

/ и т.д. / sudoers:

 # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command # %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d www-data ALL=(ALL) NOPASSWD: /home/media/mount_script.sh www-data ALL=(ALL) NOPASSWD: /home/media/unmount_script.sh www-data ALL=NOPASSWD: /bin/sh 

Я редактировал / etc / sudoers таким образом, что только www-data имеет разрешения использовать sh для выполнения скриптов. Другие группы и / или пользователи не должны иметь доступ к любой команде sudo.

PHP-файл:

 <?php if ((substr($_SERVER['REMOTE_ADDR'],0,10) == "192.168.0.") || ($_SERVER['REMOTE_ADDR'] == "127.0.0.1")) { if(isset($_POST['mount'])) { $output = shell_exec('sudo sh /home/media/mount_script.sh'); } if(isset($_POST['unmount'])) { $output = shell_exec('sudo sh /home/media/unmount_script.sh'); } ?> <html> <head> <title>Control panel</title> </head> <body style="text-align:center;"> <h2>HardDisk Control Panel</h2> <p>Status:</p> <textarea cols="33" rows="10"><?php if(isset($output)) { echo $output; } ?></textarea><br /><br /> <form method="post"> <input type="submit" name="mount" value="mount" /> <input type="submit" name="unmount" value="unmount" /> </form> </body> </html> <?php } ?> 

В этом файле я уверен, что запросы, сделанные из другого ip-диапазона, чем 192.168.0. *, Игнорируются. Если пользователь находится в пределах 192.168.0. * Ip-range, я разрешаю пользователю выполнять скрипт с привилегиями sudo.

Может кто-нибудь, пожалуйста, проверьте эту конфигурацию для проблем безопасности, которые я должен исправить?

Я запускаю все это на сервере Debian

One Solution collect form web for “Проблемы безопасности”

Вы должны сделать запись в /etc/fstab (согласно вашему другому вопросу) с UUID=xyz или LABEL=somelabel определяющим ваш диск, вместо использования / dev / sdc1 в ваших скриптах (BTW, в другом сообщении, которое вы используете / DEV / sdc0).

В этой строке вы также указываете noauto,user as options, чтобы обычный пользователь в системе мог монтировать диск. Это заботит самую большую проблему безопасности, которую я вижу, а именно, что вам нужно запустить какой-то скрипт с root priviliges.

После этого вы можете просто сосредоточиться на том, чтобы никто не получал доступ к страницам PHP, которые им не разрешены, но по крайней мере, если ваша безопасность там терпит неудачу, тогда нет сценариев, которые могут содержать люк (который, скорее всего, скорее, чем mount , что запустить SUID root и использовать в любом случае, имея один)

Я не смотрел на реальные скрипты, поэтому они могли содержать ошибки, это всего лишь общие принципы, которые, я думаю, вы должны соблюдать. Hopelijk helpt je dat een beetje.

  • Как вызывать привилегии root из моего пользовательского приложения?
  • Разница между sudo make и sudo -s; делать
  • Имя пользователя отсутствует в файле sudoers. Об этом инциденте будет сообщено - ГДЕ / КАК?
  • Как сделать определенную команду sudo-only на Debian?
  • Как получить имя пользователя, запустившего `sudo`
  • Не могу sudo после пароля блокировки, могу ли я оправиться от этого?
  • Как эскалировать сигнал?
  • sudo script - лучшая практика?
  • Не найдено ни одной версии кандидата для sudo
  • Как работает sudo -E?
  • Почему cron молча запускает файлы sudo в моем скрипте?
  • Interesting Posts

    Альтернативное устройство FIFO для Linux с дополнительным буфером (путь), все еще имея семантику файловой системы?

    Установка шрифтов Powerline для темы zsh + Prezto

    Установите 32-битные библиотечные пакеты на 64-разрядную версию 6.2 во время установки os

    Надлежащее управление ld.so.conf и разделяемыми библиотеками

    как найти URL-адреса, доступные для процесса

    Максимизация сеанса tmux показывает странные последовательности ANSI

    История wiki FreeBSD для sh shell

    Acer Aspire S3 или Asus Zenbook Ultrabook для запуска Linux (Ubuntu / Debian)

    Каковы обязанности оболочки системы по умолчанию?

    Каково влияние на производительность системы при включении информации об отладке ядра?

    FUSE зависает, пытаясь подключить сетевую файловую систему при входе в систему

    MATE: не отображается меню приложений QT (Skype, Virtualbox)

    Как слить текст буквенных строк с числовыми строками в оболочке?

    У меня есть мертвый сетевой адаптер?

    как добавлять слова из двух файлов слово за словом

    Linux и Unix - лучшая ОС в мире.