Сегодня возникла надобность добавить нового ftp-пользователя используя шелл. На самом деле задача эта достаточно тривиальная, но все-таки поделюсь с теми, кто возможно не знает как это сделать.

Для начала стоит создать нового пользователя, испольуя стандартные средства useradd:

useradd -d /home/ftp/myuser/ -s /dev/null myuser > /dev/null 2>&1

Домашней принята директория /home/ftp/myuser (в общем-то это стандартно), можно естественно использовать любую другую директорию, хотя лучше все же делать не извращаясь.

В большинстве случаев, доступ к шеллу должен быть закрытым для пользователя, поэтому мы использовали флаг “-s /dev/null”, т.е. как shell у пользователя будет использована псевдо-оболочка /dev/null. Стоит заметить, что у меня (на CentOS) подключиться через фтп удалось только при использовании /bin/false, /dev/null же перекрывал доступ как к шеллу, так и к фтп. В чем дело разбираться не захотел, возможно именно так это и должно работать на этой дистре (хотя в RedHat изначально добавленна псевдо-оболочка /dev/null в /etc/shells вроде как именно для этих целей).

После создания пользователя, задаем пароль:

passwd myuser

Далее, следует убедиться что /dev/null (в случае с CentOS /bin/false) присутсвуют в /etc/shells. Если наша псевдо-оболочка не найдена, добавляем ее.

И последнее, для удобства пользователя, заходящего через фтп, стоит по-определению открывать именно директорию его аккаунта. Как это сделать? ЛеХко! Для этого редактируем /etc/passwd:
вместо

myuser:x:10010:10010::/home/ftp/myuser/:/bin/false

вставляем

myuser:x:10010:10010::/home/ftp/./myuser/:/bin/false

таким образом при входе в систему, пользователь попадет в каталог myuser.

Вот, в общем-то, и все! Удачного начала рабочей недели.