No puede editar los archivos de inicio de shell del otro usuario a menos que los permisos estén configurados de manera insegura. Hacerlo sin su conocimiento o consentimiento (, lo que se aplica a cualquier archivo en su directorio principal ), se consideraría poco ético y también podría considerarse una infracción de conducta, según las reglas de conducta vigentes en el sistema.
Si tiene sudo
derechos en el sistema y considera jugar esta "broma", entonces no debería tener sudo
derechos en ese sistema .
El primer comando agregaría bash
como comando al final de .bashrc
. Si esto estaba .bashrc
en el directorio de inicio del usuario, y si el usuario era un usuario bash
, entonces esto causaría que se iniciara un bucle recursivo infinito de shells interactivos (tan pronto como se iniciara una de esas sesiones de shell ), hasta que finalice o se encuentre con restricciones de recursos.
El segundo comando causaría un bucle similar, pero el código solo se ejecutaría en un único entorno de proceso bash
. Esto continuaría hasta que terminara, o hasta que alguna variable de entorno (como PATH
, si el script agregado en cada iteración )fuera demasiado grande, momento en el que se alcanzaría un límite de recursos.
En un sistema de varios -usuarios, estas dos "bromas" pueden afectar a otros usuarios, ya que los recursos compartidos (CPU y memoria en su mayoría )se consumen.
Editar, corregir y luego guardar el archivo .bashrc
mientras los escenarios anteriores están en curso detendría el ciclo, pero no liberaría recursos hasta que el bash
proceso (es )del usuario afectado finalice.
Como una solución de pánico, uno podría detenerlo usando pkill -U username bash
como root, o con pkill bash
como el usuario afectado. Esto terminaría todos los procesos bash
del usuario afectado.
Вероятно, самый простой подход состоит в том, чтобы ваша программа использовалаpipe2
три раза для создания трех конвейеров (для каждого из stdin, stdout и stderr ). Вероятно, вы хотите, чтобы они находились в неблокирующем -режиме. Затем разветвите и попросите ребенка использоватьdup2
для помещения каналов в файловые дескрипторы 0, 1 и 2. Затем ребенок использует один из семейства exec для запуска bash
.
Родитель может затем использовать select
, чтобы определить, есть ли данные для чтения или место для записи.
Вероятно, существуют библиотеки или существующие реализации, которые вы могли бы использовать.
Примечание #1:pipe2
возвращает два файловых дескриптора, один для стороны чтения и один для стороны записи канала. Например, для стандартного ввода bash,bash нужна сторона чтения (для чтения ввода ), а вашей программе нужна сторона записи (для записи ввода bash ). bash stdout будет противоположным :bash нужна сторона записи, вашей программе нужна сторона чтения.
Примечание #2 :Это не дает вам полного опыта использования терминала; для этого вам нужно иметь дело с ptys, что добавляет кучу сложности (и, честно говоря, мне пришлось бы искать ). Если вы этого хотите, я определенно предлагаю поискать аналогичную программу для начала.