Wiki nguồn mở Linux tốt nhất có hỗ trợ riêng cho xác thực Windows (NTLM) [đã đóng]


8

Tôi cần thiết lập một wiki cho nhóm kỹ thuật của chúng tôi; chúng tôi là một phần của miền Windows Active Directory toàn doanh nghiệp. Hầu hết các ứng dụng CNTT của công ty sử dụng NTLM để xác thực (tự động thông qua Internet Exploder); Mặc dù tôi không phải là một phần của CNTT công ty, tôi nhận ra rằng Đăng nhập một lần (SSO) rất quan trọng đối với sự chấp nhận của người dùng.

Tôi hy vọng tìm thấy một wiki nguồn mở và miễn phí được kiểm tra tốt và có thể được lưu trữ trên linux Xem End Note 1 , đồng thời cho phép các máy tính xách tay windows của công ty tự động xác thực mà không cần nhắc mật khẩu.

Tôi đã thấy một số hack để làm cho moin xác thực với NTLM Xem End Note 2 , nhưng tôi không biết điều này thực sự sẽ hoạt động tốt như thế nào trong thực tế; vì vậy mọi trải nghiệm triển khai với moin + NTLM sẽ có giá trị. Tôi cũng đã xem FOS Wiki , nhưng FOS Wiki dường như không hỗ trợ đăng nhập tự động .

Câu hỏi:

Nói tóm lại, tôi đang tìm kiếm triển khai wiki linux miễn phí, mã nguồn mở tốt nhất với hỗ trợ xác thực NTLM tự động, tự động Xem End Note 3 ; Tôi cho điểm thưởng nếu nó có thể sử dụng Markdown hoặc tái cấu trúc văn bản .


Ghi chú cuối:

  1. Nếu tôi cảm thấy thích chạy cái này trong Windows, tôi có thể sử dụng wiki Vítturn ; tuy nhiên, suy nghĩ về việc lưu trữ các dịch vụ web trên windows khiến tôi cảm thấy tất cả đều bẩn thỉu bên trong.
  2. Xem bài đăng này trên wikimatrix
  3. Nếu một điều như vậy thậm chí tồn tại

Câu trả lời:


2

Tôi đã sử dụng moin, tôi đã cài đặt trong /opt/moin... Tôi lưu trữ nó apache2bằng cách sử dụng WSGI ... Tôi không thể mointhực hiện xác thực NTLM tự động trừ khi tôi lưu trữ nó trong Windows ... Tôi đã lưu trữ nó trong linux, nhưng nó vẫn xác thực với chúng tôi máy chủ LDAP cục bộ trong miền NT.

Đây là /opt/moin/config/wikiconfig.py... nếu bạn sử dụng nó, hãy hiểu rằng tôi đã vệ sinh cấu hình và "foo" trong mã xác thực LDAP bên dưới thực sự là tên của công ty tôi ... mọi người có một thiết lập LDAP khác nhau, vì vậy bạn có thể cần phải điều chỉnh một số trong số các tham số xác thực trong môi trường của bạn ... YMMV ...

# -*- coding: iso-8859-1 -*-
# IMPORTANT! This encoding (charset) setting MUST be correct! If you live in a
# western country and you don't know that you use utf-8, you probably want to
# use iso-8859-1 (or some other iso charset). If you use utf-8 (a Unicode
# encoding) you MUST use: coding: utf-8
# That setting must match the encoding your editor uses when you modify the
# settings below. If it does not, special non-ASCII chars will be wrong.

"""
    MoinMoin - Configuration for a single wiki

    If you run a single wiki only, you can omit the farmconfig.py config
    file and just use wikiconfig.py - it will be used for every request
    we get in that case.

    Note that there are more config options than you'll find in
    the version of this file that is installed by default; see
    the module MoinMoin.config.multiconfig for a full list of names and their
    default values.

    Also, the URL http://moinmo.in/HelpOnConfiguration has
    a list of config options.

    ** Please do not use this file for a wiki farm. Use the sample file
    from the wikifarm directory instead! **
"""

import os

from MoinMoin.config import multiconfig, url_prefix_static
from MoinMoin.auth.ldap_login import LDAPAuth
from MoinMoin.auth import MoinAuth


class Config(multiconfig.DefaultConfig):

    # Critical setup  ---------------------------------------------------

    # Directory containing THIS wikiconfig:
    wikiconfig_dir = os.path.abspath(os.path.dirname(__file__))

    # We assume that this config file is located in the instance directory, like:
    # instance_dir/
    #              wikiconfig.py
    #              data/
    #              underlay/
    # If that's not true, feel free to just set instance_dir to the real path
    # where data/ and underlay/ is located:
    #instance_dir = '/where/ever/your/instance/is'
    instance_dir = '/opt/moin'

    # Where your own wiki pages are (make regular backups of this directory):
    data_dir = os.path.join(instance_dir, 'data', '') # path with trailing /

    # Where system and help pages are (you may exclude this from backup):
    data_underlay_dir = os.path.join(instance_dir, 'underlay', '') # path with trailing /

    # The URL prefix we use to access the static stuff (img, css, js).
    # Note: moin runs a static file server at url_prefix_static path (relative
    # to the script url).
    # If you run your wiki script at the root of your site (/), just do NOT
    # use this setting and it will automatically work.
    # If you run your wiki script at /mywiki, you need to use this:
    #url_prefix_static = '/mywiki' + url_prefix_static


    # Wiki identity ----------------------------------------------------

    # Site name, used by default for wiki name-logo [Unicode]
    sitename = u'QA Wiki'

    # Wiki logo. You can use an image, text or both. [Unicode]
    # For no logo or text, use '' - the default is to show the sitename.
    # See also url_prefix setting below!
    logo_string = u'<img src="%s/common/moinmoin.png" alt="MoinMoin Logo">' % url_prefix_static

    # name of entry page / front page [Unicode], choose one of those:

    # a) if most wiki content is in a single language
    page_front_page = u"DefaultPage"

    # b) if wiki content is maintained in many languages
    #page_front_page = u"FrontPage"

    # The interwiki name used in interwiki links
    interwikiname = u'QAWiki'
    # Show the interwiki name (and link it to page_front_page) in the Theme,
    # nice for farm setups or when your logo does not show the wiki's name.
    #show_interwiki = 1


    # Security ----------------------------------------------------------

    # This is checked by some rather critical and potentially harmful actions,
    # like despam or PackageInstaller action:
    #superuser = [u"YourName", ]
    superuser = [u"Mike_Pennington", ]

    # IMPORTANT: grant yourself admin rights! replace YourName with
    # your user name. See HelpOnAccessControlLists for more help.
    # All acl_rights_xxx options must use unicode [Unicode]
    acl_rights_before = u"Mike_Pennington:read,write,delete,revert,admin"
    acl_rights_default = u"Mike_Pennington:read,write,delete,revert,admin, Known:read,write All:read"

    # The default (ENABLED) password_checker will keep users from choosing too
    # short or too easy passwords. If you don't like this and your site has
    # rather low security requirements, feel free to DISABLE the checker by:
    #password_checker = None # None means "don't do any password strength checks"
    password_checker = None

    # Link spam protection for public wikis (Uncomment to enable)
    # Needs a reliable internet connection.
    #from MoinMoin.security.antispam import SecurityPolicy


    # Mail --------------------------------------------------------------

    # Configure to enable subscribing to pages (disabled by default)
    # or sending forgotten passwords.

    # SMTP server, e.g. "mail.provider.com" (None to disable mail)
    #mail_smarthost = ""

    # The return address, e.g u"Jürgen Wiki <noreply@mywiki.org>" [Unicode]
    #mail_from = u""

    # "user pwd" if you need to use SMTP AUTH
    #mail_login = ""


    # User interface ----------------------------------------------------

    # Add your wikis important pages at the end. It is not recommended to
    # remove the default links.  Leave room for user links - don't use
    # more than 6 short items.
    # You MUST use Unicode strings here, but you need not use localized
    # page names for system and help pages, those will be used automatically
    # according to the user selected language. [Unicode]
    navi_bar = [
        # If you want to show your page_front_page here:
        #u'%(page_front_page)s',
        u'DefaultPage',
        u'SiteIndex',
        u'RecentChanges',
        u'FindPage',
        u'HelpContents',
    ]

    # The default theme anonymous or new users get
    theme_default = 'modernized'


    # Language options --------------------------------------------------

    # See http://moinmo.in/ConfigMarket for configuration in
    # YOUR language that other people contributed.

    # The main wiki language, set the direction of the wiki pages
    language_default = 'en'

    # the following regexes should match the complete name when used in free text
    # the group 'all' shall match all, while the group 'key' shall match the key only
    # e.g. CategoryFoo -> group 'all' ==  CategoryFoo, group 'key' == Foo
    # moin's code will add ^ / $ at beginning / end when needed
    # You must use Unicode strings here [Unicode]
    page_category_regex = ur'(?P<all>Category(?P<key>(?!Template)\S+))'
    page_dict_regex = ur'(?P<all>(?P<key>\S+)Dict)'
    page_group_regex = ur'(?P<all>(?P<key>\S+)Group)'
    page_template_regex = ur'(?P<all>(?P<key>\S+)Template)'

    # Content options ---------------------------------------------------

    # Show users hostnames in RecentChanges
    show_hosts = 1

    # Enable graphical charts, requires gdchart.
    #chart_options = {'width': 600, 'height': 300}


    # LDAP authentication ---------------------------------------------------

    ldap_authenticator1 = LDAPAuth(
        server_uri='ldap://10.16.16.237/',
        bind_dn = r'Americas\%(username)s',
        base_dn='dc=amer,dc=foo,dc=com',
        bind_pw='%(password)s',
        scope=2,
        referrals=0, # LDAP REFERRALS (0 needed for AD)
        search_filter='(sAMAccountName=%(username)s)',
        givenname_attribute='givenName',
        surname_attribute='sn',
        aliasname_attribute='displayname',
        email_attribute='mail',
        email_callback=None, # callback function called to make up email address
        coding='utf-8', # coding used for ldap queries and result values
        timeout=10, # how long we wait for the ldap server [s]
        start_tls=0, # usage of Transport Layer Security 0 = No, 1 = Try, 2 = Required
        tls_cacertdir=None,
        tls_cacertfile=None,
        tls_certfile=None,
        tls_keyfile=None,
        tls_require_cert=0, # 0 == ldap.OPT_X_TLS_NEVER (needed for self-signed certs)
        bind_once=True, # set to True to only do one bind - useful if configured to bind as the user on the first attempt
        autocreate=True, # set to True to automatically create/update user profiles
        #name='ldap', # use e.g. 'ldap_pdc' and 'ldap_bdc' (or 'ldap1' and 'ldap2') if you auth against 2 ldap servers
        report_invalid_credentials=True, # whether to emit "invalid username or password" msg at login time or not
    )

    auth = [ldap_authenticator1,] # this is a list, you may have multiple ldap authenticators
                                   # as well as other authenticators

    cookie_lifetime = (0, 4) # no anon user sessions, 1h session lifetime for logged-in users

    # customize user preferences (optional, see MoinMoin/config/multiconfig for internal defaults)
    # you maybe want to use user_checkbox_remove, user_checkbox_defaults, user_form_defaults,
    # user_form_disable, user_form_remove.
    ('checkbox_defaults',
    {
    'mailto_author': 0,
    'edit_on_doubleclick': 1,
    'remember_last_visit': 0,
    'show_comments': 0,
    'show_nonexist_qm': False,
    'show_page_trail': 1,
    'show_toolbar': 1,
    'show_topbottom': 0,
    'show_fancy_diff': 1,
    'wikiname_add_spaces': 0,
    'remember_me': 1,
    },
    "Defaults for user preferences, see HelpOnConfiguration/UserPreferences.")

Tôi đang sử dụng wsgi với moin, vì vậy tôi cần /opt/moin/moin.wsgi

# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - mod_wsgi driver script

    To use this, add those statements to your Apache's VirtualHost definition:

    # you will invoke your moin wiki at the root url, like http://servername/FrontPage:
    WSGIScriptAlias / /some/path/moin.wsgi

    # create some wsgi daemons - use someuser.somegroup same as your data_dir:
    WSGIDaemonProcess daemonname user=someuser group=somegroup processes=5 threads=10 maximum-requests=1000 umask=0007

    # use the daemons we defined above to process requests!
    WSGIProcessGroup daemonname

    @copyright: 2008 by MoinMoin:ThomasWaldmann
    @license: GNU GPL, see COPYING for details.
"""

import sys, os

# a) Configuration of Python's code search path
#    If you already have set up the PYTHONPATH environment variable for the
#    stuff you see below, you don't need to do a1) and a2).

# a1) Path of the directory where the MoinMoin code package is located.
#     Needed if you installed with --prefix=PREFIX or you didn't use setup.py.
#sys.path.insert(0, 'PREFIX/lib/python2.3/site-packages')

# a2) Path of the directory where wikiconfig.py / farmconfig.py is located.
#     See wiki/config/... for some sample config files.
#sys.path.insert(0, '/path/to/wikiconfigdir')
sys.path.insert(0, '/opt/moin')
sys.path.insert(0, '/opt/moin/code')
sys.path.insert(0, '/opt/moin/config')

# b) Configuration of moin's logging
#    If you have set up MOINLOGGINGCONF environment variable, you don't need this!
#    You also don't need this if you are happy with the builtin defaults.
#    See wiki/config/logging/... for some sample config files.
#from MoinMoin import log
#log.load_config('/path/to/logging_configuration_file')

from code.MoinMoin.web.serving import make_application

# Creating the WSGI application
# use shared=True to have moin serve the builtin static docs
# use shared=False to not have moin serve static docs
# use shared='/my/path/to/htdocs' to serve static docs from that path
application = make_application(shared=True)

FWIW, đây là tập tin cấu hình apache của tôi ... /etc/apache2/conf.d/moin.conf

# Create some wsgi daemons - use these parameters for a simple setup
WSGIDaemonProcess moin user=www-data group=www-data processes=5 threads=10 maximum-requests=1000 umask=0007

#
WSGIProcessGroup moin

Đây là /etc/apache2/sites-available/netwiki...

<VirtualHost *:80>
  ServerName netwiki.us.foo.com

  RewriteEngine   on
  RewriteCond     %{HTTPS} !=on
  RewriteRule     ^(.*)$ https://netwiki.us.foo.com/$1 [L,R]

  DocumentRoot /opt/moin/code/
  WSGIScriptAlias / /opt/moin/moin.wsgi
</VirtualHost>

<VirtualHost *:443>
  ServerName netwiki.us.foo.com
  DocumentRoot /opt/moin/code/
  WSGIScriptAlias / /opt/moin/moin.wsgi

  # Generate with...
  # openssl req -new -x509 -days 365 -nodes -out netwiki.pem -keyout netwiki.key
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/netwiki.pem
  SSLCertificateKeyFile /etc/apache2/ssl/netwiki.key
</VirtualHost>

2

Tôi đang ở trong tình trạng tương tự, và tôi chạy MediaWiki. Xác thực NTLM được xử lý trong Apache bằng mô-đun PyAuthenNTLM2 trên mod-python; MediaWiki đăng nhập vào người dùng (và tự động tạo tài khoản wiki cho họ lần đầu tiên) bằng tiện ích mở rộng AutomaticaREMOTE_USER .

Trải nghiệm của tôi khá tốt: SSO hoạt động tốt, người dùng không nhận thấy rằng wiki không thuộc về miền Windows và dân IT rất vui khi mật khẩu được giữ an toàn.

Tuyên bố miễn trừ trách nhiệm : Tôi là tác giả của PyAuthenNTLM2, tôi đã viết vì plugin Apache trước đây tôi đang sử dụng (Apache2 :: AuthenNTLM2) không rõ ràng và không hoạt động với chính sách bảo mật mặc định (và hợp lý) của Windows 7 (NTLMv2).


Cảm ơn thông tin, Mediawiki sẽ là một lựa chọn nếu nó không phụ thuộc quá nhiều vào PHP ... tuy nhiên, tôi có thể tìm cách tận dụng PyAuthenNTLM2 bằng tiếng rên rỉ ...
Mike Pennington

Sau khi xác thực đã diễn ra, tên người dùng được Apache chuyển đến webservice / CGI trong biến REMOTE_USER. Nếu MoinMoin có thể sử dụng REMOTE_USER thì bạn đã hoàn thành.
SquareRootOfTovenThree 19/03 '

1

Chúng tôi sử dụng MindTouch Core (phiên bản mã nguồn mở). Chạy cùng với máy ảo Linux trong Mono, sử dụng AD để xác thực. Được sử dụng trên toàn công ty từ năm 2009.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.