У меня есть небольшой скрипт bash:
#!/bin/bash
touch dummy.txt
Если я выполню этот скрипт с, sudo
то он создаст, dummy.txt
который будет защищен от корня .
Что я хочу сделать, это:
Независимо от того, выполняется ли этот сценарий с sudo
помощью обычного пользователя или с обычным пользователем, файл неdummy.txt
должен быть защищен от корня.
chown
иchmod
в своем скрипте, чтобы установить владельца и права доступа по желанию.Ответы:
Вы можете проверить , если запущен скрипт , с помощью
sudo
использованияEUID
иSUDO_USER
переменных, а затем выполнить ,touch
какSUDO_USER
если это правда - что - то вродеисточник
==
используется для сравнения строк. Поскольку$EUID
предполагается возвращать целочисленное значение, я бы порекомендовал вам использовать-ed
сравнение. В именах пользователей допускаются пробелы , поэтому, вероятно, заключите в кавычки$SUDO_USER
переменную. В противном случае хороший ответ - это то, что я лично использовал бы.sudo -u
если он обнаружит, что работает от имени пользователя root. ОП говорил о наличии нескольких команд в одном скрипте. Но будьте осторожны, чтобы избежать бесконечного цикла ошибок.[[...]]
так что нет необходимости строго заключать в кавычки переменную внутри оператора if @Serg, и я догадываюсь, что-ed
это опечатка-eq
-eq
. Не знал[[
, нет разделения слов. Спасибо. Лично я бы все же цитировал ради хороших сценариевЕсли ваш сценарий не предназначен для запуска как
root
, самый безопасный способ решить проблему - прервать выполнение сценария в самом начале:При желании вы можете повторно выполнить ваш сценарий в качестве запасного пользователя (например
sudo -u FALLBACK_USER "$0"
) вместо простой отмены.Попытка исправить причуды отдельных команд сделает ваш сценарий излишне сложным и трудным для отладки. Каждый раз, когда вы изменяете его, вам нужно будет выполнить все тестирование дважды (как обычный пользователь, затем как
root
) и исправить всеroot
связанные с этим ошибки. Это не перспективное решение, так сказать.источник
По умолчанию файлы, созданные с помощью root-доступа, имеют такие права:
Здесь файл принадлежит пользователю root и корневой группе и доступен для чтения и записи для пользователя root, но доступен только для чтения другим пользователям.
Самый простой подход - просто
chown
вернуть файл первоначальному пользователю.Вы можете использовать
$SUDO_USER
переменную, которая доступна только приsudo
вызове, например:Если вы запускаете скрипт как обычный пользователь, эта
chown
часть вообще не нужна, поэтому вы можете рассмотреть возможность использования оператора if или&&
test для проверки случая, когда скрипт запускается от имени пользователя root, и сделать что-то вроде этого:Выше рекомендуемый подход. Есть и другие, например, использование
chmod
для изменения прав на чтение-запись-выполнение для пользователей и групп, но это не рекомендуется.источник
sudo
, тогда нет - вы не можете игнорировать его. Вы можете либо запустить скрипт как обычный пользователь (чего я не понимаю, почему вы этого не делаете, поскольку вы просто создаете файл для своего пользователя здесь), либо изменить владельца файла, как я показываю в своем ответе.