You are not logged in.
I've installed and configured vsftpd so the user can only access his home folder /home/share however he can do cd to / and list everything. How can I lock the share user to can't go up from his home folder?
Offline
Post your /etc/vsftpd.conf
But probably https://wiki.archlinux.org/title/Very_S … hroot_jail
Offline
Here "/etc/vsftpd.conf":
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd with two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES
# Set own PAM service name to detect authentication settings specified
# for vsftpd by the system package.
pam_service_name=vsftpd
local_root=/home/share
seccomp_sandbox=NO
Also "/etc/vsftpd.chroot_list":
share
Offline
So you've set the user share to not be chrooted then.
Read the wiki page or the commented config file carefully.
Offline
I've added a # to line:
#chroot_list_file=/etc/vsftpd.chroot_list
However the share user still has access to /
Offline
That does not change anything as the value of the setting does not deviate from the default.
You have either still not read the comment section before the chroot related settings or are incapable of understanding them.
Inofficial first vice president of the Rust Evangelism Strike Force
Offline
I don't think I understand it.
First of all, what does chrooting a user in ftp? Is the same as local chroot? Because normal users can cd into upper directories and most / directories.
If not chrooted, means that can access anywhere, so how do I set the top level that can access?
I don't understanding the vsftpd naming terms. Please help explaining them and how to fix the problem.
As I see it, the solution would be to disable chroot_local_user, set instead local_root value and disable anonymous_enable.
Last edited by korimitsu (2022-09-07 07:40:11)
Offline
According to my tests with vsftpd
- chroot_local_user=NO seems to be the default
- chroot_local_user changes (toggles) the behavior of chroot_list_enable/chroot_list_file: If the first is YES the latter becomes a list of users not to chroot
- if the users home directory (the new root) is writable vsftpd refuses to connect
Try to set only chroot_local_user=YES (or only chroot_list_enable/chroot_list_file) and make the affected users base directories read-only.
Offline
You have now been hinted twice to read the appropriate documentation.
Since you obviously do speak English, I can only assume that you didn't bother to do so for whatever reason.
If you, against all odds, have problems understanding the English documentation that in detail explains how to use the chroot-related configuration options, you may want to consider a translation service to your native language.
Other than that, I have nothing to add to the in-comment documentation of vsftpd. It clearly explains the behavior you experience.
Inofficial first vice president of the Rust Evangelism Strike Force
Offline
According to my tests with vsftpd
- if the users home directory (the new root) is writable vsftpd refuses to connectTry to set only chroot_local_user=YES (or only chroot_list_enable/chroot_list_file) and make the affected users base directories read-only.
Does the user base being writable mean that the logged ftp user can cd the parent directory? How am I supposed to have my home directory being read only but being she to upload files to it?
Last edited by korimitsu (2022-09-07 08:59:29)
Offline
Does the user base being writable mean that the logged ftp user can cd the parent directory?
No.
How am I supposed to have my home directory being read only but being she to upload files to it?
By using subdirectories? If you trust the FTP users completely, you can set "allow_writeable_chroot=YES" in vsftpd.conf.
Last edited by -thc (2022-09-07 11:01:02)
Offline
Now is working, user logged is as "share" is locked to "/home/share/" which he sees as "/" and can't cd to any parent directory:
ftp> pwd
257 "/" is the current directory
Of course the user "share" exists .
$ cat /etc/vsftpd.conf
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=NO
chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd with two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES
# Set own PAM service name to detect authentication settings specified
# for vsftpd by the system package.
pam_service_name=vsftpd
local_root=/home/share
seccomp_sandbox=NO
allow_writeable_chroot=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
Only allowed ftp users (otherwise all local users all allowed to log in which is not a good idea):
$ cat /etc/vsftpd.userlist
share
Users:
$ getent passwd {1000..60000}
user:x:1000:1000:user:/home/user:/bin/bash
user2:x:1001:1003::/home/user2:/bin/bash
smbuser:x:1002:1005::/home/smbuser:/bin/bash
share:x:1003:1004::/home/share:/bin/bash
Groups:
$ groups share
share
The conclusion is that man vsftdp.conf does not explain properly what chroot means in ftp context. A regular chroot like "chroot /home/share /bin/bash" does not allow you do cd to parent directories, however for ftp it does because is kind of logging in with your account over ssh.
Last edited by korimitsu (2022-09-07 18:20:14)
Offline
...however for ftp it does because is kind of logging in with your account over ssh.
No - it doesn't. All you've done is configure vsftpd as the man page explained in the first place.
Offline