У того кто попал на эту страницу случайно может возникнуть вопрос:
Зачем запускать Skype от стороннего (другого) пользователя?
Это вопрос безопасности.
- Чтобы скайп не совал свой нос в ваши файлы
- Чтобы тот кто сможет взломать скайп не совал нос в ваши файлы
Для работы Skype нужен только доступ в интернет и к папке с его профилем. Всё остальное, в частности доступ к вашим папкам и файлам, ему не нужен. Поэтому отрежем всё остальное поместив работающий Skype в пространство стороннего (другого) непривелигированного пользователя.
Этот пользователь будет предназначен только для запуска скайп. Поэтому нужно создать этого пользователя. Но прежде нужно создать группу skype и пользователя skype от чьего имени будем запускать Skype.
# groupadd skype
Затем в эту группу создать пользователя skype с домашним каталогом /home/skype/ и шелом /bin/bash
# useradd -m -g skype -G audio,video -s /bin/bash skype
И не забывайте поставить пароль
# passwd skype
После этих действий уже можно запустить шел и сменить пользователя и там запустить скайп
[user001@m750 ~]$ su -l skype Password: [skype@m750 ~]$ skype [skype@m750 ~]$
После этого вы увидите окно скайпа загружающего профиль «по-умолчанию».
Но этого не достаточно для запуска skype в автоматическом режиме прямо из скрипта.
Далее мы добавим в файл /home/skype/.bashrc :
export DISPLAY=":0.0"
А теперь скайп можно запустить простой командой:
[user001@m750 ~]$ xhost +local: && su skype -c skype non-network local connections being added to access control list Password:
Далее чтобы упростить запуск Skype я прописываю алиас в пользовательском /home/user001/.bashrc от которого работаю
alias xhost +local: && su skype -c "/home/skype/skype.sh"
Ну и осталось открыть содержимое командного файла из профиля пользователя «skype»
#!/bin/bash TEST="" TEST=`ps afx | grep skype | grep user-one | awk '{print $1}'` if [ -z "${TEST}" ] ; then echo "trying to start skype user-one" nohup skype --dbpath=/home/skype/.Skype-user-one &>> /home/skype/nohup-user-one.log 2>&1& else echo -e "user-one is running on pid [${TEST}]" fi
Данный командный файл проверяет что скайп не запущен и затем запускает его с игнорированием сигналов потери связи (hangup) и скайп будет продолжать выполняться в фоновом режиме и после того, как пользователь skype выйдет из системы.
В домашнем каталоге пользователя skype будет создан файл /home/skype/nohup-user-one.log . Именно туда будут записываться все ошибки которые скайп будет выводить во время работы.
Обратите внимание что скайп запускается с профилем /home/skype/.Skype-user-one отличным от дефолтного. Таким образом можно запустить несколько Skype с разными профилями и решить вопрос «два и более скайпов одновременно».
Невозможно сохранить файл
В Skype 2.0.0.35 (как в последующих вплоть до 4.3.0.37) для Linux есть одна особенность переноса профиля. Если перенести профиль скайпа в другого пользователя то окажется, что Skype не может сохранять файлы которые принимает. Это связано с тем, что он хранит в профиле абсолютный путь к папке с файлами которые сохраняет. В этой версии скайп настройка каталога для сохранения файлов есть только в окне сохранения файлов. Установите её в каталог пользователя скайп.
Для проверки правильности установки пути в профиле можно использовать такой скрипт. В качестве параметра ему необходимо передать путь к профилю skype.
PROFILE=$1 # выловить из профиля аккаунт по-умолчанию ACCOUNT=`cat ${PROFILE}/shared.xml | sed -n '/<Account>/,/<\/Account>/p' | sed -e 's/[ \t]\+//g' | grep '<Default>' | sed -e 's/^<Default>\(.*\)<\/Default>$/\1/g'` echo -e "-----------------\nProfile \"${PROFILE}/${ACCOUNT}\"" if [ -n "${ACCOUNT}" ] && [ -e "${PROFILE}/${ACCOUNT}/config.xml" ] ; then DOWNLOADPATH=`cat "${PROFILE}/${ACCOUNT}/config.xml" | sed -n '/^[ \t]*<FileTransfer>[ \t]*$/,/^[ \t]*<\/FileTransfer>[ \t]*$/p' | grep '<SavePath>' | sed -e 's/[ \t]*<SavePath>\(.*\)<\/SavePath>[ \t]*$/\1/g'` if [ -n "${DOWNLOADPATH}" ] && [ -e "${DOWNLOADPATH}" ] ; then echo -e "Download path is [OK]" else [ -z "${DOWNLOADPATH}" ] && echo -e "Download path not defined." || echo -e "Download path \"${DOWNLOADPATH}\" not exists." exit 1 fi else echo -e 'Default account not found. Download folder not checked.' exit 1 fi
Чтобы файлы принимаемые скайп были доступны вашему пользователю не забудьте поставить правильно права и примонтировать её или прилинковать прямо в дерево вашего пользователя. У меня это user001.
Я это делаю через smb поднятый на той же машине.
Например в этом варианте при линковке пароль будет запрошен интерактивно:
$ sudo mount -t cifs -o rw,nosetuids,gid=1000,uid=1000,nounix,iocharset=utf8,user=skype "//127.0.0.1/skype/SkypeDownload" "/home/user001/mounts/skype-download"
gid=1000 и uid=1000 это идентификаторы пользователя user001 и группы user001.
А вот так можно автоматизировать ввод пароля:
$ sudo mount -t cifs -o rw,nosetuids,gid=1000,uid=1000,nounix,iocharset=utf8,credentials="/home/user001/skypecredentials.smb" "//127.0.0.1/skype/SkypeDownload" "/home/user001/mounts/skype-download"
Содержимое файла skypecredentials.smb это пара строк:
$ cat /home/user001/skypecredentials.smb username=skype password=slkdjfoWie376jfrowief
Раз уж mount выполняется с привилегиями root то для пущей безопасности файл /home/user001/skypecredentials.smb можно разместить в профиле пользователя /root/. Это спрячет файл с логином и паролем к пользователю скайпа чтобы он не валялся где-то в профиле user001.
Открываем новый или переоткрываем старый терминал, чтобы отработал изменённый bashrc и проверяем
[user001@m750 ~]$ skype non-network local connections being added to access control list Password: trying to start skype user-one
Готово.
Обновлено 14.01.2015.