На второй части просто необходимо установить заголовок Довольного Расположения для предоставления предпочтительного имени файла, и браузер отобразит диалоговое окно сохранять-файла.
Я не знаю, как Вы заставили бы Nginx делать это, в php я просто использую этот код:
header('Content-Disposition: attachment; filename="wootwoot.pdf"');
Обязательно используйте это ПРЕЖДЕ php выводы любые данные …
Как Вы сказали, Вы не можете использовать sudo, можно думать наоборот. Могут Вы для запущения скрипта как корня и su пользователю с меньшим разрешением для частей, которые не должны быть выполнены как корень?
Как уже сказано, sudo точно, в чем Вы нуждаетесь и лучшее решение (Вы знаете, что можно ограничить sudo доступ для каждой отдельной команды?)
Взгляните на sudo. С этим можно выполнить определенные команды с полномочиями пользователя root с или без требования для предоставления пароля.
Это должно уже быть установлено в Вашей системе Ubuntu
Править
Sudo был разработан, чтобы сделать точно, что Вы хотите безопасным, управляемым и auditable способом. Самая безопасная вещь сделать состоит в том, чтобы позволить пользователям запускать скрипт через sudo. Это затем не предоставляет пользовательский доступ к отдельным командам.
Обсуждение с политиком должно последовать.
Редактирование 2
Необходимо предоставить полномочиям пользователя выполнить конкретную оболочку через sudo, прежде чем они смогут успешно выполнить sudo-s. Просто предоставление полномочий пользователя запустить Ваш скрипт не дает разрешение выполнять sudo-s.
Подход, который Вы описываете, потребовал бы, чтобы любой, кто мог запустить скрипт, смог прочитать сценарий - и следовательно пароль root.
Меня просят отключить sudo доступ ко всем пользователям
! Вас попросили отключить подсистему, которая была специально предназначена некоторыми очень умными людьми, чтобы предоставить ограниченный корневой доступ обозначенным пользователям, и теперь необходимо предоставить корневой доступ обозначенным пользователям с собственным решением собственной разработки (и предложили очень плохой способ решить проблему).
Вы могли установить липкий бит на полномочиях файла - но потребуется очень долгое время для входа в последствия выполнения этого - и кажется, что ни Вы, ни человек, который попросил, чтобы Вы отключили sudo действительно, не понимаете модель полномочий Unix.
Почему не только теряют отговорку и дают пользователям пароль root?
Сделайте свою собственную обертку:
/* mywrapper.c */
#include <unistd.h>
extern char **environ;
main() {
environ=NULL; /* clear environment variables for sanity */
setuid(0);
return execl("/usr/local/bin/script.sh", "script.sh", NULL);
}
Затем gcc -o mywrapper mywrapper.c ; chown root mywrapper; chmod u+s mywrapper
и Вы готовы пойти.