Назад | Перейти на главную страницу

Sudo перенаправил владение файлом stdout

Я перенаправляю stdout из sudo. Однако владельцем выходного файла является пользователь, запустивший sudo, а не целевой пользователь sudo.

Я вошел в систему как «root» для выполнения следующей команды:

sudo -u w3svcsadm echo "TEST ran" > /home/youribm/emaildigest/TEST_$( date +%Y%m%d%H%M%S ).output  

Выходной файл создается с владельцем «root», но я хочу, чтобы владельцем был «w3svcsadm» (это вызывает у нас проблемы с разрешениями). Я перепробовал в команде всевозможные паренсы, но не могу передать права собственности целевому пользователю.

Ответ, который вам нужен, - запустить вашу команду следующим образом (или аналогичным образом):

sudo -u w3svcsadm bash -c 'echo "TEST ran" > /home/youribm/emaildigest/TEST_$( date +%Y%m%d%H%M%S ).output'

Разница в следующем:

  • в вашей версии sudo означает, что echo "TEST ran" работает как w3svcsadm. В > /home/youribm/emaildigest/TEST_$( date +%Y%m%d%H%M%S ).output запускается от имени вашего текущего пользователя, который, очевидно, является пользователем root.

  • на самом деле вы хотите, чтобы весь блок, включая перенаправление, запускался как w3svcsadm. В моем предложении я достигаю этого, запустив bash так как w3svcsadmи рассказывая bash для запуска полной командной строки (echo "TEST ran" > /home/youribm/emaildigest/TEST_$( date +%Y%m%d%H%M%S ).output), а затем выйдите.

Или, проще говоря: перенаправление - это форма связи между двумя командами, и в вашем случае вы хотите, чтобы обе команды выполнялись одним и тем же пользователем.

Может помочь мысленно заменить > с участием ; (или &&) чтобы понять: первая команда echo, а вторая команда write standard input into this file.

Первая «половина» команды (до перенаправления) выполняется sudo, а остальная часть - нет. Хотя мы обычно рассматриваем команду с перенаправлением вывода как одну команду, это не так - это две команды, поэтому вам необходимо убедиться, что обе команды выполняются тем пользователем, которого вы предполагали.

это использование sudo только для части перед перенаправлением, используйте

sudo -u w3svcsadm -c 'echo "TEST ran" > /home/youribm/emaildigest/TEST_$( date +%Y%m%d%H%M%S ).output'

или вы можете использовать

echo "TEST ran" | sudo -u w3svcsadm tee /home/youribm/emaildigest/TEST_$( date +%Y%m%d%H%M%S ).output

Я вошел в систему как root для выполнения команды ниже

Немного странно:

  1. использовать учетную запись root для выполнения пользовательских задач
  2. использовать sudo для сброса привилегий от root (когда вы могли просто использовать su)

Причина вашей проблемы в том, что вы перенаправляете вывод команды sudo, когда действительно хотите перенаправить вывод w3svcsadm:

sudo sudo -u w3svcsadm \
 'echo "TEST ran" > /home/youribm/emaildigest/TEST_$( date +%Y%m%d%H%M%S ).output'  

Спасибо всем!

@Quantum, к сожалению, наша версия sudo не имеет опции -c.

@iwaseatenbyagrue Спасибо за подробное объяснение. Я знал, что это должно быть что-то в этом роде, но никогда не думал о запуске bash с командой.

@symcbean «Понижение» разрешений было всего лишь тестом. Настоящая проблема, с которой я столкнулся, - это задание cron, и это вызывает проблемы, когда он создает файл как root.