ProFTPD mini-HOWTO - Umask

## Umask

ProFTPD's `Umask` configuration directive is used to set the file permission bits on newly created files and directories. However, the way in which `Umask` is to be used is not entirely straightforward.

`Umask` is used to set the value that `proftpd` will use when calling `umask(2)`. The `umask(2)` function works something like this: `mode - umask`. (Technically, the operation is `mode & ~umask`). Thus, with a mode of `0666`, and a umask of `0022`, the permissions on the newly created file will be `0644` (e.g. `rw-r--r--`).

A quick review of permission bits:

      4 is read permission (r)
      2 is write permission (w)
      1 is execute permission (x)

The first digit of a mode (`0750`, for example) is used to specify some special bits (e.g. set-user-ID, set-group-ID, and the "sticky bit"). The second digit, the `7` in this example, specifies the user owner permissions, and is a sum of the above permission bits: `7 = 4 + 2 + 1` (e.g. `rwx`). Group owner permissions are specified by the third bit, `5`: `5 = 4 + 1` (e.g. `r-x`). And finally, other or world permissions are specified using the last bit, which in the example is `0` (no permissions, e.g. `---`). The full represenation of a mode of `0750`, as one would see it in a directory listing, would thus be: `rwxr-x---`.

The `proftpd` daemon always starts with a base mode of `0666` when creating files. Note that `Umask` can only be used to "take away" permissions granted by the base mode; it cannot be used to add permissions that are not there. This means that files uploaded to a `proftpd` server will never have the execute permission enabled by default (the base mode is does not have any execute bits enabled). This is a conscious security design decision. For directories, the base mode is `0777`. The umask used for directories can be configured using the optional second parameter to the `Umask` directive; if this second parameter is not used, the umask used for created directories will default to the same umask as used for files.

If it is necessary to make uploaded files executable, the `SITE CHMOD` FTP command can be used:

      SITE CHMOD mode file

Use of this command can be restricted using a "command" of `SITE_CHMOD` in a `<Limit>` section. For example, this section of a `proftpd.conf` file:

      <Limit SITE_CHMOD>
        AllowUser ftpadmin
        DenyAll
      </Limit>

will deny everyone except user `ftpadmin` from being able to use the `SITE CHMOD` command to change the permissions on files via FTP. Note that this construction is recommended instead of using the deprecated (as of `proftpd-1.2.2rc2`) `AllowChmod` configuration directive.

Frequently Asked Questions

Question: How can I configure `proftpd` so that I can upload a file with `770` permissions?
Answer: Short answer: you can't. Too many FTP servers, in the past, would allow users to upload executable files. Hackers would use this capability, and then exploit a flaw in one of the servers on that machine to execute the crafted file they just uploaded. Thus ProFTPD does not allow uploading of files with execute permissions.

The workaround, as mentioned above, is to allow the client to use the `SITE CHMOD` command to change the permissions on the file to have the execute permissions.

Last Updated: $Date: 2009/07/16 20:47:31 $