Date: Wed, 4 Feb 1998 04:20:54 -0800 (PST) From: Alex Belits <abelits@phobos.illtel.denver.co.us> To: Terry Lambert <tlambert@primenet.com> Cc: mike@smith.net.au, rivers@dignus.com, capriotti0@hotmail.com, capriotti@geocities.com, config@FreeBSD.ORG, joe.shevland@horizonti.com Subject: Re: WebAdmin Message-ID: <Pine.LNX.3.96.980204005855.32150A-100000@phobos.illtel.denver.co.us> In-Reply-To: <199802040704.AAA04193@usr08.primenet.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 4 Feb 1998, Terry Lambert wrote: > > > Yes. As stated, the RFC's describe an "AUTH" mechanism. If you > > > need more than that, then use NDS or X.500, with an LDAP server > > > operating against the MIB. > > > > Is your idea to transfer authentication information "transparently" > > from "wire protocol" or authenticate over "wire protocol", check access > > and use separate authentication information for LDAP? > > My *personal* idea? Use Kerberos tickets compatible with the next > generation of Microsoft products, so you authenticate once. > > My idea of what could possibly adopted over the "not invented here" > protests of the free UNIX clone camps? "Anything that works first". No, no, no -- I'm talking not about authentication implementation. Just about the way, authentication information from "wire protocol", access restrictions and authentication information that used for LDAP are related. > > > 1) Schemas are transportable; database files are not. Using > > > the protocol abstracts the schema from the implementation. > > > > Tab-separated lists are very portable. URL-encoded lists are even more > > portable -- they have predefined encoding rule for "odd" characters. In > > any case configuration replication can't be done between host that > > supports configuration database-like system and one that doesn't, whatever > > database-like system is chosen. It's good to use a protocol that everyone > > can understand and build such system over it, but portability is hardly > > the unique feature of LDAP. > > Replication is. In the very worst case I can replicate FreeBSD box configuration now using tar. Agreed, not nice at all even though but with right set of inclusion/exclusion files it's possible to write a shell script that will produce valid configuration on large number of boxes, connected to the same network. Replication the configuration handled by HTTP when server can always produce a configuration dump in the form of URL-encoded lists mapped to known set of URLs (see my example with passwd) makes replication simple. I send requests to set of URLs at the source box asking for configuration download in URL-encoded format, receive encoded lists and send them to corresponding URLs of the destination box with upload operation in parameters list. Or adding/merging instead of upload. Then process errors if any happened (and if they did, server will be smart enough to reverse the upload that caused errors). IMHO doesn't look any worse than LDAP. > So is the fact that it's already implemented. So is > the fact that the big players are going to use it, with or without > your approval, and whatever you implement, if it's not LDAP, then you > will *also* have to implement LDAP if you wish to be interoperable. Interoperability with what? System-dependent configuration? I will take Windows registry, AIX object database and Solaris configuration with LDAP and put it to the FreeBSD boxes, then turn those Windows, AIX and solaris boxes off, place FreeBSD ones instead of them, and users can continue editing their ASP files, running telephony software on AIX-specific X.25 link and running the latest release of JDK for Sparc Solaris? System administration means most likely will remain different for a long time -- if not for any other reason then because LDAP doesn't cover all needs for system administration just like Windows registry manipulation doesn't cover everything that can be done with NT system (and they tried very hard and succeeded in a lot of places with it). If you are talking about database interface compatibility, HTTP is also very compatible, and dump of its download looks the same on all of those systems, and can be accessed in the same way. The only thing that can't be done with HTTP and can with LDAP is operating on configuration data stored on some other system, then using it fro configuration of FreeBSD box. I see two problems with it. First, it's unlikely to be necessary -- after all, all FreeBSD boxes are capable of being servers, and there can't be any licensing issues. Second, update of the database and update of configuration of the running box are two different things, and second one, as I have mentioned before (later about that) can fail for its own reasons. Having update procedure producing errors with no one to report them to won't be too helpful. > If nothing else, you will need LDAP for ABI compliance with products > not native to free UNIX clones. Might as well start ahead of the curve > so that when the headstart is lost to a commercial company that throws > paid engineering resources at it to work on the unpleasent parts that > you are only years from completion instead of decades. I am not against having support for LDAP -- it already exists anyway. I just don't think that LDAP is useful for this specific purpose, and see no indication that anyone else is going to use it as the only remote administration mean. > > > 2) Everyone will eventually support LDAP. Sun does. Netscape > > > does. Novell does. > > > > Sun doesn't configure their hosts by LDAP (and considering their > > creativity in protocols, unlikely will). > > Yet. > > > Novell doesn't and even less likely will. > > An LDAP interface to NDS is indistinguishable to an NDS server from > a native NDS client. Everybody has some LDAP server implementation on their system. FreeBSD has one (umich), too. What I don't see is anyone trying to make such complex administration framework over it. > If you think that compatability with NDS is a valid argument, but that > LDAP won't provide it, and therefore it's an argument against LDAP, > then you should contact Novell. They will license, for free, their > NDS source code to any system vendor. Jordan could get it for you by > signing the papers; he'd probably be willing to do it, if you were > volunteering to do the port. To be honest, I don't really care. NDS probably is something worth to be implemented, but I don't think that it's an administration tool. > > Netscape will only if every system its server runs on, will. > > That's not what it says in the developer section of their www pages. They say "We are going to make all system administration tasks on supported OS handled through our LDAP server"? I never heard that, and honestly I doubt that they are capable of such undertaking. They barely made the world's third largest (by the amount of memory used) browser, and it's nothing compared to the ultimate administration tool for all OS they support. > > All protocols except some irrelevant to this discussiuon proprietary ones, > > are implemented everywhere, and none of them are used for remote > > administration system of this kind, especially portable one. > > SNMP. Topologically, it's similar to LDAP. ACAP. Topologically > similar as well, and supported by a number of pieces of commercial > software, including Eudora. ACAP depends on whre you draw the line > between system and software. It could just as easily be used to > configure entire OS's. And these are only the ones from the higher > numbered RFC's. I have serious doubt about complete host configuration through SNMP, and I haven't seen ACAP, but having a client for them doesn't automatically make those system capable of doing remote administration of FreeBSD system -- you need to at least somehow place client part of your transactions support over those clients. I can't imagine adding it to Eudora. > > > 3) There is already a reference implementation. What you are > > > proposing does not have one. > > > > Managing lists taken from url-encoded form input has more > > implementations than necessary, interfaces to databases exist, too > > (probably LDAP-like ones, too), and I'm not aware of any > > existing implementation of FreeBSD tadministration hrough databases or > > LDAP. > > FreeGate. InterJet. Interceptor (OK, that last one is NetBSD). Complete administration, not just limited set of options with very restrictive base configuration and standard "templates"? If not, I will really like to see sendmail-smtp-uucp part in work. > > > 4) It is already a standard. What you are proposing is not. > > > > Both protocols are standard and both require something to be placed over > > them to achieve the stated goal. Also it's obvious that the administration > > framework that should be placed over any of those protocols to become a > > base for remote administration system. I propose something of the same > > scale over HTTP that your propose to make over LDAP, and I prefer HTTP > > only because its requests structure and expected actions seem to be closer > > to the expected from the whole system's model. > > LDAP is connection oriented. It is better suited to authentication > of connection instead of authentication of request. Connection > authentication has many security advantages, as NFS teaches us. I always thought that NFS teaches us that Sun never does anything right the first time, rarely second one and never when protocol design is concerned. Actually HTTP 1.1 persistent connection (as opposed to HTTP 1.0 Keep-Alive connections) are authenticated once per connection, however AFAIK no one supports them at the client side that way. > > > This is too complicated. How would you present this as a radio button > > > list, a checkbox, or an input field in a user interface? If the > > > answe is "you can't", then the model is too complicated for users to > > > understand. > > > > IMHO the system shouldn't be made in a way, "only every fool can use it" > > -- if you propose heavy modification of the configuration data storage you > > can't make new system less flexible than original one. I can make a script > > that will perform this on the files, rsync hundreds of hosts with it and > > make cron run, then delete it. Ugly, requires writing separate files > > editing procedure for any kind of configuration, but very efficient. If > > the system will have "nice" remote configuration editing capability, I > > expect the same thing nice way, too -- if someone can't make script in it, > > distribute and call it "by one button", it's his problem, but one who > > needs it deserves to have it. > > This is what "Advanced" tabs are for. Being an intellectual elitist > will not win you any popularity contests. "Advanced" tab may have "wizard" standard reconfiguration script (say, "change DNS server for the subnet", "Renumber the whole network", "Change everybody to use NIS", "Select POP servers and assign clients to them", etc., and one entry for adding custom scripts. > What is with this idiotic Aristotilian mean "IF NOT A THEN B"? What > about C? > > There is no reason that an interface usable by a new user *must* > condenscend to advanced users. That's an artificial restriction that > intellectual elitists imply *must* be there; but th restriction lives > only in the mind of the elitest. I'm talking about just the opposite! Interface that can be used by new user shouldn't place any advanced user outside the framework completely. It should allow extensions to be placed into it, not reject or break every attempt of doing anything "smart". If I will want to replace "zillions of files" on my system I should be absolutely sure that whatever will take their place will allow me to do administration *through* it, not fighting with it just because it's trying to be smarter than I am. People consider RedHat to be restrictive in administration (I have put it into unusable state more than once when did valid changes but not cosidered RedHat configuration tools' opinion about them), and framework over LDAP if done this way is something significantly more intrusive for system administration than their few Tcl scripts that edit some shell scripts and configuration files. > The entire point of an install is to pander to users who will not use > the code unless they can install it, not just to users who can install > it by typing hex values into the old Microsoft "debug" program after > reading the bit patterns visually off of punched paper tapes. Installation program should allow any user to make something that can boot and be used. But thing that will perform all system administration work should be suitable for doing complex things. Making "nice" interface for new user and then giving sysadmin the choices "keep everything as preconfigured" and "handle with every field and variable manually and see how they will mess up when simple interface tried to handle them" will be rather... unfriendly. > > > How many people do you know who know how to work lamps? A computer > > > should be as easy to operate as a lamp or a television. A VCR at > > > worst case... > > > > Whth predefined operations of this kind it may pass for > > "configuration wizards" system ;-) > > How terrible. Something that someones aunt can make work. Next thing > you know, just any old fool will be able to run FreeBSD, and then > where would we be? Umm... you probably misunderstood me. I mean that one can have pre-made scripts in "Wizards" menu that ones aunt can choose, set and they will do predefined reasonable things. Like, "Install this box as POP3 server", and then operation "Configure mail distribution on the whole network" will use script that will treat that box as known to it cnfiguration of POP3 server. If sysadmin will do things by himself instead of letting his aunt configure mail, he can write very clever script that will know about some UUCP users that come through modems and TCP, complex system of mail servers, not to mention "double-accounting" in DNS and NAT, and produce reasonable mail-related configuration. Running old "Wizard" script will break his work badly, but new one will do exactly what is necessary, and when he will add/move hosts he will just use it on them instead of first running very friendly "make bare bones, then some defaults" script, then manually selectively copy right parts of configuration from right boxes and then add host-specific ones (that otherwise can be easily calculated by the script, but friendly configuration system doesn't have scripts). > > > I think it is wrong to cause the smtpd (for example) to enforce smtp > > > configuration semantics. The enforcement must occur before the change > > > takes (a "schema-check"). > > > > They already enforce it. I change configuration, program returns an > > error. Trying to make all possible chacks before the program, then giving > > configuration to it blindly, ignoring program's errors produces very > > fragile system. > > Storing data which can make the program that uses it puke is bad > practice, and should not be tolerated. I can limit input fields to > specific values in a UI before I attempt to store them. I think you > are confusing "policy" and "property". The problem is, programs produce errors, no matter how nicely you check parameters. Say, I have 30 boxes on 100Mbps Ethernet. 28 of them have 3Com ethernet cards, and two have Digital. I haven't seen those 2 boxes for half a year because this is when I first installed them and given to users as X terminals, so they never asked me for any kind of configuration on them. Suddently I have to renumber the subnet. Thinking that all boxes have only one Ethernet interface I ask every box to change IP address and routing, using the same interface name because it's a key that is used on my box for ethernet interface. It's a valid request from the point of view of my box, and it's sent everywhere. 27 boxes renumber successfully and restart everything that should be restarted by clever parameter-change monitoring, 28th is my administration box, so I renumber it the last, then thinking that everything is ok, change router's configuration. But two boxes have interfaces with different names! They made entries with requested name successfully, tried to reconfigure and ifconfig returned an error, but no one seen it and no one did anything to fix it. Now I have two boxes with nonworking configuration, no usable networking, and those boxes, being remote X terminals, don't even have complete set of utilities to edit the configuration database locally (they are stripped-down X terminals with every unnecessary for them bit of system removed to make place for huge local fonts database). Of course, it's an extreme example, and one can do something "clever" in the admin box -- say, always check proposed change against entries, downloaded from the target box and ask the user if the entry I'm setting is originally set to "no interface" or "down", but then it will make replication of configuration rather difficult, and if I want to have it applied to the subnet as transaction, it will require additional transaction mechanism over it, too (so will HTTP, but if it's a script, one can make generic operation "treat script as single transaction", and separately every box will handle every request that is coming from administrative server as single reversed on local failure local atomic transaction). In this specific case of network interfaces reconfiguration it's even more complex because even successfully reconfigured box will have no means of returning the result in the case of successful reconfiguration, and local check should follow receiving update but precede actual change, but that check should be done against interfaces known to kernel, not just database (database may have nonexistent interfaces marked as unconfigured, and it's a valid operation to bring them up after the physical configuration change). And in any case logic of the initial check will be extremely complex and prone to becoming out of date when configurable programs are upgraded, and valid combination of options are changed. In my proposal transaction has the return value that can be either "successful, configuration data updated, actions taken", "successful, configuration updated, can't take actions before rebooting" (better not ot have ones, but kernel upgrade probably will forever remain in this category), "unsuccessful, system returned to the original state" (plain failure, errors are returned, everything is like it was before except some things restarted) and "unsiccessful, can't reverse changes" (that means that system is in real trouble, and without human sysadmin reading errors in logs not much can be done). > Consider JAVA byte code as an example. The syntax is enforced before > the bytecode is produced. Post-production bytecode is supposed to be > portable, and a JRE will not validate against illegal semantic bytecode > runs in the "compiled" JAVA class. That never prevented internally very consistent and valid bytecode to have all kinds of bugs in it. [skiped] > > Not really, just IMHO HTTP semantics is close to it than LDAP one -- no > > one originally expected LDAP to perform some complex actions on complex > > system with parts that can succeed or fail. HTTP more or less was supposed > > to have something "do things" on request. > > I did. The only restriction I have is atomicity of set operations, and > almost every LDAP backend in existance supports that. LDAP was not > intended to dicatate semantics (much as I wish that there were a > "ldap_transact" in the draft 2 specification). > > The main expectation here is that the parameter store would be "read-mostly", > and atomically updated via LDIF, rather than wire writes. LDIF data input > *does* implement shema/page/record atomicity. My concern is mostly about external errors that happen when changes take effect on real programs. It just doesn't fit right into the database update model. > > > > Why? Adding a user or a set of users is a single transaction. Who is > > > > the client and who is the server in your example? > > > > > > The "client" is the "adduser" command line utility. The "server" is > > > whatever actually ends up adding users. > > > > Then who has problems with polling? Transaction won't end until data is > > received back. > > Netscape and IE will end the transaction before they receive data back; > I believe the timout is 60 seconds. What HTTP client software were you > thinking of? Before you go off on a tear about the difference between > HTML and HTTP, I understand your point. Now you should understand mine: > I can download LDAP JNDI classes from Sun, or I can download C client > API's from Netscape, or I can download JAVA (non-JNDI) with JNI from > NetScape, or I can download C++ from MIT. I can do this today. > > Where are your HTTP client API's for the same environment? Subset of CERN library if nothing else. Even though I can write one that supports specific subset of possible for this system requests in few days (if no browsers are involved client is symmetric, it sends URL-encoded lists and expects URL-encoded lists). > > Then don't use them for sending the requests for transactions that take > > 20 minutes to complete. Protocol has absolutely nothing about enforcing > > response time limits, and for [incompatible] HTTP clients that do it one > > can build a simple proxy that will fix it by whatever means including > > polling. I am talking about a protocol, not GUI clients for it (LDAP has > > nothing better suitable for being an interactive client for this system > > either). > > A proxy is a kludge. How will you authenticate without using HIDDEN or > cookies or some other "send the auth data with every request"? HTTP Basic authentication, if necessary forwarded over ssh. > How will > you guard against spoofing or man-in-the-middle? If I'm in the "secure" local subnet and don't want to use any encryption, I won't. If I'm using SSL, it will use encryption, and if I use ssh forwarding and URL mapping or encryption proxy I can use authentication over encrypted channel between localhost interfaces that in its turn was authenticated when established using host keys, so man in the middle won't work. > Will you spec 1.1 > instead of 1.0 to gain keepalive? If so, will your client API's implement > command streaming, etc., as required by the 1.1 standard? Where will > you get your reference implementation, considering Appache still lacks > for full support of 1.1? The problems quickly mount. Keep-Alive is an extension for HTTP 1.0, persistent connections of HTTP 1.1 differ from it (IIRC authentication per connection and asynchronously sent requests), and honestly I'm not the person who is going to implement complete standards-compliant HTTP 1.1 client in any form. It won't hurt to implement it later if the need arises. > > > Ugh. Writing a parser for all this would pretty much suck. There are > > > good reasons these programs are compartively huge. > > > > Parsing HTTP (MIME) is very simple and parsing valid HTML (SGML) is > > more complex, but again, noninteractive things won't need HTML -- > > operating on lists requires only parsing lists themselves (in my skipped > > example it was URL-encoded list), and parser for that is exremely > > primitive. Generating HTML form of lists for interactive use, again, is > > simple. > > What do you do when you are creating a new user and you need to not only > create the password file entry, but their home directory, as well? Make them a part of one transaction -- I can perform actions as a part of transaction. After all, adduser script does it, why shouldn't I? > > Implementing all possible monstrosities of multi-file HTML with > > frames and layers, scripts and style sheets over HTML, layout with table > > cells that should self-adjust its size for elements inside that also > > change the layout depending on boundaries defined by that cell, etc. is > > something that makes certain HTTP clients that large. > > Maybe. Some MIME types are unwieldy as hell to parse, too, though, as > are "Charset=..." autoconversions. One only need look at the sendmail > MIME code (which doesn't handle half of what you would probably need) > to see that it's unwieldy. You have to start with RFC822 line folding > and header seperator, and start from there. Umm... I have already mentioned that interactions with HTTP client specific for this system will be limited to the MIME Content-type, requested by it, and for lists manipulation I proposed url-encoded lists, so they can be passed unchanged for upload. As for sendmail... it does a lot of things in a smart way that can be kept transparent. > > The same for all kinds of HTTP clients including libraries, command-line > > HTTP request utilities, etc. IMHO choice of protocol should be based on > > something where they differ more than that. > > How about "LDAP is a directory access protocol, and administrative data > should be stored in a directory and accessed via a directory access > protocol"? The best you can argue here is for X.500, SNMP, or NDS > instead of LDAP. Again, this data is not only stored -- it's applied when configuring programs, and reconfiguration or remote update can be a part of transaction, too. > > > How do you replicate this information to a Sun or NetWare or NT box, > > > without rewriting the code for Sun or NetWare or NT? > > > > I can't with any of those systems -- Sun, Netware and NT has no > > HTTP or LDAP remote administration implemented. > > Not replicate the *machine configuration*, replicate the *data defining > the machine configuration*. I can replicate data between LDAP servers > all day. Once I have lists and any kind of addressing system for those lists (LDAP directory or URLs), and can download data in the form it can be uloaded in, I can do it in any protocol. HTTP with symmetrically used Content-type will do the same thing (if I want a storage that won't actually configure anything, I will have to use PUT instead of POST). > > If any of both > > configuration systems will be portable, it may be possible, however I > > don't believe that copying Windows registry to Solaris box will do it much > > good. > > Unless you them boot a ROM'ed version of windows and remotely access > the dynamic configuration data remotely over the network. Like a > bridge, a router, a WebTV box, etc. would want to do. Or a handheld > mail client like an IR interfaced PalmPilot. Or a cell phone with > a display. Or a pager. Or a producer of boxes with FreeBSD preinstalled, > like Rod Grimes. I believe, Pilot will be unable to take the configuration of FreeBSD box directly, and just possibility pf downloading local configuration from somewhere in the form of tree-like organized lists with references can be done in any protocol that supports such semantics. The way, such configutarion update will be performed and update errors handled, especially in "mass-reconfiguration" on the network will differ with different protocols, and what is acceptable for Pilot will be unreliable for a cable box and too restrictive for FreeBSD host. > > > Apache times out CGI's that "take too long". How would you deal with > > > this problem? Not use Apache? Then what? > > > > Apache has modules, and I never said that I consider CGI to be suitable > > for this task. Apache modules IMHO aren't the best choice for that either, > > and I wrote my own HTTP server just because I wanted to make something > > that won't impose request procesing model and processes/threads/resource > > management system, used for the server itself on every program that can be > > called from it. That server is at least one thing that can handle HTTP in > > a way suitable for remote administration -- and probably there are others. > > How available is your server? Last released version 0.3.2 is at http://phobos.illtel.denver.co.us/pub/fhttpd/, server itself is GPL'ed, but API has BSDish license (to avoid contamination by GPL), I use it myself for various devices control that can't be done otherwise without ugly kludges. Code has places that can be and probably should be and will be written better, but nothing that can't be allowed to run as root on a system with reasonably high security requirements. -- Alex
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.3.96.980204005855.32150A-100000>
