31

I need to periodically give temporary and limited access to various directories on a CentOS linux server that has vsftp installed.

I've created a user using useradd [user_name] and given them a password using passwd [password].

I've created a directory in /var/ftp and then I bind this to the directory that I wish to limit access to.

What else do I need to specifically do to ensure that when this user logs into FTP, they only have access to this directory please?

  • Sorry but have you ever considered to check vsftpd.conf? – jirib Oct 9 '13 at 12:21
  • Yes. I have. It doesn't tell me how to instruct a specific user to log in to a specific directory...? – zigojacko Oct 9 '13 at 12:30
  • 1
    Sure? chroot_list_enable option... Or you mean to override directory different than $HOME? – jirib Oct 9 '13 at 12:34
  • 1
    I want to know how to declare a specific home directory for a specific user. I've enabled chroot_list_enable and created /etc/vsftpd/chroot_list. I just didn't know what to do next. – zigojacko Oct 9 '13 at 13:09
  • Then usermod to change user's homedir. – jirib Oct 9 '13 at 13:11
44

Complete answer that solved my question for any others that are after a step by step walkthrough...

Install vsftpd using this as a guide.

  • Create user with useradd [user_name].
  • Create user's password with passwd [user_name]. (You'll be prompted to specify the password).
  • Create FTP directory in /var/ftp and then bind to the 'home' directory you wish to specify for this user with mount --bind /var/www/vhosts/domain.com/ /var/ftp/custom_name/.
  • Change user's home directory with usermod -d /var/ftp/custom_name/ user_name

    In /etc/vsftpd/vsftpd.conf, ensure all all of the following are set:-

    • chroot_local_user=YES
    • chroot_list_enable=YES
    • chroot_list_file=/etc/vsftpd.chroot_list

Only list users in the vsftpd.chroot_list file if you want them to have full access to anywhere on the server. By not listing them in this file, you're saying restrict all vsftpd users to their specified home directory.

In other words (for reference):-

  1. means that by default, ALL users get chrooted except users in the file...
    • chroot_local_user=YES
    • chroot_list_enable=YES
  2. means that by default, ONLY users in the file get chrooted...
    • chroot_local_user=NO
    • chroot_list_enable=YES
  • Why not setting the home directory of that user directly to /var/www/vhosts/domain.com/? Is there some problem with that (like any potential risks)? – leemes Aug 7 '14 at 19:12
  • 2
    I just found out that vsftp seems to forbid to grant an ftp user write permissions on the chroot top level for security reasons (but I'm not 100% sure). So that might be a reason to have this "indirection" in order to grant the ftp user write access to a specific folder while not allowing to view any sibling folder (which would be the case if you simply set his home one level up, which avoids the mentioned issue). (see ubuntuforums.org/…) – leemes Aug 7 '14 at 21:21
  • 2
    @zigojacko does your user only see their assigned home dir? For me, this defaults the user to the assigned directory, but, they still can see other folders and can snoop around all the way up to root, though with only read access. – GraehamF Feb 20 '18 at 15:26
  • 1
    This answer, in combination with unix.stackexchange.com/questions/208960/… was the full answer for me. I ended up creating a user in a group and limited the group access to the desired directory. – GraehamF Feb 20 '18 at 15:52
10

For me it didn't work even after the above. There was a local_root already set to a directory, and whatever I do, user's directory hasn't jailed. Finally it is worked after only changed

chroot_local_user=YES

And following procedure

  1. vi /etc/vsftpd.conf
  2. Add the line 'user_config_dir=/etc/vsftpd_user_conf' (no quotes)
  3. mkdir /etc/vsftpd_user_conf;
  4. cd /etc/vsftpd_user_conf
  5. vi user_name;
  6. Enter the line 'local_root=/srv/ftp/user_name'

Just my two cents if anyone else had same issue.

  • I followed this procedure to change the root directory of vsftpd, including the additional steps by gnaanaa. Unfortunately, it doesn't work yet. Filezilla reports 530 Login incorrect. The user and password are according to the procedure above (user_name). I created a test user ftp2, and set its password. The Filezilla normal logon uses that username and password. I also set the root directory read only, and created a lower level directory with write permissions according to this post I'm using Ubuntu 16.04 if that makes any difference. – tim11g Jun 14 '16 at 14:35
  • I'm using Ubuntu 16.04 if that makes any difference, @gnaanaa. Also I thought it was odd that there was no ftp directory in /var. So I had to create /var/ftp, and then /var/ftp/user_name. code<br/> Response: 220 (vsFTPd 3.0.3)<br/> Command: USER ftp2<br/> Response: 331 Please specify the password.<br/> Command: PASS *****<br/> Response: 530 Login incorrect.<br/> Error: Critical error: Could not connect to server <br/> code – tim11g Jun 14 '16 at 14:42
  • Firstly, look why you couldn't login to the server. You can debug the issue with jailing only after success login. Cheers. – gnaanaa Jun 15 '16 at 23:01
  • Does vsftp use a different user/password compared to the accounts on the machine? I discovered that smb passwords had to be set separately with smbpasswd -a. Does vsftpd work the same way? – tim11g Jun 16 '16 at 12:08
  • No, it is the system user account. check this answer : askubuntu.com/questions/413677/vsftpd-530-login-incorrect – gnaanaa Jun 16 '16 at 22:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.