{"id":13813052,"url":"https://github.com/troglobit/uftpd","last_synced_at":"2025-07-23T03:08:44.204Z","repository":{"id":16601792,"uuid":"19356379","full_name":"troglobit/uftpd","owner":"troglobit","description":"FTP/TFTP server for Linux that just works™","archived":false,"fork":false,"pushed_at":"2022-02-18T07:31:46.000Z","size":575,"stargazers_count":173,"open_issues_count":6,"forks_count":34,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-05-01T19:34:24.794Z","etag":null,"topics":["c","finit","ftp-server","ftpd","ftpd-server","inetd","linux","tftp-server","tftpd","unix"],"latest_commit_sha":null,"homepage":"https://troglobit.com/projects/uftpd/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/troglobit.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE-OF-CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null}},"created_at":"2014-05-01T20:11:28.000Z","updated_at":"2024-03-06T15:47:47.000Z","dependencies_parsed_at":"2022-07-26T06:02:07.764Z","dependency_job_id":null,"html_url":"https://github.com/troglobit/uftpd","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/troglobit/uftpd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troglobit%2Fuftpd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troglobit%2Fuftpd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troglobit%2Fuftpd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troglobit%2Fuftpd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/troglobit","download_url":"https://codeload.github.com/troglobit/uftpd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troglobit%2Fuftpd/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266609481,"owners_count":23955643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"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":["c","finit","ftp-server","ftpd","ftpd-server","inetd","linux","tftp-server","tftpd","unix"],"created_at":"2024-08-04T04:01:01.060Z","updated_at":"2025-07-23T03:08:44.180Z","avatar_url":"https://github.com/troglobit.png","language":"C","readme":"No Nonsense FTP/TFTP Server\n===========================\n[![License Badge][]][License] [![GitHub Status][]][GitHub] [![Coverity Status][]][Coverity Scan]\n\nuftpd is a UNIX daemon with sane built-in defaults.  It just works.\n\n\nFeatures\n--------\n\n* FTP and/or TFTP\n* No complex configuration file\n* Runs from standard UNIX inetd, or standalone\n* Uses `ftp` user's `$HOME`, from `/etc/passwd`, or custom path\n* Uses `ftp/tcp` and `tftp/udp` from `/etc/services`, or custom ports\n* Privilege separation, drops root privileges having bound to ports\n* Possible to use symlinks outside of the FTP home directory\n* Possible to have group writable FTP home directory\n\n\nUsage\n-----\n\n```\nuftpd [-hnsv] [-l LEVEL] [-o OPTS] [PATH]\n\n  -h         Show this help text\n  -l LEVEL   Set log level: none, err, notice (default), info, debug\n  -n         Run in foreground, do not detach from controlling terminal\n  -o OPT     Options:\n                      ftp=PORT\n                      tftp=PORT\n                      pasv_addr=ADDR\n                      writable\n  -s         Use syslog, even if running in foreground, default w/o -n\n  -v         Show program version\n\nThe optional 'PATH' defaults to the $HOME of the /etc/passwd user 'ftp'\nBug report address: https://github.com/troglobit/uftpd/issues\n```\n\nTo start uftpd in the background as an FTP/TFTP server:\n\n    uftpd\n\nIf the `ftp` user does not exist on your system, `uftpd` defaults to\nserve files from the `/srv/ftp` directory.  To serve another directory,\nsimply append that directory to the argument list.\n\nUse `sudo`, or set `CAP_NET_BIND_SERVICE` capabilities, on `uftpd` to\nallow regular users to start `uftpd` on privileged (standard) ports,\ni.e. `\u003c 1024`:\n\n    sudo setcap cap_net_bind_service+ep uftpd\n\nTo change port on either FTP or TFTP, use:\n\n    uftpd -o ftp=PORT,tftp=PORT\n\nSet `PORT` to zero (0) to disable either service.\n\nNew sessions are droppbed by default if uftpd detects the FTP root is\nwritable.  To allow writable FTP root:\n\n    uftpd -o writable PATH\n\n\u003e **Note:** since v2.11 uftpd logs a lot more events by default.  Set up\n\u003e your syslogd to redirect `LOG_FTP` to a separate log file, or reduce\n\u003e the log level of uftpd using `-l error` to only log errors and higher.\n\n\nRunning from inetd\n------------------\n\nRarely used services like FTP/TFTP are good candidates to run from the\nInternet super server, inetd.  On Debian and Ubuntu based distributions\nwe recommend `openbsd-inetd`.\n\nUse the following two lines in `/etc/inetd.conf`, notice how `in.ftpd`\nand `in.tftpd` are symlinks to the `uftpd` binary:\n\n    ftp     stream  tcp nowait  root    /usr/sbin/in.ftpd\n    tftp    dgram   udp wait    root    /usr/sbin/in.tftpd\n\nRemember to activate your changes to inetd by reloading the service or\nsending `SIGHUP` to it.  Another inetd server may use different syntax.\nLike the inetd that comes built-in to [Finit][], in `/etc/finit.conf`:\n\n    inetd ftp/tcp   nowait /usr/sbin/in.ftpd  -- The uftpd FTP server\n    inetd tftp/udp    wait /usr/sbin/in.tfptd -- The uftpd TFTP server\n\n\nCaveat\n------\n\nuftpd is primarily not targeted at secure installations, it is targeted\nat users in need of a *simple* FTP/TFTP server.\n\nuftpd allows symlinks outside the FTP root, as well as a group writable\nFTP home directory \u0026mdash; user-friendly features that potentially can\ncause security breaches, but also very useful for people who just want\ntheir FTP server to work.  A lot of care has been taken, however, to\nlock down and secure uftpd by default.\n\n\nBuild \u0026 Install\n---------------\n\n### Debian/Ubuntu\n\n    curl -sS https://deb.troglobit.com/pubkey.gpg | sudo apt-key add -\n    echo \"deb [arch=amd64] https://deb.troglobit.com/debian stable main\" | sudo tee /etc/apt/sources.list.d/troglobit.list\n    sudo apt-get update \u0026\u0026 sudo apt-get install uftpd\n\n### Building from Source\n\n`uftpd` depends on two other projects to build from source, [libuEv][]\nand [lite][].  See their respective README for details, there should be\nno real surprises, both use the familiar configure, make, make install.\n\nTo find the two libraries uftpd depends on `pkg-config`.  The package\nname for your Linux distribution varies, on Debian/Ubuntu systems:\n\n```shell\nuser@example:~/\u003e sudo apt install pkg-config\n```\n\nuftpd, as well as its dependencies, can be built as `.deb` packages on\nDebian or Ubuntu based distributions.  Download and install each of the\ndependencies, and then run\n\n    ./autogen.sh      \u003c--- Only needed if using GIT sources\n    ./configure\n    make package\n\nThe `.deb` package takes care of setting up `/etc/inetd.conf`, create an\n`ftp` user and an `/srv/ftp` home directory with write permissions for\nall members of the `users` group.\n\nIf you are using a different Linux or UNIX distribution, check the\noutput from `./configure --help`, followed by `make all install`.\nFor instance, building on [Alpine Linux](https://alpinelinux.org/):\n\n    PKG_CONFIG_LIBDIR=/usr/local/lib/pkgconfig ./configure \\\n\t    --prefix=/usr --localstatedir=/var --sysconfdir=/etc\n\nProvided the library dependencies were installed in `/usr/local/`.  This\n`PKG_CONFIG_LIBDIR` trick may be needed on other GNU/Linux, or UNIX,\ndistributions as well.\n\n\nOrigin \u0026 References\n-------------------\n\nuftpd was originally based on [FtpServer][] by [Xu Wang][], but is now a\ncomplete rewrite with TFTP support by [Joachim Wiberg][], maintained at\n[GitHub][home].\n\n\n[Joachim Wiberg]: http://troglobit.com\n[the FTP]:         http://ftp.troglobit.com/uftpd/\n[Xu Wang]:         https://github.com/xu-wang11/\n[FtpServer]:       https://github.com/xu-wang11/FtpServer\n[home]:            https://github.com/troglobit/uftpd\n[Finit]:           https://github.com/troglobit/finit\n[lite]:            https://github.com/troglobit/libite\n[libuEv]:          https://github.com/troglobit/libuev\n[License]:         https://en.wikipedia.org/wiki/ISC_license\n[License Badge]:   https://img.shields.io/badge/License-ISC-blue.svg\n[GitHub]:          https://github.com/troglobit/uftpd/actions/workflows/build.yml/\n[GitHub Status]:   https://github.com/troglobit/uftpd/actions/workflows/build.yml/badge.svg\n[Coverity Scan]:   https://scan.coverity.com/projects/2947\n[Coverity Status]: https://scan.coverity.com/projects/2947/badge.svg\n","funding_links":[],"categories":["C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftroglobit%2Fuftpd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftroglobit%2Fuftpd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftroglobit%2Fuftpd/lists"}