inux下Login和Logout详解
 
             Login 是你用Linux系统工作时面对的第一个进程,这对于使用终端以及通过网络使用Linux都是正确的。但是login进程本身并不是你在终端上见到的,你见到的其实是getty (get TeleTYpe terminal ,早期电脑上的意思是获取纸带终端,现在可以直接理解成打开终端),它是由init(通过/etc/inittab)在启动login进程时添加而启动的。
            所以完整的启动链是:init -> getty -> login -> passwd -> shell -> applications 。这是从技术上来讲的在真正实现时还是有点不同的,比如有时候login和passwd是在一个程序里面,但是上面这个链是UNIX中很典型的。
 
        那么为什么我们要这么做?为什么不能写一个程序来处理所有的工作。让一个getty程序同时处理login和passwd不好么?
       让一个程序只做一件简单的事然后链接许多简单的工作创造了这个复杂的运行环境,这是保证UNIX稳定的关键,而且当你创造你的系统时这也是一个很关键的设计准则。(参见KISS准则,UNIX中的经典)
 
         Debian6上默认提供六个终端(Ctrl+Alt+F1~F6,因为F7,F8用来打开图形界面而不是用作终端),但是实际上内核默认是64个终端,那么其他的终端哪去了?假如你在Linux虚拟机上,你可以访问tty10甚至tty12(使用Ctrl+Alt+F*),但是你没有更多的功能键,以后我们在讨论如何访问其他的终端。
 
Logout 进程
         logout进程很简单,他需要终止login进程打开的任务或者shell。注意,它要关闭的不只是一个shell,而是所有的东西。
假如我使用long作为用户登录我会得到一个shell,假如我使用 ls,我会得到ls的结果然后我logout。所以logout的shell会发送一个信号到父进程用来通知它shell被终止了。但是shell的父进程是 login 而且此时 login 已经停止运行了(logout会终端login和shell),那么谁来获取shell的返回值呢? 是 init 来接受 logout 的返回值,在关闭getty、login、logout等所有后,init 重新打开一个getty来等待输入。
下面我们看个好玩的东东:
                          -rwxr-xr-x 1 root root 975488 Dec 29  2012 /bin/bash
                          -rwxr-xr-x 1 root root  49008 May 25  2012 /bin/login
                          -rwxr-xr-x 2 root root  32040 Dec 11  2012 /sbin/getty
                          -rwsr-xr-x 1 root root  51096 May 25  2012 /usr/bin/passwd
我们都可以看到,除了passwd其他都有着rwxr-xr-x权限,所有他们可以被任何用户执行,而passwd是-rwsr-xr-x权限,这个s是setuid的标志,该位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令,所以passwd是运行在root权限下(即使是一个普通用户使用)。有了这个,我们可以降低安全风险。
 
 
Login配置
你使用login登录,你不但打开了一个shell而且还配置了你的运行时环境(runtime env),这个配置如果在/etc下是系统级别的配置,如果在你的个人home目录下则是个人配置。
大概划分是这样的: 
                             /etc/profile - 面向所有的用户和所有的shell
                             /etc/bash.bashrc - 面向所有用户的bash配置
                             ~/.bashrc - 你个人的bash配置
所以在实际使用时我们需要根据需求的不同将配置放在不同的配置文件中。比如说,一个配置对所有使用这个系统的用户都有用,我们就需要放在/etc/profile下。
 
 
su
        提到用户登录,这里说下root权限,使用su命令(su -)你不但切换了用户权限而且你创建了一个新的login会话,所以你得到的不只是一个root,而且是一个全新的运行时环境,这对于安全问题来说是很敏感的,所以使用root权限是一定要注意。当然,你也可以使用sudo来让自己的用户临时获得root权限,这对于桌面用户来说还是个不错的方法,但是对于比较大的系统,给用户sudo权限一定要注意,最好不给!
 
 
Exit vs logout
         使用login登陆系统,那么退出系统我们可以选择exit或者logout,那么这两者之间有区别么?大部分系统来说这两者之间是没有区别的,但是他们两者还是有一点点的区别的:logout退出时会执行~/.bash_logout(如果有的话),而exit只会作退出工作而不执行~/.bash_logout。除此之外别无其他区别。

Login 和 Logout的更多相关文章

  1. django(权限、认证)系统——用户Login,Logout

    上面两篇文章,讲述的Django的Authentication系统的核心模型对象User API和相关的使用,本文继续深入,讨论如何在Web中使用Authentication系统. 前面说了,Djan ...

  2. Django 自带登录验证:authenticate和login,login_require,logout模块

    验证之前需要在settings 中指定验证数据models AUTH_USER_MODEL = 'crm.UserProfile'#app名字.表名字 1.authenticate是一个方法,验证账号 ...

  3. How to Log Users Login and Logout Details Through Oracle Forms

    Log user's login and logout details in to table through Oracle Forms using POST-LOGON and PRE-LOGOUT ...

  4. django 自带认证系统(login,logout,authenticate,login_required)

    from django.contrib.auth import login,authenticate,logoutfrom django.contrib.auth.decorators import ...

  5. [转]Angular: Hide Navbar Menu from Login page

    本文转自:https://loiane.com/2017/08/angular-hide-navbar-login-page/ In this article we will learn two ap ...

  6. FaceBook登陆API -- Login with API calls

    Login with API calls Related Topics Understanding sessions FBSession Error handling FBError FBLoginC ...

  7. 说说BPM数据表和日志表中几个状态字段的详细解释

    有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet  0 Sav ...

  8. [NodeJS] Hello World 起步教程

    概述: 做数据,免不了需要展示数据,数据可视化是必须经历的步骤. 本文将提供一个NodeJS的起步教程,是笔者这两天探索的小结. 正文:  1. 为什么使用NodeJS 究竟是以B/S还是C/S的架构 ...

  9. Laravel 5.3 登录注册底层实现详解

          每个控制器都使用 trait 来引入它们需要的方法 */ 用于处理用户登录认证 用于处理新用户注册 包含重置密码逻辑 用于处理重置密码邮件链接   认证需要的视图 包含了应用的基础布局文件 ...

随机推荐

  1. hdu_5831_Rikka with Parenthesis II(模拟)

    题目链接:hdu_5831_Rikka with Parenthesis II 题意: 给你一些括号的排列,必须交换一次,能不能将全部的括号匹配 题解: 模拟一下括号的匹配就行了,注意要特判只有一对括 ...

  2. 安卓访问webAPI,并取回数据

    前言 安卓自从4.0以后,所有的网络访问都需要异步进程操作.其自带的异步类有AsyncTask,Handler,以及可以声明Thread等等.涉及到多进程,必须要提到一个问题,线程与线程之间不能直接进 ...

  3. ajax通过设置Access-Control-Allow-Origin来实现跨域访问

    [在被请求的Response header中加入] // 指定允许其他域名访问(*代表所有域名)header('Access-Control-Allow-Origin:*');// 响应类型heade ...

  4. java中的字符编码方式

    1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下. 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符 ...

  5. Chapter 14_3 非全局的环境

    关于“环境”的一大问题在于它是全局的,任何对它的修改都会影响程序的所有部分. 例如:若安装一个元表用于控制全局变量的访问,那么整个程序都必须遵循这个规范. 当使用某个库时,没有先声明就使用了全局变量, ...

  6. C# 循环语句

    本次主要学习了for循环语句. for循环语句的基本格式是: for(初始条件;循环条件;状态改变) { 循环体; } break——中断循环,跳出循环. continue——停止本次循环,进入下次循 ...

  7. svn地址如何更改

    1.先进入平时放的更新文件的位置 2.然后右键 选中TortoiseSVN中的Relocate修改里面的完了之后输入账号和密码就好了当然你要记得密码和账号

  8. bootstrap开始咯

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  9. android 按钮Button单击背景切换

    res/drawable/btn_selected.xml <?xml version="1.0" encoding="utf-8"?> <s ...

  10. android之ViewStub的使用

    转自http://blog.csdn.net/hitlion2008/article/details/6737537 在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个V ...