wu-ftp

wu-ftp

  目的
  • ホームディレクトリ(/home/username)よりも上位のディレクトリのアクセスをさせないようにする
    ユーザがftpするときに他のユーザのディレクトリが見えてはまずい。
    これを解決する。
  • ただし、管理者は全てをftpできるようにしておく。

1. 変更前の/etc/ftpd/ftpaccess

    aagreeting brief
    class all real,guest,anonymous *
    email root@localhost
    loginfails 5

    readme README* login
    readme README* cwd=*
    message /welcome.msg login
    message .message cwd=*

    compress yes all
    tar yes all
    chmod no guest,anonymous
    delete no guest,anonymous
    overwrite no guest,anonymous
    rename no guest,anonymous

    log transfers anonymous,real inbound,outbound
    shutdown /etc/shutmsg
    passwd-check rfc822 warn

2. 変更後の/etc/ftpd/ftpaccess

    赤:削除 青:追加または変更
    reeting brief
    class all real,guest,anonymous *
    email root@localhost
    loginfails 5

    readme README* login
    readme README* cwd=*
    message /welcome.msg login
    message .message cwd=*

    compress yes all
    tar yes all
    chmod no anonymous
    delete no anonymous
    overwrite no anonymous
    rename no anonymous

    log transfers anonymous,real inbound,outbound
    shutdown /etc/shutmsg
    passwd-check rfc822 warn

    # specify group, user will be "guest" or "real".
    guestgroup users
    realuser koizumi

    # path-filter (DON'T upload dot files)
    path-filter guest /etc/pathmsg ^[-A-Za-z0-9_\.]*$ ^\. ^-

3. /etc/passwdの変更

    アクセス制限を掛けたいユーザー(ここではkitano)のホームディレクトリを以下のように変更する。

    【変更前】
    kitano:x:502:100:Takeshi Kitano:/home/kitano:/bin/bash

    ホームディレクトリである/home/kitanoを/homeに変更する。
    ログインディレクトリを/home/kitano/にする。
    このため、ホームディレクトリ/./ログインディレクトリのように/./で区切って記述する。

    【変更後】
    kitano:x:502:100:Takeshi Kitano:/home/./kitano:/bin/bash

    webをアップロードすることが多ければ、アップロード先のpublic_htmlまで指定すればよい。
    kitano:x:502:100:Takeshi Kitano:/home/./kitano/public_html:/bin/bash

4. ファイルやディレクトリが見えなくなるので

    /homeがホームディレクトリになったのはOK。
    しかし/homeより上のディレクトリは一切アクセスできなくなった。
    なぜなら、/bin/lsが利用できないからだ。
    ユーザはログインしたとき/homeが/に見えるので、/home/binと/home/libを作成すればよい。

    ユーザのディレクトリに移動して、binとlibディレクトリを作る。
    # mkdir /home/bin
    # mkdir /home/lib

    lsコマンドが必要とするライブラリを調べる。
    # ldd /bin/ls
    libc.so.6 => /lib/libc.so.6 (0x40018000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

    よって、/bin/lsには/lib/libc.so.6と/lib/ld-linux.so.2が必要なのが分かった。
    この2つのファイルをコピーする。

    # cp /bin/ls /home/bin/
    # cp /lib/ld-linux.so.2 /home/lib/
    # cp /lib/libc.so.6 /home/lib/
    # cp /bin/mkdir /home/bin/
    # cp /bin/rmdir /home/bin/

    最後の2行、mkdirとrmdirも忘れずにコピーしよう。

5. セキュリティを高め、事故を防ぐ設定

    ユーザディレクトリの先頭が「.」で始まるファイルを上書きされるのを防ぐため次の1行を/etc/ftpd/ftpaccessに追加する。

    path-filter guest /etc/pathmsg ^[-A-Za-z0-9_\.]*$ ^\. ^-

    参考までにguestとrealの記述方法。
    guestgroup <groupname> [<groupname> ...]
    guestuser <username> [<username> ...]
    realgroup <groupname> [<groupname> ...]
    realuser <username> [<username> ...]