{"id":26414289,"url":"https://github.com/borisskert/ansible-vsftpd","last_synced_at":"2026-05-07T02:35:45.999Z","repository":{"id":104037236,"uuid":"268632461","full_name":"borisskert/ansible-vsftpd","owner":"borisskert","description":"Ansible role to install vsftpd as docker service managed by systemd","archived":false,"fork":false,"pushed_at":"2020-09-27T14:21:12.000Z","size":46,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-02T15:44:29.601Z","etag":null,"topics":["ansible","ansible-role","docker","systemd","vsftpd"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/borisskert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-06-01T21:06:57.000Z","updated_at":"2021-02-14T03:47:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"42949e67-5bca-4364-8bfe-b021a997cbb4","html_url":"https://github.com/borisskert/ansible-vsftpd","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/borisskert/ansible-vsftpd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-vsftpd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-vsftpd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-vsftpd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-vsftpd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/borisskert","download_url":"https://codeload.github.com/borisskert/ansible-vsftpd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-vsftpd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32720444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","ansible-role","docker","systemd","vsftpd"],"created_at":"2025-03-17T23:58:33.810Z","updated_at":"2026-05-07T02:35:45.994Z","avatar_url":"https://github.com/borisskert.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ansible-vsftpd\n\nInstalls a [vsftpd](https://security.appspot.com/vsftpd.html) FTP server as a systemd-managed Docker container.\n\n## System requirements\n\n* Docker\n* Systemd\n\n## Role requirements\n\n* python-docker package\n\n## Tasks\n\n* Create volume directories\n* Setup vsftpd config\n* Build Docker image\n* Setup logrotate (optional)\n* Create user accounts (within Docker container)\n\n## Role parameters\n\n| Variable       | Type | Mandatory? | Default | Description           |\n|----------------|------|------------|---------|-----------------------|\n| vsftpd_centos_version  | version number  | no     | latest      | Defines the version of the centos base image |\n| vsftpd_package_version | package version | no     | latest      | Defines the version of the vsftpd packaged which will be installed within the docker image. Run `docker run --rm centos yum list vsftpd` to list the available vsftpd package versions |\n| vsftpd_data_port       | number          | no     | 20          | Defines the ftp data port |\n| vsftpd_control_port    | number          | no     | 21          | Defines the ftp control port |\n| vsftpd_interface       | ip address      | no     | 0.0.0.0     | Defines the mapped Docker network interface address |\n| vsftpd_volumes_path    | text            | yes    |             | Defines the volumes base directory on host system   |\n| vsftpd_config_path     | text            | no     | `{{ vsftpd_volumes_path }}/config` | Defines the config volume directory on host system |\n| vsftpd_log_volume      | text            | no     | `{{ vsftpd_volumes_path }}/log`    | Defines the log volume directory on host system |\n| vsftpd_home_volume     | text            | no     | `{{ vsftpd_volumes_path }}/home`   | Defines the home volume directory for vsftpd users on the host system |\n| vsftpd_pasv_enable     | boolean         | no     | false                              | Enables/Disables ftp PASV mode |\n| vsftpd_pasv_min_port   | number          | yes, if PASV enabled |                      | Defines the minimum PASV port |\n| vsftpd_pasv_max_port   | number          | yes, if PASV enabled |                      | Defines the maximum PASV port |\n| vsftpd_pasv_address    | text            | no                   |                      | Defines the PASV ip address |\n| vsftpd_pasv_addr_resolve | text          | no                   |                      | Read the vsftp docs: see `pasv_addr_resolve` option |\n| vsftpd_users             | array of `user` | no                 | []                   | Defines the vsftpd users |\n| vsftpd_anonymous_enable  | boolean         | no                 | false                | Enables anonymous access without login |\n| vsftpd_anon_upload_enable | boolean        | no                 | false                | Enables anonymous file uploads         |\n| vsftpd_ipv6_enable        | boolean        | no                 | false                | Enables IPv6 support |\n| vsftpd_ssl_enable         | boolean        | no                 | false                | Enables SSL/TLS support |\n| vsftpd_ssl_cert_file:     | text           | yes, if SSL/TLS is enabled |              | Setup the SSL/TLS certificate file path |\n| vsftpd_ssl_private_key_file | text         | yes, if SSL/TLS is enabled |              | Setup the SSL/TLS private |\n| vsftpd_require_ssl_reuse    | boolean      | no                         | true         | Read the vsftp docs: see `require_ssl_reuse` option |\n| vsftpd_allow_anon_ssl       | boolean      | no                         | false        | Read the vsftp docs: see `allow_anon_ssl` option |\n| vsftpd_implicit_ssl         | boolean      | no                         | false        | Read the vsftp docs: see `implicit_ssl` option |\n| vsftpd_banner               | text         | no                         | Welcome to FTP Server | Read the vsftp docs: see `ftpd_banner` option |\n| vsftpd_dirmessage_enable    | boolean      | no                         | false                 | Read the vsftp docs: see `dirmessage_enable` option |\n| vsftpd_max_clients          | number       | no                         | 0                     | Read the vsftp docs: see `max_clients` option |\n| vsftpd_max_per_ip           | number       | no                         | 0                     | Read the vsftp docs: see `max_per_ip` option  |\n| vsftpd_xferlog_enable       | boolean      | no                         | false                 | Read the vsftp docs: see `xferlog_enable` option |\n| vsftpd_log_ftp_protocol     | boolean      | no                         | false                 | Read the vsftp docs: see `log_ftp_protocol` option |\n| vsftpd_chroot_users         | boolean      | no                         | false                 | Enable user chroot (read the vsftpd docs for further details) |\n| vsftpd_logrotate_enable     | boolean      | no                         | false                 | Enables logrotate configuration for the logs |\n\n### Definition `user`\n\n| Property      | Type | Mandatory? | Description           |\n|---------------|------|------------|-----------------------|\n| username      | text | yes        | Username of the specified user |\n| password      | text | yes        | (Clear text) password of the specified user |\n| uid           | number | yes      | Unix user id                                |\n| update_password | boolean | yes   | Defines if the user password will be updated |\n\n## Usage\n\n### Requirements\n\n```yaml\n- name: install-vsftpd\n  src: https://github.com/borisskert/ansible-vsftpd.git\n  scm: git\n```\n\n### Playbook\n\n```yaml\n- hosts: test_machine\n  become: yes\n\n  roles:\n    - role: install-vsftpd\n      vsftpd_centos_version: 8.2.2004\n      vsftpd_package_version: 3.0.3-31.el8\n      vsftpd_volumes_path: /srv/vsftpd\n      vsftpd_log_volume: /var/log/vsftpd\n      vsftpd_home_volume: /srv/vsftpd/home\n      vsftpd_anonymous_enable: true\n      vsftpd_anon_upload_enable: true\n      vsftpd_pasv_enable: true\n      vsftpd_pasv_min_port: 21111\n      vsftpd_pasv_max_port: 21112\n      vsftpd_pasv_address: my.ftpserver.org\n      vsftpd_pasv_addr_resolve: true\n      vsftpd_ipv6_enable: false\n      vsftpd_ssl_enable: true\n      vsftpd_require_ssl_reuse: false\n      vsftpd_implicit_ssl: false\n      vsftpd_allow_anon_ssl: true\n      vsftpd_ssl_cert_file: /srv/openssl/certs/ftp.site.org/fullchain.pem\n      vsftpd_ssl_private_key_file: /srv/openssl/certs/ftp.site.org/privkey.pem\n      vsftpd_xferlog_enable: true\n      vsftpd_log_ftp_protocol: true\n      vsftpd_chroot_users: true\n      vsftpd_logrotate_enable: true\n      vsftpd_users:\n        - username: foo\n          password: foo123\n          uid: 2001\n        - username: bar\n          password: bar123\n          uid: 2002\n```\n\n## Testing\n\nRequirements:\n\n* [Vagrant](https://www.vagrantup.com/)\n* [VirtualBox](https://www.virtualbox.org/)\n* [Ansible](https://docs.ansible.com/)\n* [Molecule](https://molecule.readthedocs.io/en/latest/index.html)\n* [yamllint](https://yamllint.readthedocs.io/en/stable/#)\n* [ansible-lint](https://docs.ansible.com/ansible-lint/)\n* [Docker](https://docs.docker.com/)\n\n### Run within docker\n\n```shell script\nmolecule test\n```\n\n### Run within Vagrant\n\n```shell script\n molecule test --scenario-name vagrant --parallel\n```\n\nI recommend to use [pyenv](https://github.com/pyenv/pyenv) for local testing.\nWithin the Github Actions pipeline I use [my molecule Docker image](https://github.com/borisskert/docker-molecule).\n\n## License\n\nMIT\n\n## Design decisions\n\n| Decision | Alternatives | Reason |\n| -------- | ------------ | ------ |\n| Why centos base image? | alpine | vsftp on alpine causes weird segfaults on logoff when TLS enabled |\n\n## Links\n\n* [vsftpd_conf](http://vsftpd.beasts.org/vsftpd_conf.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborisskert%2Fansible-vsftpd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fborisskert%2Fansible-vsftpd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborisskert%2Fansible-vsftpd/lists"}