ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux学习笔记

Linux学习笔记

原创 Linux操作系统 作者:mi_zy 时间:2013-06-13 21:02:00 0 删除 编辑

一、创建用户

用指令添加命令

useradd

passwd

系统添加用户的标准步骤

编辑/etc/passwd与/etc/group

创建用户主目录

从/etc/skel拷贝文件与目录

让新用户获得其主目录与文件的拥有权限

给新用户一个密码

______Red Hat Linux默认将用户密码存储在/etc/shadow文件中。

•  passwd文件默认权限为644,shadow文件默认权限为400。

•  shadow文件支持密码过期设定等功能

•  shadow文件中每一行表示一个系统用户的密码记录,用 : 号分隔。

•  用户可以通过authconfig来设定是否使用shadow文件及md5加密。

当用 useradd 命令来创建一个新用户帐户时,它将所有的文件从 /etc/skel 复制到用户的新的主目录中(如果按默认应该在/home下)。这意味着您可以将有帮助的 .bash_profile 和 .bashrc 文件放在 /etc/skel 中,使新用户有一个好的开始。

/usr/sbin/useradd使用了一系列缺省设置,位于 /etc/default/useradd(如果这个文件存在的话)。如果 这个文件不存在,它会使用其内部缺省设置,可以用/usr/sbin/useradd -D 来列处这些设置。

如果想对这个缺省设置作一些变动,

就要建立一个 /etc/default/useradd(?/etc/login.defs) 文件,并使用和 /usr/sbin/useradd -D输出一样的内容。例如:

# /etc/default/useradd 开始
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel
# /etc/default/useradd
结束

所以你可以看到默认的HOME和默认的SKEL目录。

比如,你希望新建用户可以直接 startx 就启动到 gnome 桌面环境,你可以在 skel 目录下建立一个 .xinitrc 文件,内容如下:

export LC_ALL="zh_CN.UTF-8"
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE="scim"
eval `dbus-launch --exit-with-session --sh-syntax`
exec gnome-session

因为 .xinitrc 是 X 启动需要读取的用户配置文件,这样每个用户 startx 之后就直接装载 gnome 了。

 

二、非root用户startx

OS:redhat9
系统安装的时候只有X,没有kde之类的窗口桌面。
root
登录后以非root用户startx时报:
PAM authentication failed, cannot start X server.
Perhaps you do not have console ownership?

解决方法:
touch /var/run/console/
比如 touch /var/run/console/oracle

 

三、Linux进程管理父进程和子进程

http://space.itpub.net/27788822/viewspace-763462

 

四、启动

   在刚开机时 ,由于 80x86 的特性 CS ( Code Segment ) 这个寄存器中全部都放着 1 , 而 IP ( Instruction Pointer ) 这个寄存器 中全部都放着 0 , 换句话说 , CS=FFFF 而 IP=0000 。 此时 , CPU 就依据CS 及 IP 的值 , 到 FFFF0H 去执行那个地方所放的指令 。这时候 , 由于FFFF0H 已经到了高位址的顶端 , 所以 , FFFF0H 这个地方 , 总是会放一个JMP 指令 ,跳到比较低的位址 。 接著 , ROM BIOS 就会作一些检查的动作像内存 、 键盘 等...... 并在我们俗称的 UMB ( Upper Memory Block )之中扫描 ,看看是否有合法的 ROM 存在 ( 比如 SCSI 卡上的 ROM ) 。假如有就到里面去执行一些东西 , 执行完之后再继续刚才的行程 。 到了最后 , 读取硬盘上的第一个 sector 。 在这里 , 我假设各位由硬盘启动。因此 , 就硬盘的构造而言 , 它的第一个 sector 称为 MBR ( Master Boot Record ) 。 因为一个 sector 是 512 bytes , 而 MBR 这 512 bytes 可分为两个部份 ,第一个部份为 Pre-Boot 区 , 占了 446 bytes; 第二部份是 Partition Table , 占了 66 bytes 。 Pre-Boot 区的作用之一 ,就是去看看哪个 Partition 被标成 Active , 然後去读那个 Partition 的 Boot区 。

       在 Linux 的启动方面 , 一般人最常把 LILO或Grub 放在 MBR 或 Superblock ,假如你把 LILO或Grub 放在 MBR , 那很明显的,当读取到 MBR 的时候 , LILO 或Grub就被执行 。 此时 , 你的屏幕上会出现启动选项接着 , 就进行 Load Kernel的动作。在另一方面来说 ,,假如你把 LILO或Grub安装在 Superblock , 通常你还会有一个管理开机的程序 , 也许是放在 MBR ( 像 OSBS ) 或者是放在一个单独的 Partition ( 像 OS/2 的 Boot Manager ) 。 再由这个管理开机的程式去读取 LILO或Grub , 进而做 Load Kernel 的动作 。到了目前为止 ,  Kernel 被load 到 memory 中之后 ,接着进行一连串 probe 周边的动作 ,像串口、并口 、 软盘 、 声卡 、 硬盘 、 光驱 等 ...... 接着 mount root partition 。 在这之后 kernel 会起动 init 这个 process 。init 这个 process 的 PID 为 1 ,它是所有 process 的祖先。

•        第一阶段即BIOS从启动扇区中读入IPL(初始化程序引导工具)这一过程。因为MBR的空间太小,所以启动引导工具往往还需要从其他地方进一步读入数据,即所谓第二阶段。这通常是一个可以做选择的交互界面。

•        grub.conf的范例:

timeout=10                          #等待10秒自动进入默认操作系统

splashimage=(hd0,0)/grub/splash.xpm.gz    #grub启动背景画面

default=0                             #默认进入第一个标题

title Red Hat Linux (2.4.20-18)          #Red Hat Linux标题

     root (hd0,0)                          #根文件系统位置

     kernel  /vmlinuz-2.4.20-18 ro root=LABEL=/ #核心位置与核心加载参数

     initrd  /initrd-2.4.20-18.img              #启动initrd ram盘  

title windows                         #另一个操作系统的标题

     rootnoverify (hd0,1)              #操作系统存放在hd0,1上,不要在grub里mount

     chainloader +1                      #从hd0,1的第一个扇面启动

•        init是所有进程的父进程。在核心加载完成后总是先启动。

•        init 这个 process 会依据 /etc/inittab 中所记载的内容进入不同的 run-level 并启动不同的 process 。 所以 inittab 的重要性可见一斑 , 那什么叫 run-level 呢 ? 所谓 run-level 就是系统中定义了许多不同的 level(等级) ,而系统会随著 level 的不同而去启动不同的资源 。现在就让我们来看一下 /etc/inittab 中的内容 。
      
在 /etc/inittab 这个文件中,每一列是一个进入点 ,假如我们仔细观察每一列的话, 那我们就会很容易的发现 /etc/inittab的每一列可以被 ” : “ 这个字符分成好几个栏位 。 这几个栏位的格式如下 :

          id : runlevels : action : process

          而它们代表的意义分别如下 :

          id : 由两个独特的字符所组成的辨示符号 , 在比较新的 UNIX 系统中 , 已不受只能有两个字符的限制 。

          runlevels : 指出下面一个栏位中的 action 以及 下下个栏位中的 process会在那些 runlevel 中被执行 。 而在正常的启动程序之后 ,Superuser 可以使用telinit 这个指令来改变系统的 runlevel 。 又因为在 LINUX 中, runlevel 的预设值是 3 ( 等一下就会看到 ) 所以 , 只有
那些每一列中 runlevel 那栏有 3 这个值的 , 后面的 process才会被启动 。 所以 , 我们就可以想像的到,由于系统的runlevel 不同,所起动的 process 也不尽相同 ,所以系统起动的资源在每个不同的 runlevel 就会有差异存在。

          action : 这个栏位有一点复杂 , 在这个栏位中记录着 init 在启动相对应的process 时 , 对 process 所采取的动作 , 而合法的动作有下面几项:

          initdefault : 指出系统在启动时,预设进入的 run-level 值 ,比如说 ,我们可以在 /etc/inittab 中找到下面这一列 : id:3:initdefault: 很明显的 ,系统将在启动时,进入 runlevel 为 3 的模式 。当然 ,你可以把 3 改成 4 试试看 ,如果你改成了 4 ,那将会执行 /etc/rc.d/rc.4。

          sysinit : 在系统起动时,这个 process 会被执行。而所有 process前的 action 中有 boot 及 bootwait 的 process, 必须等到这些 action 为 sysinit 的 process 执行完之后它们才能够执行。

          wait : 在起动一个 process 之后,若要再起动另一个 process, 则必需等到这个 process 结束之后才能继续。

          respawn : 代表这个 process 即使在结束之后,也会重新被启动,最典型的例子就是 getty 。 看看下面的循环 :

          -- getty --> login --> shell --> logout -- 

               ^ |                                        | 

                 |<--------------------------------------|

           即使在 getty 结束之后 , 它也会重新被启动 。

           ctrlaltdel : 想必有人会以键盘上的 Ctrl ,Alt , 及 Del 这三个键来达到使系统 shutdown 的目的 , 现在我们果然在/etc/inittab 中看到了这一列 :

            ca::ctrlaltdel:/sbin/shutdown -t3 -rf now

            所以说 ,当我们按下这三个键的时候 ,init 会收到SIGINT 这个 signal, 接着就执行 shutdown 的动作。不过,我们最好不要养成按 Ctrl-Alt-Del 来使系统shutdown 的习惯 , 尤其在单用户多任务的操作系统, 像OS/2 , 甚至 Windows 98 , shutdown 几乎都是标准的关机程序了, 更何况是多用户多任务的 LINUX , 所以 ,shutdown 这个指令是一定要熟悉的。

           除了上面的几个 action 之外 , 另外还有一些合法的 action , 但这些 action 并不需要太注意 。 要用的时候再利用 man init 去查询就可以了。

rc.local 会在各 run-level 的 script 执行完之後再执行。 您可以将自己想在开机时处理的动作加在这个 script 之中。

 

五、强制位

强制位与冒险位添加在执行权限的位置上。如果该位置上原已有执行权限。则强制位与冒险位以小写字母的方式表示,否则,以大写字母表示。

chmod 4511    -rwS--x—x      suid、文件属主具有读、写的权限,所有其他用户具有执行的权限

上面的表中有具有这样权限的文件:rwS --x -- x,其中S为大写。它表示相应的执行权限位并未被设置,这是一种没有什么用处的suid设置可以忽略它的存在。

suid 意味着如果某个用户对属于自己的程序设置了这种权限,那么其他用户在执行这程序时也会具有其文件拥有者相应权限。于是,如果超级用户( root )的某一程序设置了这样的权限,那么其他普通用户在执行它的期间也同样具有超级用户的权限。同样的原则也适用于sguid,执行相应程序的用户将具有该文件所属用户组的权限。

为什么要使用suid/guid

为什么要使用这种类型的脚本?这里有一个很好的例子。你管理着几个大型的数据库系统,而对它们进行备份需要有系统管理权限。你写了几个脚本,并设置了它们的suid,这样你指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,而且在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。另一个例子是/bin/passwd ,要读写/etc/passwd文件需要超级用户权限,但一般用户也需要随时可以改变自己的密码,所以/bin/passwd就设置了suid,当用户该自己密码的时侯就拥有了超级用户权限。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7970627/viewspace-763842/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 经典的LINUX课件
请登录后发表评论 登录
全部评论
***---Descartes---***

注册时间:2011-02-02

  • 博文量
    313
  • 访问量
    512058