Другое решение могло состоять в том, чтобы полагаться на учетные записи домена, где SIDs управляет домен, а не учетные записи SQL-сервера, где SIDs по умолчанию являются определенными для экземпляра.
Как правило, вы должны предпочесть - команда
(-c) вместо - команда сеанса
. Вы не должны использовать -c с интерактивными оболочками (возможно, вы хотели - shell / bin / bash
?), Но вы должны использовать его с фоновыми процессами.
- команда сеанса не работает вызовите setsid () для выделения нового сеанса (который, как вы обнаружили, дает возможность продолжать использование управляющего tty, и, таким образом, bash предоставит вам управление процессом в виде интерактивной оболочки). Это означает, что его дочерние элементы могут быть назначены любой группе процессов родительского сеанса, возможно, pg переднего плана сеанса или для предотвращения killpg () или другой классификации на основе идентификатора группы процессов. Он также сохраняет возможность отправлять SIGCONT любому процессу в сеансе, хотя я не уверен, насколько это опасно для злоупотреблений.
Учитывая, что - команда сеанса
не находится на странице руководства ни одного крупного дистрибутива, о котором я слышал, скорее всего, это специальная вещь RHEL (google didn ' t также поможет).
-c
заставляет su
выполнять указанную вами команду, используя любую оболочку, определенную в / etc / passwd
для указанного пользователя. Это делает его похожим на sudo
, но для любого пользователя, которого вы выбираете и знаете пароль. -c
не предоставляет интерактивную оболочку, поэтому все, что требует tty, не будет работать.
Я также обнаружил, что при использовании -c не создается tty:
# su nobody -s /bin/bash -c "echo hi >/dev/tty"
bash: /dev/tty: No such device or address
#
# su nobody -s /bin/bash --session-command="echo hi >/dev/tty"
hi
#