zoukankan      html  css  js  c++  java
  • Linux里的用户管理

    在linux中系统中,它并不认识帐号名称。它认识的是我们的帐号ID,帐号ID保存在/etc/passwd文件中。我们在登录linux主机时,在输入完帐号和密码时,linux会先查找/etc/passwd文件中是否有这个帐号,如果没有则跳出,如果有的话,他会读取该帐号的user ID和group ID同时该帐号的根目录和shell也读了出来。然后在去核对密码表,在/etc/shadow中找出我们刚刚输入的帐号和userID,核对我们输入密码是否正确。一切正确我们可以登录到当前用户shell。那么,我们首先了解一下用户帐号文件。

    1./etc/passwd我们使用more查看一下这个文件 
    1

    我们首先看第一行root这一行,一共有七项,每一项使用:分开,他们代表的意思如下: 
    2

    帐号名称:帐号名称由于对应用户ID,这个是系统默认用户root超级管理员,在同一个系统帐号名称是唯一的,长度根据不同的linux系统而定,一般是8位。

    密码:由于系统中还有一个/etc/shadow文件用于存放加密后的口令,所以在这里这一项是“x”来表示,如果用户没有设置口令,则该项为空。

    用户ID:这个是系统内部用于来识别不同的用户的,不同的用户识别码不同,其中用户ID有以下几种:

    0代表系统管理员,如果你想建立一个系统管理员的话,可以建立一个普通帐户,然后将该账户的用户ID改为0即可。

    1-500系统预留的ID,500以上是普通用户使用。

    组ID:其实这个和用户ID差不多,用来规范群组,他与/etc/group有关。

    描述信息:这个字段几乎没有什么作用,只是用来解释这个帐号的意义。一般常见的是用户全名信息。-

    用户根目录:就是用户登录系统的起始目录,用户登录系统后将首先进入该目录。root用户默认的是/root,普通用户的是/home/用户名。

    用户登录shell:就是用户登录系统时使用的shell,关于shell我们会在以后专门的研究一下。

    通常我们可以使用vi编辑这个文件,也可以使用vipw命令对/etc/passwd对这个用户帐户文件进行编辑,使用的编辑器是vi。

    2./etc/shadow

    在早期的unix操作系统中,用户的帐号信息和口令信息都保存在passwd文件中,尽管系统已经对口令进行了加密,并且以密文的方式保存在passwd文件中,但是由于passwd文件对于系统中的所有用户是可读的,口令比较容易破解,存在较大的安全隐患。现在使用“shadow”文件保存密文的用户口令,使用passwd文件保存用户帐号其它信息。“shadow”文件只有管理员用户才可以读取其中的内容。由于这个文件可能被破解,所以一定不要将该文件内容泄露给他人,保证系统安全。 
    3

    同样,我们还是分析第一行,一共有九项,分别说明一下: 
    4

    帐户名称:和passwd对应,和passwd的意思相同。

    密码:这才是真正的密码,并且已经加密过了,只能看到一些特殊符号。需要注意的是这些密码很难破解,但是不等于不能。还有密码栏的第一个字符为“*”表示这个用户不用来登录,如果那个用户不想让他登录了,可以在他前面加个星。

    上次改动密码的日期:这段记录了改动密码的最后日期,为什么是13798呢?这是因为linux计算日期的方法是以1970年1月1日作为1,1971年1月1日就是366,依次类推到我修改密码的日期表示为13798了。

    密码不可被改动的天数:这个字段代表要经过多久才可以更改密码。如果是“0”代表密码可以随时更改。

    密码需要重新更改天数:由于害怕密码被人盗取而危害到整个系统的安全,所以安排了这个字段,你必须在这个时间内重新修改密码,否则这个帐号将暂时失效。上面的99999,表示密码不需要重新输入,最好设定一段时间修改密码。确保系统安全。

    密码变更期期限快到前的警告期:当帐号的密码失效期限快到时,系统依据这个字段的设定发出警告,提醒用户“再过n天您的密码将过期,请尽快重新设定密码。默认的是七天。

    帐号失效期:如果用户过了警告期没有重新输入密码,使得密码失效,而该用户在这个字段限定的时间内又没有向管理员反映,让帐号重新启用,那么这个帐号将暂时失效。

    帐号取消日期:这个日期跟第三个字段一样,都是使用1970年以来的日期设定方法。这个字段表示:这个帐号在此字段规定的日期之后将无法再使用。这个字段通常用于收费服务系统中,可以规定一个日期让该帐号不能再使用。

    保留:最后一个字段是保留的,看以后有没有新功能加入。

    3. /etc/group查看一下这个文件

    1

    我们还是分析第一行,一共有四项,依次为:

    群组名称:就是群组的名称了。

    群组密码:通常不需设定,因为我们很少使用群组登录。不过这个密码也被记录在/etc/shadow中了。

    群组ID:也就是组ID了。

    支持帐号的名称:这个群组的所有帐号。如果你想让用户qiuri也属于root这个群组,就在第一行最后加上“,qiuri”注意添加的时候没有空格。

    通常我们使用vi编辑这个文件,也可以使用vigr这个命令编辑,等同于使用vi /etc/group编辑。

    4. adduser添加用户

    如果没有特殊的要求,通常我们使用adduser 用户名称直接创建用户帐号。例如我们创建qiuri帐户:

    2

    由于一般新创建的帐号都会在刚才我们说的三个文件的最后一行添加一行内容,我们验证一下:

    3

    我们使用这条命令是通过/etc/login.defs和/etc/default/useradd这两个默认帐号设定文件来实现创建用户时用户的基本设置的。/etc/login.defs文件内容如下:

    4
    5

    /etc/default/useradd文件内容如下:

    6

    这个文件中我们有必要了解一下,SKEL这个选项,用户的根目录内容是从/etc/skel这个目录下复制过去的。在手动添加用户的时候有用。查看一下这个目录下的内容:

    7

    这条命令还有好多的参数举例几个,供大家参考一下:

    adduser [-u uid][-g group][-d home][-s shell]

    -u:直接给出userID -g:直接给出GID

    -d:直接将根目录建立在已存在目录 -s:定义shell

    5.passwd设置用户密码

    默认的情况下,在添加完用户后并没有设置用户的密码,因此建立的用户帐号即使存在也不能登陆系统。需要使用passwd命令对用户帐号设置密码才可以用于登陆系统。这条命令分为管理员给用户修改密码和用户自己登录系统自己修改密码。

    管理员root给用户修改密码,例如:创建用户qiuri,然后设置密码
    8

    管理员给用户设置密码以命令passwd [用户名]来设置密码,在输入密码的过程中为了避免输入错误,将连续输入两次。如果两次输入的密码相同,表示输入的密码正确,同时将密码以加密的方式保存到了shadow文件中。设置完以后我们可以使用用户qiuri登录。qiuri用户自己修改一下密码:

    9

    我们已经明白通过命令useradd每创建一个用户都会在相应的配置文件中添加相关的信息和创建用户的宿主目录。其实今天要和大家说的是和用户相关的linux安全问题,在安全中有一种技术人们称它为“后门”技术,其实就是说一些“小黑”,入侵到服务器后得到root权限,最常见的就是添加一个用户方便日后来访。虽然这是一个初级的技术,但是这个能够看出你对/etc/passwd和/etc/shadow文件的熟悉程度。

    如果你是黑客的话,入侵到一个系统后,你为了防止管理员修改密码导致你不能登录,而你去修改密码,这不是明摆着要通知管理员他的系统已近被入侵了,所以这个时候可以通过编辑passwd和shadow文件来实现如下内容:

    [root@qiuri ~]#echo "admin:x:0:0::/usr/src:/bin/bash" >> /etc/passwd

    [root@qiuri ~]#echo "admin:!!:14143:0:99999:7::: " >> /etc/shadow

    通过以上两条命令可以添加一个UID为0的具有管理员权限的账户,也可以编辑配置文件手工输入,当然,这里小黑们会尽量的掩盖自己创建的这个账户,首先用户名称一般会选择一个类似系统应用程序的账户,用户的主目录也不会和其它账户一样放在/home下。总之尽量的逃过哪些粗心的管理员。

    当然,还没有设置密码是不能够通过远程可以连接上服务器的,这个时候用passwd来设置一下:输入要设置的密码,之后查看/etc/shadow配置文件后密码位已近成为md5加密的乱码。

    [root@qiuri ~]# passwd admin

    [root@qiuri ~]# grep admin /etc/shadow

    admin:$1$1IoPDSJW$3NxLHwcXeutWT1lIMb4Zy1:14163:0:99999:7:::

    这个时候我们可以测试一下登录,这个时候我们没有必要退出后再登录,我们可以使用su命令切换用户,大家在使用这条命令的时候最常见的问题如下:

    [root@qiuri ~]# su admin

    bash-3.1#

    [root@qiuri ~]# su – admin

    bash-3.1#

    咋看起来这两条命令没有什么区别,当我们使用su admin命令的时候,我们输入一个认为可用的命令的时候会得到“command not found”的错误信息。是由于su命令不能在根用户环境中的读操作。为了解决这个问题,只能在给su命令添加一个”–”的选项,也就是su – admin这样的格式。我们使用pwd查看一下这两个命令的区别:

    [root@qiuri ~]# su admin

    bash-3.1# pwd

    /root

    bash-3.1# su - admin

    -bash-3.1# pwd

    /usr/src

    看到了吧,其实这两个命令的区别就是:使用su命令切换用户后,不会修改当前登录会话的目录或者环境;而su – 后,通常会修改用户的登录目录为用户自己的根目录,并且用户自己的变量也可以使用了。或许有人还有疑问为何提示符为”-bash-3.1#”了,其实这个”-bash-3.1”不是关键,主要是看”#”和”$”来区别用户的类型。这里变为”-bash-3.1”的原因是我们创建的admin用户没有自己的初始配置文件,我们使用命令创建用户的时候都会从/etc/skel这个目录中复制到用户的宿主目录。这里查看一下这个配置文件:

    [root@qiuri ~]# ls -al /etc/skel/

    total   48

    drwxr-xr-x 2 root root 4096 09-18 21:26 .

    drwxr-xr-x 94 root root 12288 10-11 20:27 ..

    -rw-r--r-- 1 root root 24 2006-07-12 .bash_logout

    -rw-r--r-- 1 root root 176 2006-07-12 .bash_profile

    -rw-r--r-- 1 root root 124 2006-07-12 .bashrc

    [root@qiuri ~]#

    我们看到这些都是一下隐藏文件,这些文件是用于用户的环境变量的shell脚本,用户登录后可以修改这些文件。我在以后的文章中详细介绍这些文件的用途。

    那我们就将这些文件复制过去看看:

    [root@qiuri ~]# cp -r /etc/skel/.* /usr/src

    [root@qiuri ~]# su - admin

    [root@qiuri ~]# pwd

    /usr/admin

    当然,通过这种方法创建的后门用户很容易被细心的管理员发现,但是如果你对这些配置文件不是很熟悉的话也是很难发现问题。这就是火能助人,也能杀人的道理。

    当发现这样的用户,我们需要做的是将其删除,删除用户的命令是userdel。

    1)userdel命令用于删除linux系统中的用户账号,命令格式如下:

    userdel [-r] user_name

    一般,在使用这条命令的时候,如果不添加”-r”的话,不会删除用户的宿主目录,这样就可以保存该用户在系统中的文件,要是想删除的话我们可以手工的去删除该目录。但是你已经确认该宿主目录中的文件可以删除,直接使用”-r”这样就可以一次性的删除用户操作。

    [root@qiuri ~]#userdel –r admin

    2)手工删除用户

    手工删除一个用户需要执行如下步骤:

    从/etc/passwd、/etc/shadow、/etc/group配置文件中删除该用户的相关条目,之后删除该用户的宿主目录。

    但是,在我们工作的过程中,为了提高系统的安全性最常用的就是禁用和启用账户。可以使用usermod命令来禁用账号:

    [root@qiuri ~]# grep u1 /etc/shadow    #禁用前查看一下

    u1:$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7:::

    [root@qiuri ~]# usermod -L u1     #禁用账号

    [root@qiuri ~]# grep u1 /etc/shadow   #再次查看一下,发现多出一个"!",表明用户已禁用

    u1:!$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7:::

    [root@qiuri ~]#

    当因工作需要的时候,可以将已禁用的账号u1重新启用,命令如下:

    [root@qiuri ~]# usermod -U u1    #重新启用账号

    [root@qiuri ~]# grep u1 /etc/shadow   #发现"!"已经移除,表明用户已启用

    u1:$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7:::

    [root@qiuri ~]#

    从上边的操作可以看出usermod命令禁用和启用账号功能是通过在/etc/shadow 配置文件中,在用户密码位之前添加和删除"!"实现的。当然也可以使用手工添加或删除"!"来实现效果。

    不知道大家还记不记得我在上一篇文章中提到可以通过设置shadow文件中的“账号失效期”来设置账号的有效期限。这里也可以使用usermod命令实现,命令格式如下:

    usermod –e YYYY-MM-DD name

    通过这个命令可以设置用户账号的过期时间,就是说在此日期之前用户账户生效,过了这个日期后用户将禁止登录。设置后如下所示:

    [root@qiuri ~]# usermod -e 2008-10-18 u1    #设置账号过期时间

    [root@qiuri ~]# grep u1 /etc/shadow    #验证结果

    u1:$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7::14170:

    [root@qiuri ~]#

    在实际的管理工作中,如果我们一个一个的去管理账号的话,无形中会增加我们大量的管理负担和造成不必要的错误。可以使用“用户组”来解决这些问题。那么什么是“用户组”呢?用户组就是一个具有相同特性的用户集合,在同一个组中的所有用户具有相同的组权限。一般情况下我们使用useradd创建用户的时候会创建和用户同名的用户组,但是有些时候我们需要单独的创建用户组,可以使用groupadd命令实现?命令格式如下:

    groupadd [-g gid [-o]] [-r] [-f] group

    我们创建一个qiuri组为例:

    [root@qiuri ~]# groupadd qiuri  #添加用户组

    [root@qiuri~]# grep qiuri /etc/group    #验证是否创建成功

    qiuri:x:501:

    如果我们要创建一个xifeng组同时组ID为1000

    [root@qiuri ~]# groupadd -g 1000 xifeng     #添加组ID为1000的用户组

    [root@qiuri ~]# grep xifeng /etc/group       #验证结果

    xifeng:x:1000:

    我们会创建组了,但是如何将用户添加到相应的组呢?一般有以下几种情况?

    1) 创建用户的时候指定用户属于那个用户组

    例如:我们创建一个test用户,同时这个用户属于qiuri组,这个时候系统就不会再建立与用户名同名的用户组账号了。命令格式:

    uersadd -g group_name user_name

    创建过程:

    [root@qiuri ~]# grep qiuri /etc/group      #确认用户组qiuri是否存在

    qiuri:x:1001:

    [root@qiuri ~]# useradd -g qiuri test    #将创建用户指定到qiuri组

    [root@qiuri ~]# grep test /etc/passwd  #查看用户是否创建成功,是否属于组qiuri。

    test:x:510:1001::/home/test:/bin/bash

    [root@qiuri ~]# grep qiuri /etc/group

    qiuri:x:1001:

    说明:验证用户属于那个组的时候也可以使用命令groups user_name来查询。

    2)更改用户的用户组

    一般什么时候需要更改用户组呢?例如:我们在创建用户的时候忘记指定用户属于那个用户组,这个时候我们执行此命令。可以使用usermod –g来更新组的名称,这里我们将test用户从qiuri组更改到xifeng组。命令格式:

    uermod –g group_name user_name

    更改过程:

    [root@qiuri ~]# usermod -g xifeng test   #更改用户所属于的组

    [root@qiuri ~]# grep test /etc/passwd    #确认用户组ID是否发生变化

    test:x:510:1000::/home/test:/bin/bash

    [root@qiuri ~]# grep xifeng /etc/group   #确认组ID为1000的组是否是xifeng。

    xifeng:x:1000:

    [root@qiuri ~]#

    3) 将用户添加到其它组

    一个用户可以同时属于多个组,例如:test用户同时属于qiuri和xifeng组,可以通过usermod –G命令来实现。注意:这条命令执行的前提条件是确认该用户是否存在,也就是说是将已有用户添加到相应的组。命令格式:

    usermod –G group_name user_name

    方法一、添加过程:

    [root@qiuri ~]# usermod -G qiuri test     #让用户test同时属于qiuri组

    [root@qiuri ~]# grep test /etc/passwd    #查看一下用户配置文件,无变化

    test:x:510:1000::/home/test:/bin/bash

    [root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group  

    #查看一下用户组配置文件中关于xifeng和qiuri组。个人认为使用groups test命令查看更方便些。

    xifeng:x:1000:

    qiuri:x:1001:test

    [root@qiuri ~]#

    或者使用gpasswd命令,命令格式如下:

    gpasswd –a user_name group_name

    方法二、添加过程:

    [root@qiuri ~]# gpasswd -a test qiuri  #让用户test同时属于qiuri组

    Adding user test to group qiuri

    [root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group  #验证结果

    xifeng:x:1000:

    qiuri:x:1001:test

    [root@qiuri ~]# grep test /etc/passwd

    test:x:510:1000::/home/test:/bin/bash

    [root@qiuri ~]#

    当我们需要修改组的名称的时候可以使用groupmod -n实现,命令格式:

    groupmod -n new_group_name old_ group_name

    例如:将组qiuri更改为qiurixifeng

    [root@qiuri ~]# groupmod -n qiurixifeng qiuri  #修改组名称

    [root@qiuri ~]# grep qiuri /etc/group   #确认结果

    qiurixifeng:x:1001:test

    [root@qiuri ~]#

    和组名称对应的就是用户名称,我们可以usermod –l修改用户名称,命令格式如下:

    usermod –l new_user_name old_ user_name

    [root@qiuri ~]# usermod -l qiuri test    #修改用户名称

    [root@qiuri ~]# grep qiuri /etc/passwd  #验证结果

    qiuri:x:501:501::/home/test:/bin/bash

    最后要介绍删除组的命令groupdel,命令格式如下:

    groupdel group_name

    [root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group  #查看一下qiuri和xifeng组是否存在

    qiuri:x:1001:

    xifeng:x:1000:

    [root@qiuri ~]# groupdel qiuri   #删除qiuri组

    [root@qiuri ~]# groupdel xifeng  #删除xifeng组

    [root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group   #确认结果

    [root@qiuri ~]#

    我们已经可以通过创建不同的用户来防止其他人使用自己的账号,之后每个账户对应一个单独的用户密码,构成了一个基本的用户管理思路。为了方便管理还可以使用组来设置相同属性的用户。那么设置这些到底是为了什么呢?今天就揭开它的面纱。

    Linux系统是一个典型的多用户操作系统,不同的用户处于不同的地位,为了保护系统的安全性,linux系统对于不同用户访问同一个文件或目录做了不同的访问权限控制。

    我们是否还记得查看文件权限的命令,为了便于大家理解首先我创建如下所示文件和目录并查看相应的权限。

    [user@qiuri ~]$ mkdir qiuri

    [user@qiuri ~]$ touch xifeng

    [user@qiuri ~]$ ls -l

    总计 4

    drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    [user@qiuri ~]$

    我们拿qiuri这个目录分析一下输出的结果的含义,首先将它从左边开始分为7个部分,如下图所示:

    10

    第一个部分:文件类型和文件权限,其中第一个字符是文件的类型标志,后9个为权限标志。通过第一位确认文件属于那种类型。说道文件类型在Windows中,常见的文件类型有file.txt、file.doc、file.mp3等,根据文件的后缀名判断该文件的类型,在Linux中,一个文件主要看他是否能够执行与后缀没有太大的关系,主要看文件的属性有关。

    在linux中常见的文件类型有:

    “—”表示普通文件,例如:

    [root@qiuri ~]# ls -l install.log

    -rw-r--r-- 1 root root 41727 07-13 02:56 install.log

    输出的第一个标志位是“-”,这样的文件在Linux 中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。这类文件的删除方式是用rm 命令。

    “d”表示目录,例如:

    [root@qiuri ~]# ls -l /root

    总计 84

    -rw------- 1 root root 882 07-13 02:56 anaconda-ks.cfg

    drwxr-xr-x 2 root root 4096 07-13 03:18 Desktop

    -rw-r--r-- 1 root root 41727 07-13 02:56 install.log

    -rw-r--r-- 1 root root 4182 07-13 02:50 install.log.syslog

    -rw-r--r-- 1 root root 209 07-13 03:14 scsrun.log

    当某个目录下看到有类似 drwxr-xr-x ,这样的文件就是目录,目录在Linux 是一个比较特殊的文件。注意它的第一个字符是d。创建目录的命令可以用 mkdir 命令,或cp 命令,cp 可以把一个目录复制为另一个目录。删除用rm 或rmdir 命令

    “b”表示块设备文件,例如:

    [root@qiuri ~]# ls -l /dev/sda

    brw-r----- 1 root disk 8, 0 07-13 05:57 /dev/sda

    我们看到 /dev/sda 的属性是 brw-rw---- ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备。

    “c”表示字符设备文件

    [root@qiuri ~]# ls -l /dev/tty

    crw-rw-rw- 1 root tty 5, 0 07-13 05:58 /dev/tty

    我们看到/dev/tty的属性是 crw-rw-rw-,注意前面第一个字符是 c ,这表示字符设备文件。比如猫等串口设备。

    “l” 表示符号链接

    [root@qiuri ~]# ls -l /etc/rc.local

    lrwxrwxrwx 1 root root 13 07-13 02:09 /etc/rc.local -> rc.d/rc.local

    查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是链接文件。这和Windows 操作系统中的快捷方式有点相似。一般链接有两种:硬连接和符号链接。

    首先我们要明白,在Linux系统中每一个存储设备(硬盘、U盘),格式化后,分为Inode和Block两个部分。内核为每一个新建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性(文件的所有者、存取模式、类型、创建或修改时间、文件真正内容的指向等)保存在索引结点里,在访问文件时,索引结点值被复制到内存中,快速找到真正内容指向(pointer)指向数据内容放置的区块(Block)之中,从而实现文件快速的找到该文件。

    硬链接是直接指向索引结点(Inode)的指针,系统不会重新分配给它新的Inode。但是创建时需注意:链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。默认情况下,ln名称创建的便是硬链接。命令格式:

    ln source(源文件名)dist(目的文件名)

    例如:

    [user@qiuri ~]$ ls -il   #查看文件属性并显示文件lnode号

    total 4

    354552 drwxrwxr-x 2 user user 4096 07-13 17:34 qiuri

    354553 -rw-rw-r-- 1 user user 0 07-13 17:34 xifeng

    [user@qiuri ~]$ ln xifeng qiurixifeng      #创建文件xifeng的硬链接qiurixifeng

    [user@qiuri ~]$ ls -il   #验证结果,结果表明创建硬链接系统没有分配新的lndoe

    total 4

    354552 drwxrwxr-x 2 user user 4096 07-13 17:34 qiuri

    354553 -rw-rw-r-- 2 user user 0 07-13 17:34 qiurixifeng

    354553 -rw-rw-r-- 2 user user 0 07-13 17:34 xifeng

    [user@qiuri ~]$ ln qiuri qiurixifeng     #创建目录qiuri的硬链接,提示不允许硬链接指向目录

    ln: `qiuri': hard link not allowed for directory

    [user@qiuri ~]$

    软连接又称符号链接克服了硬链接的不足,不受文件系统的限制,可以创建指向目录的符号链接。因此我们大多数使用符号链接。创建符号链接的时候只需要在ln后加上-s选项即可。

    例如:

    [root@qiuri ~]# ln -s /home/user/qiuri qiuri     #给root用户创建符号链接qiuri,链接到/home/user/qiuri

    [root@qiuri ~]# ln -s /home/user/xifeng xifeng #创建符号链接xifeng,提示“文件已存在”的错误信息。

    ln: creating symbolic link `xifeng' to `/home/user/xifeng': File exists

    [root@qiuri ~]# ls -l     #查看一下当前目录下的文件,发现当前目录下已存在一个同名文件。

    total 80

    -rw------- 1 root root 882 Jul 13 02:56 anaconda-ks.cfg

    drwxr-xr-x 2 root root 4096 Jul 13 03:18 Desktop

    -rw-r--r-- 1 root root 41727 Jul 13 02:56 install.log

    -rw-r--r-- 1 root root 4182 Jul 13 02:50 install.log.syslog

    lrwxrwxrwx 1 root root 16 Jul 13 17:48 qiuri -> /home/user/qiuri

    -rw-r--r-- 1 root root 209 Jul 13 03:14 scsrun.log

    -rw-r--r-- 1 root root 0 Jul 11 07:51 xifeng

    [root@qiuri ~]# ln -sf /home/user/xifeng xifeng  

    #我们可以使用-f选项忽略目标文件的存在并强制做链接文件。

    [root@qiuri ~]# ls -li     #验证结果,发现创建成功。

    total 80

    580109 -rw------- 1 root root 882 Jul 13 02:56 anaconda-ks.cfg

    128925 drwxr-xr-x 2 root root 4096 Jul 13 03:18 Desktop

    1031170 -rw-r--r-- 1 root root 41727 Jul 13 02:56 install.log

    1031171 -rw-r--r-- 1 root root 4182 Jul 13 02:50 install.log.syslog

    1031178 lrwxrwxrwx 1 root root 16 Jul 13 17:48 qiuri -> /home/user/qiuri

    580110 -rw-r--r-- 1 root root 209 Jul 13 03:14 scsrun.log

    1031176 lrwxrwxrwx 1 root root 17 Jul 13 17:53 xifeng -> /home/user/xifeng

    [root@qiuri ~]#

    对文件类型有了一个了解之后,我们接着说文件权限,linux文件的权限标志位共九个,分为3组,分别代表文件拥有者的权限,文件所属用户组的权限和其它用户的权限,如下图所示:

    11

    Linux 文件的权限有三种:

    ? 可读(r):意味着我们可以查看阅读;

    ? 可写(w):意味着,可以修改或删除(不过删除或修改的权限受父目录上的权限控制);

    ? 可执行(x):意味着如果是文件就可以运行,比如二进制文件(比如命令),或脚本(要用脚本语言解释器来解释运行)。

    如果权限位不可读、不可写、不可执行,是用“-”来表示。对于目录来说,执行(x)权限表示可以使用cd 命令进入该目录,可以读出该目录下的文件的内容。如果某用户对目录只有读取权限,而没有执行权限,那么该用户只能使用ls 命令列出目录下的文件,而不能读取该目录内的文件。

    当一个文件的权限不符合我们使用的要求我们可以使用命令chmod来设置和改变,改变目录和文件权限的方法有两种,一种是通过八进制的语法,另一种是助记语法。

    八进制的语法使用数字表示各个权限分别是r(4)、w(2)、x(1)、-(0)。例如目录qiuri的权限如何使用八进制来表示:

    drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri

    属主的权限用数字表达:属主的那三个权限位的数字加起来的总和。比如上面的例子中属主的权限是rwx ,也就是4+2+1 ,应该是7;

    属组的权限用数字表达:属组的那个权限位数字的相加的总和。比如上面的例子中的rwx ,也就是4+2+1 ,应该是7;

    其它用户的权限数字表达:其它用户权限位的数字相加的总和。比如上面例子中是 r-x ,也就是4+0+1,应该是5;

    也就是说,如果使用八进制数来表示该文件的权限,应该是775。

    明白了数值表示权限的方法,例如将目录qiuri的权限修改为:属主对目录qiuri有可读可写可执行权限,属组和其他人有可读和可执行权限。

    [root@qiuri ~]# ls -l     #修改前查看一下

    total 4

    drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    [root@qiuri ~]#chmod 755 qiuri    #修改权限为755

    [root@qiuri ~]# ls -l    #修改后验证

    total 4

    drwxr-xr-x 2 user user 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    如果想同时修改目录和子目录中所有文件的权限执行如下命令:

    [root@qiuri ~]#chmod –R 755 qiuri

    助记语法中将属主(user)使用u表示、属组(group)使用g表示、其它用户(other)使用o来表示,而所有人(all)使用a来表示。使用“+”来表示添加权限、“-”表示减少权限、“=”表示授予的权限。当然使用r、w、x来表示权限。在使用的时候,可以组合使用。例如:

    [root@qiuri tmp]# touch xifeng #创建空文件

    [root@qiuri tmp]# chmod u+x xifeng # 给文件的拥有者添加执行权限

    [root@qiuri tmp]# chmod go-r xifeng # 给文件的属组和其它用户减去读取权限

    [root@qiuri tmp]# chmod a-rwx xifeng # 所有人都拒绝访问

    [root@qiuri tmp]# chmod a+rw xifeng # 所有人都具有读写权限

    [root@qiuri tmp]# chmod o=rw    #其它人的权限为读写

    注意:每修改一次,别忘了使用ls -l 命令查看权限的变化。

    第二个部分:硬链接数 一般文件创建硬链接的时候这个数值会发生变化。

    第三个部分:文件的属主,就是说这个文件是那个用户的。这里是user用户的目录。我们可以通过chown来修改文件或文件夹的所有者。例如:

    [root@qiuri ~]# ls -l /home/user     #修改前查看一下属性

    total 4

    drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    [root@qiuri ~]#chown root /home/user/qiuri   #使用命令修改属主

    [root@qiuri ~]# ls -l /home/user    #验证修改结果

    Total 4

    drwxrwxr-x 2 root user 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    第四个部分:文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是user 用户组。可以通过命令chgrp修改文件或文件夹组用户。例如:

    [root@qiuri ~]# ls -l /home/user     #修改前查看一下属性

    total 4

    drwxrwxr-x 2 root user 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    [root@qiuri ~]#chgrp root /home/user/qiuri   

    #修改文件属组,同理如果想修改当前目录和子目录的话,使用选项-R。

    [root@qiuri ~]# ls -l /home/user    #验证结果

    total 4

    drwxrwxr-x 2 root root 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    第五个部分:文件的大小,这里是4096个字节。

    第六个部分:创建或修改时间,这里是7月13号15:17。这个值的变化和修改或访问文件有关。

    第七个部分:文件或目录的名称。这里是qiuri这个目录。

    另外我们在修改文件的属主和属组的时候可以使用一下命令同时修改:

    [root@qiuri ~]# ls -l /home/user     #修改前查看一下属性

    total 4

    drwxrwxr-x 2 root root 4096 07-13 15:17 qiuri

    -rw-rw-r-- 1 user user 0 07-13 15:17 xifeng

    [root@qiuri ~]#chown root.root /home/user/xifeng  

    #同时修改文件的属主和属组,如果想修改目录和子目录下的所有文件属性使用选项-R。

    [root@qiuri ~]# ls -l /home/user     #验证结果

    文章来源:http://blog.163.com/songlin_li2010/blog/static/171853626201071131943889/

    bling bling
  • 相关阅读:
    c读取文本文档
    java类中定义接口
    android selector
    android listview
    android继承Dialog实现自定义对话框
    移植net-snmp到开发板(mini210)
    [BZOJ1901]Zju2112 Dynamic Rankings
    [BZOJ3524][Poi2014]Couriers
    [codeforces722D]Generating Sets
    [codeforces722C]Destroying Array
  • 原文地址:https://www.cnblogs.com/xubing-613/p/5162498.html
Copyright © 2011-2022 走看看