touch
всегда создает файл, если он не существует, всегда переходит по символьным ссылкам и всегда делает неисполняемый файл файла. Можно решить чтение и записать биты через umask.
(umask 077; touch file) # creates a 600 (rw-------) file
(umask 002; touch file) # creates a 664 (rw-rw-r--) file
“Безопасное” атомарное создание файла (в частности, с O_NOFOLLOW
) не возможно с традиционными инструментами оболочки. Можно использовать sysopen
в жемчуге. Если у Вас есть BSD-вдохновленное mktemp
утилита, это создает файл атомарно с O_NOFOLLOW
; Вы имеете звонить chmod
впоследствии, если режим по умолчанию 600 не является правильным.
Я предположил бы, что sudo сохраняет Вашу среду пользователя root и поэтому не может иметь путей или других переменных среды что martin
пользователь установил. Это может быть также, что необходимо работать jack
через sudo от оболочки с -s /path/to/shell
опция.
Однако как корень, Вы имеете права на su
(замените пользователем), не будучи запрошенным пароль (и не требуют, чтобы конфигурация sudo достигла этого, sudo конкретно нацелен на некорневых пользователей).
su - martin -c /usr/bin/jackd ...
-c
говорит su что команду работать, и -
опция (который может также быть сделан через -l
) попытается настроить среду, подобную среде пользователя, который это, работал как (в этом случае martin
).