Если вы хотите выполнить много команд после запуска терминала, то лучшим подходом было бы записать функцию, экспортировать ее и вызвать эту функцию. Создайте сценарий оболочки, подобный приведенному ниже:
my_function(){
command1
command2
.
.
.
commandn
}
export -f my_function
$(x-terminal-emulator -e "bash -c 'my_function'")
Вы также можете использовать несколько функций. Но тогда вам придется написать другую функцию, которая действует как главная, т.е. которая вызывает все остальные функции. Таким образом, вы настроили свой терминал для выполнения этой основной функции, которая будет заботиться об остальном.
-121--99416-Можно использовать сценарий, который запускается автоматически при каждой загрузке.
Добавить rfkill unblock wifi
или rfkill unblock wlan
в /etc/rc.local
Для этого в Ubuntu 14,04 используйте текстовый редактор gedit (или избранный):
sudo gedit /etc/rc.local
-121-145446- У вас нет пути избегать этого
При использовании метода ssh по умолчанию apt
необходимо войти на удаленный сервер, вызвать /bin/sh
для получения доступа к оболочке и выполнить некоторую работу с некоторыми утилитами GNU, такими как find
, dd
.
Исходный код apt подтвердил его:
157 Args[i++] = "/bin/sh";
158 Args[i] = 0;
159 execvp(Args[0],(char **)Args);
160 exit(100);
(Удивительно, что apt
по-прежнему использует find
с опцией -follow
, которая помечена как устаревшая)
Я создал тестовый аккаунт и регистрировал каждую команду apt
, выполненную
на удаленном сервере, используя простой скрипт в качестве замены для
оболочки владельца репозитория. Очевидно, apt
порождает удаленную оболочку, чтобы
чтобы найти полный путь к известным файлам::
2015-09-14: Executing 'sh -c /bin/sh'; input and output follows:
find /tmp/repo/./InRelease -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Release.gpg -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Release -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Packages.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./it_CH.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./it.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./en.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Packages.xz -follow -printf '%s\n' 2> /dev/null || echo
...
Поэтому, я думаю, вы не можете ограничить действия пользователя репозитория через
rssh
, поскольку: (1) команды, которые должны быть выполнены, передаются в
удаленной оболочке через STDIN (в отличие от функции SSH remote exec), и
(2) команды являются конвейерами оболочки.
Если вы все еще хотите ограничить действия, выполняемые пользователем репозитория удаленно, я вижу два пути:
Установите оболочку пользователя repo на
rbash
вместо этого, и предоставить настраиваемый параметр $PATH
, содержащий только те
команды, которые должны быть запущены. (Обязательно установите $PATH
и снимите установку
другие переменные оболочки из начального файла, который не может быть написан
от пользователя репозитория). Это все еще оставляет возможность любому человеку
имеющего полномочия доступа, прочитать любой файл в системе.
Создайте chroot jail только с файлами repo и любыми командами, необходимыми для APT.
APT, и установите оболочку пользователя repo на скрипт или программу, которая
выполняет chroot /jail "$@"
вместо этого.
apt-get update
действийВот скрипт, который я использовал для логирования действий, выполняемых удаленно:
#!/bin/sh
echo "$(date -I): executing 'sh $@'; input and output follows" >> /tmp/sh.log
tee -a /tmp/sh.log | /bin/sh "$@" | tee -a /tmp/sh.log