Debian.pro

Блог для пользователей и администраторов Debian


Debian, создаём пользователей так, чтобы они не могли ходить друг к другу в домашнюю папку.

Вчера для одного проекта понадобилось создавать пользователей с условием того, чтобы они никогда не смогли зайти в чужую домашнюю папку (дада, хостинг с mod_php без вебморды для панели управления). Строим велосипеды в общем.
Но в целом мне такое приходится делать часто и руками надоело. Поэтому набросал готовый скриптик, который создает пользователя с рандомным паролем. Скриптик я пытался сделать максимально универсальным, чтобы заработал на любой тарантайке.
Домашние каталоги у пользователей будут /home/username/data.
В хомяки пользователей, которые были созданы «как обычно» эти пользователи попасть смогут.
Нельзя будет попасть в том числе и в каталог, который лежит в хомяке пользователя и имеет права 777. Но если форкнуть баш прямо в этом каталоге — на него, естественно, будут все права (например, находясь в каталоге /home/user1/data/dir c правами 777 сделать su user2. Тогда у user2 будут все права, пока он не сделает cd за пределы этой директории).
Скрипт можно забрать по ссылке http://debian.pro/files/scripts/newuser.sh
«Ставить» его так:
root@master1:~# wget -O /usr/bin/newuser.sh http://debian.pro/files/scripts/newuser.sh && chmod +x /usr/bin/newuser.sh
Работает так:
root@master1:~# newuser.sh inkynew
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Username is inkynew
Password is pywgrci65ls28g

Ну и текст скрипта, чтобы знающие люди могли поматерить меня-быдлокодера и понять, как создавать таких пользователей ручками:
#/bin/bash
username=$1
password=$(head -c 100 /dev/urandom | base64 | sed 's/[+=/A-Z]//g' | tail -c 15)
mkdir /home/$username
chown -R root /home/$username
chmod -R 750 /home/$username
useradd -d /home/$username/data -s /bin/bash -m $username
echo -e "$password\n$password\n" | passwd $username
mkdir /home/$username/data/www
mkdir /home/$username/data/logs
mkdir /home/$username/data/tmp
chown -R $username:$username /home/$username/data/
chmod -R 755 /home/$username/data
chown root:$username /home/$username
echo -e "Username is $username\nPassword is $password"


Комментарии (14):

  1. nnn :

    что за ужас,
    $ man adduser.conf
    /USERGROUPS
    /DIR_MODE

  2. Расскажете потом, какого вам следить за актуальностью adduser.conf на большом количестве машинок и чертыхаться проверять при каждом добавлении пользователя что в итоге получилось.

  3. А, ещё расскажете, какого вам держать 2 версии конфига и менять их перед созданием обычного пользователя и защищенного.

  4. Алексей :

    $(head -c 100 /dev/urandom | base64 | sed ‘s/[+=/A-Z]//g’ | tail -c 15)
    Что это?!?!
    Так явно лучше будет: cat /dev/urandom | tr -cd ‘a-zA-Z0-9′ | head -c 15

    Дальше вы видимо не слышали об утилите chpasswd, раз использовали интерактивный passwd. (echo $username:$password | chpasswd)

    И в завершении — сколько я не вчитывался в ваш скрипт, я так и не понял зачем вам каталог data и почему все происходит в нём? Какого назначение /home/$username тогда?

  5. chpasswd есть не везде, учитесь писать кроссплатформенное. Аналогично с tr.
    А по поводу data — покажите мне своё видение.

  6. Алексей :

    За chpasswd я не уверен, хотя не вижу причин для его отсутствия — он вроде как с pam вместе идёт. Что где-то нету tr — это что-то странное — он часть gnu-coreutils.

    Что вы хотите услышать про data? Вопрос мой по моему очевиден — зачем вы сместили домашний каталог из /home/$username в /home/$username/data?

  7. > За chpasswd
    Кому то я уже отвечал, что его нет во FreeBSD. А tr я не нашел в OpenBSD, помнится. Да и во фре его нет, скорее всего.

    > мой по моему очевиден
    Не помню уже. Зачем то нужно было, в обычных хомяках они вполне себе ходили друг к другу.

  8. Алексей :

    > его нет во FreeBSD
    действительно нету… Ну с BSD я можно сказать вообще не общаюсь — за исключением ознакомительных виртуалок, где и проверил ваши слова :-)

    p.s. оО время в блоге в UTC бежит?

  9. Около того. Общаться удобнее, у всех пояса часовые разные. А Мск даже для меня, живущего в Мск, не стандарт времени.

  10. han6man :

    #/bin/bash
    username=$1
    password=$2 #(head -c 100 /dev/urandom | base64 | sed ‘s/[+=/A-Z]//g’ | tail -c 15)
    domain=$3
    mkdir /home/$username
    chown -R root /home/$username
    chmod -R 750 /home/$username
    useradd -d /home/$username/data -s /bin/bash -m $username
    echo -e «$password\n$password\n» | passwd $username
    mkdir /home/$username/data/$domain
    mkdir /home/$username/data/$domain/www
    mkdir /home/$username/data/$domain/logs
    mkdir /home/$username/data/$domain/tmp
    mkdir /home/$username/data/$domain/private
    mkdir /home/$username/data/$domain/ssl.crt
    chown -R $username:$username /home/$username/data/
    chmod -R 755 /home/$username/data
    chown root:$username /home/$username
    echo -e «Username is $username\nPassword is $password»

  11. Михаил :

    Не совсем понятно, если создать пользователся и права поставить 750 на его домашнюю директорию то к нему и так никто не сможет ходить кроме рута и пользователей в группе.

  12. chroot в sftp сделать нельзя будет

  13. Ден :

    ПОдскажите нубу где мне вырвать пароль? после таких команд
    Создал пользователя на дебиан 7
    С такой команндой
    # useradd -m steam
    # su — steam

    Где можно просмотреть дефаулт очень интересно

  14. Дефолтного пароля нет.

    Его нужно задать командой passwd.

Написать комментарий