#rev 2018-09-25 pmeier #rev 2020-08-31 alders ## page was renamed from Homepage/Security <> == Secure Webserver == You can access your personal homepage over http or https. Both protocols have the webbroot in the public_html subdirectory of your home. Also note that local users can see what is in your `public_html` directory by walking through the file system. All files in a normal static html website must be readable by the webserver and so they are readable for every user who has access to the filesystem, where your home is placed. The only way to get some level of protection locally is to use a CGI in the `public_html` directory which is only readable and executable for you, and then use this CGI as a gateway to deliver documents also stored with permissions only readable to you. == Authentication and Authorization == While speaking about access control one must distinguish between authentication and authorization. Authentication is the process of verifying that "you are who you say you are", authorization is the process of verifying that "you are permitted to do what you are trying to do". Authorization thus requires authentication. This approach is also implemented by Apache's htaccess configuration directives. E.g. * Authentication: {{{AuthBasicProvider}}} directive * Authorization: {{{Require}}} directive == Website Protection == === LOCAL vs. LDAP === There are two different "databases" access control can work with: You should use LDAP if access control should be based on registered D-ITET users and groups. On the other hand, an independent access control based on self defined users (e.g. for non D-ITET users) is achieved best using a LOCAL "database". === Local Password File === Follow these steps to configure access control for a sub directory within your `public_html` directory: 1. {{{htpasswd}}} can only be found on {{{people}}} hence you need to login there first ({{{ssh people}}}). As an alternative solution you could use a [[http://aspirine.org/htpasswd_en.html|web-based variant]] which implemented the htpasswd command in javascript (make sure to generate an '''SHA-1''' Hash!) 1. Create a directory, for example: `mkdir ~/public_html/mySecureWebsite`. 1. Create a `.htaccess` file in this directory with the following content: {{{ AuthType Basic AuthName "Protected Area" AuthUserFile /home//.htpasswd Require valid-user }}} 1. Create the password file in your home-directory with the `htpasswd` utility (installed on the webservers): {{{ touch ~/.htpasswd && htpasswd -s ~/.htpasswd anyuser }}} `htpasswd` will prompt for the new password (yes, `htpasswd` has a `-c` switch for creating a new file, but since it's pretty easy to inadvertently erase an existing file this way I recommend using the approach with `touch`). 1. Test your page in the browser. If it doesn't work as expected Apache's error log (`/var/log/apache2/error_log.people_ee_ssl @ people.ee.ethz.ch`) might give a clue. 1. Additional users/passwords can be added with `htpasswd -s ~/.htpasswd anotheruser`. Additionally, it's possible to use different password files for different subdirectories or files, for example `~/.htpasswd01` for directory `~/public_html/bla01` and `~/.htpasswd02` for directory `~/public_html/bla02` - it all depends on your needs. 1. Read more about htaccess files [[https://httpd.apache.org/docs/2.4/howto/htaccess.html|here]]. === LDAP Directory Service === For access control against registered D-ITET users and groups a more complex htaccess file is needed based on three different sections. All sections together are setting up the entire htaccess file. 1. Authentication {{{ AuthType Basic AuthName "YOUR LOGIN Text" AuthBasicProvider ldap }}} 1. Anonymous LDAP Binding Anonymous access to the LDAP server is allowed on ITET's managed offline replica (i.e update once per day) only. Direct access to ID's LDAP Service is restricted to special proxy users. A personal proxy user for staff and proj accounts can be requested (support@ee.ethz.ch) for some special cases if anonymous access is not sufficient. {{{ AuthLDAPURL "ldaps://ldap02.ee.ethz.ch ldap01.ee.ethz.ch/ou=users,ou=itet,ou=auth,o=ethz,c=ch?uid?one" }}} 1. Authorization The authorization depends on your needs. Here are some examples for common setups. Combination of authorization methods is also possible (defaults to a logical OR). a. By group: {{{ AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off Require ldap-group cn=,ou=custom,ou=groups,ou=nethz,ou=id,ou=auth,o=ethz,c=ch }}} b. By user: {{{ Require ldap-user }}} c. Valid user (i.e. no further authorization, valid authentication against the LDAP server is sufficient) {{{ Require valid-user }}} Necessary group information, i.e. the group name can be retrieved by executing 'getent group' on an ISG D-ITET manged Linux client. Read more about LDAP authentication and authorization [[https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html|here]]. == File Permissions == While using anonymous LDAP binding no special file permissions are needed A simple ''chmod 644 .htaccess'' should be fine. ---- [[CategoryWEBS]]