На Linux, pwd
обычно обеспечивается coreutils
пакет. Можно загрузить источник с того веб-сайта, или с исходного репозитория распределения (здесь для Debian).
Можно скомпилировать pwd
и другие инструменты в том пакете обычный путь: распакуйте источник и:
./configure
make
Можно изменить исходный код для pwd
и перекомпилируйте, как Вы желаете (это - код C, в src/pwd.c
). Но я не рекомендовал бы установить что-либо, от чего Вы изменили себя coreutils
по копии Вашего распределения.
Если Вы хотите "играть" с ним, установите его на местоположении где-нибудь в Вашем корневом каталоге и предварительно ожидайте это к Вашему пути (или к пути проверочного пользователя). Только перезапишите исполняемые файлы, управляемые Вашим распределением/диспетчером пакетов, если Вы знаете точно, что Вы делаете (и знайте, как отменить это).
Это не характерно для coreutils
, можно сделать это со всеми пакетами с открытым исходным кодом, которые обеспечивает распределение (и даже, которые оно не делает). Но предупреждение о не порче файлов, управляемых Вашим распределением, более важно для "системных" пакетов низкого уровня, где Вы, более вероятно, завинтите свою систему полностью.
У Joel Davis есть корректный ответ, всем большое спасибо за Вашу любезную помощь! "написало сценарий приложение POSIX ACL", который является!
И: https://stackoverflow.com/questions/869536/linux-directory-permissions-read-write-but-not-delete
Пример: (Создайте файлы, когда-то записанные, они только для чтения, но CAN быть удаленными владельцем, но не другими.)
setfacl --set u::rwxs,g::rwx /controlled
setfacl -d --set u::r-x,g::r-x,o::- /controlled
Это точно, что я должен сделать.
Всем большое спасибо за Вас помогает, я должен был задать этот вопрос по-другому.
Переменные Shell интерпретируются Вашей оболочкой и никогда не замечаются sudo или любой другой программой, запущенной с ними. Таким образом, при выполнении foo=bar; echo "$foo"
, echo
никогда не знает, что данные, они были переданы, прибыли из переменной, названной "нечто", потому что оболочка разворачивает их прежде echo
даже выполняется. Поэтому не возможно заставить переменные оболочки работать прозрачно в Вашем sudoers файле.
Кроме того, с тех пор $LOGNAME
могло быть что-либо, что Вы желаете сделать, чрезвычайно эквивалентно использованию звезды после /home
в Вашем sudoers
, независимо от того, используете ли Вы его или нет. Я не рекомендовал бы делать это, потому что можно по существу скопировать что-либо в где угодно как корень, который является огромной угрозой безопасности (так как $LOGNAME
может содержать ..
). В конечном счете Вы говорите, что не хотите использовать *
, но меры, которые Вы желаете принять, одинаково опасны.
Наилучший вариант состоит в том, чтобы позволить доступ для чтения к тому, что в /home/$LOGNAME/file_source
, и доступ для записи для этих пользователей к /var/www
. У Вас мог быть a www-logs
группа, которой считали группу и запись группы для этих путей, соответственно.
Создайте сценарий, который выполняет копирование после любых необходимых проверок и предоставления sudo
доступ к этому.
Обратите внимание, что привилегированные сценарии оболочки считают плохой практикой; Вы могли бы хотеть пойти для, например, Python или Perl вместо этого.
Среда, созданная sudo
должен уже препятствовать тому, чтобы пользователь переопределил пути к библиотеке и т.д., но можно хотеть сделать некоторые дополнительные шаги для соединения болтом его вниз так, чтобы только минимальный набор путей системной библиотеки был позволен.