Вчера для одного проекта понадобилось создавать пользователей с условием того, чтобы они никогда не смогли зайти в чужую домашнюю папку (дада, хостинг с 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"
что за ужас,
$ man adduser.conf
/USERGROUPS
/DIR_MODE
Расскажете потом, какого вам следить за актуальностью adduser.conf на большом количестве машинок и чертыхаться проверять при каждом добавлении пользователя что в итоге получилось.
А, ещё расскажете, какого вам держать 2 версии конфига и менять их перед созданием обычного пользователя и защищенного.
$(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 тогда?
chpasswd есть не везде, учитесь писать кроссплатформенное. Аналогично с tr.
А по поводу data — покажите мне своё видение.
За chpasswd я не уверен, хотя не вижу причин для его отсутствия — он вроде как с pam вместе идёт. Что где-то нету tr — это что-то странное — он часть gnu-coreutils.
Что вы хотите услышать про data? Вопрос мой по моему очевиден — зачем вы сместили домашний каталог из /home/$username в /home/$username/data?
> За chpasswd
Кому то я уже отвечал, что его нет во FreeBSD. А tr я не нашел в OpenBSD, помнится. Да и во фре его нет, скорее всего.
> мой по моему очевиден
Не помню уже. Зачем то нужно было, в обычных хомяках они вполне себе ходили друг к другу.
> его нет во FreeBSD
действительно нету… Ну с BSD я можно сказать вообще не общаюсь — за исключением ознакомительных виртуалок, где и проверил ваши слова :-)
p.s. оО время в блоге в UTC бежит?
Около того. Общаться удобнее, у всех пояса часовые разные. А Мск даже для меня, живущего в Мск, не стандарт времени.
#/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»
Не совсем понятно, если создать пользователся и права поставить 750 на его домашнюю директорию то к нему и так никто не сможет ходить кроме рута и пользователей в группе.
chroot в sftp сделать нельзя будет
ПОдскажите нубу где мне вырвать пароль? после таких команд
Создал пользователя на дебиан 7
С такой команндой
# useradd -m steam
# su — steam
Где можно просмотреть дефаулт очень интересно
Дефолтного пароля нет.
Его нужно задать командой passwd.