linux系统 一切皆是文件,用户信息和用户组信息都是存放在/etc目录下的文件中./etc目录 ,按FHS标准 (Filesystem Hierarchy Standard,文件系统层级标准,各linux版本开发商之间需要遵守的开发标准)是用来存放系统的参数配置文件的目录.
在这篇博文中,我们需要了解到
/etc/passwd ; /etc/shadow 用户有关信息
/etc/group ; /etc/gshadow 用户组有关信息
四个文件内容的结构,以及用户、用户组、shadow密码机制、属主权限、属组权限、其它权限。
用户: 在linux中,所有的进程都是由一个用户发起的, 所有的文件也有一个用户是它的所有者。
我的在创建一个用户名后,虽然我们起的是英文名子,但设备只对数字感兴趣,我们创建一个用户名后,系统又给它起了一个数字编号,就是UID ,用户ID号。同理,用户组也有自己的ID号,GID,称为组ID号.当我们创建一个用户后,系统会自动为它创建一个同名的组,相当于我们让电脑生了一个娃娃baby,系统就自动为她盖了一房子,叫baby的房间.有了这个房间,小baby就可以有权不让别人进来,这后面我们会细讲.现在组有了,但小baby毕竟是系统里的孩子,而不是现实里的孩子,现实里的孩子一出生可能就在妇产科里,但小baby登陆系统时它要处在哪个位置呢,这里就有一个家目录的概念,当我们小baby的名子登陆系统时,起始的目录就是这个家目录.
在这个家里有一个重要角色,就是系统管理员,在系统管理员这个大屋子(组)里的人,有着至高无上的权力,不管是那个小baby的屋子或她屋里的东西都可以随意拿取,并给小baby们定下规矩,无人可人反抗,系统默认是一个叫root的大人.
现在我们了解了用户名、UID、GID、用户组、家目录的概念。下面在还有用户名密码和默认shell,用户密码虽然概念都理解,不过密码涉及到很多管理手段,后面我们会细讲.默认shell,如果对shell没有理解的话,可暂时把它这样理解,它对于我们来说就是一种命令解释工具,集成了很多指令.对于小baby来说,就是我们来帮她设定一种性格,性格和性格之间差距不大,就看你喜欢那个.
保存了用户信息的文件是: ./etc/passwd 这里我们用cat /etc/passwd 命令打开passwd文件看一看
包含信息如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
保存格式是
用户名:密码:UID:GID:描述(可保存一段字符串信息):家目录:默认shell
为小baby分配的东西都在这里了,可以看到最后shell里有一个nologin,字面意思是"不让登陆"大家知道用户就是要用来登陆的,怎么会有一个不让登陆的用户呢? 这里我们把用户分成两类,一个是系统用户,一个是普通用户.
系统用户是一种不能登陆的用户.因为linux所有的进程都需要一个启动用户,但不能所有的系统进程启动都用root用户,因为root用户的权限太大啦,进程一旦被劫持会有安全方面的隐患,所以用户系统有系统用户,专门解决这种情况.这种用户不是用来登陆操作的,专门用来开启某些关键进程.因为不用登陆系统,自然家目录的存在也就可有可无了.
下面我们就来看看那些指令可以对./etc/passwd文件进行操作.
当我们通过指令 useradd,usermod,userdel 对/etc/passwd文件进行修改时,就可以添加,修改,删除用户了.
useradd 选项 [选项参数] 用户名
-u, --uid UID:指定UID;
-g, --gid GROUP:指定基本组ID,此组得事先存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
-c, --comment COMMENT:指明注释信息;
-d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
-s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
-r, --system:创建系统用户;
usermod 选项 [选项参数] 用户名
-u, --uid UID:修改用户的ID为此处指定的新UID;
-g, --gid GROUP:修改用户所属的基本组;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;
-a, --append:与-G一同使用,用于为用户追加新的附加组;
-c, --comment COMMENT:修改注释信息;
-d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
-m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
-l, --login NEW_LOGIN:修改用户名;
-s, --shell SHELL:修改用户的默认shell;
-L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
-U, --unlock:解锁用户的密码
userdel 选项 用户名
userdel [选项] 登录
-r:删除用户时一并删除其家目录;
密码部分都是X ,因为/etc/passwd文件设计时是所有用户都有权打开的,密码直接显示出来会有安全隐患(那怕是加过密的密文),为解决这种问题,后期人们设计把密码放在了/etc/shadow(影子)文件中,这个文件除了管理员,谁都无权打开./etc/shadow文件内容是这样的:
root:$6$CGsqab6d$Cd.PnnWtlL5XZAyr9J2zoMqyJH1QodcDp1pQp0uZ1f0Cq4eq9.TMkSQU6IfpvYZEYc32.l mF0lKuQwavnC49a0:16777:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
格式是: 用户名:
加密密码,用!表示用户进行登陆操作:
自1970/1/1密码被修改的天数: (恋爱天数)
设置密码不能被修改的天数,0表示随时修改: (这几天别想改密码 不要碰!)
要求用户限期修改密码的天数,99999天相当不限制: (这里天几必须改 只有这几天可以!)
密码过期前发警告的开始天数: (警告你 不来就算!!)
密码过期后,密码还被允许使用的天数: ( 再给你最后两天机会! )
该用户被禁用的天数: ( 你已经被甩N天)
保留将来使用: (留给别人吧!处男)
当我们通过 passwd指令 对/etc/shadow 文件进行修改时,就可以实现对密码的差别管理.
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1) passwd:修改用户自己的密码;
(2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;
-l, -u:锁定和解锁用户;
-d:清除用户密码串;
-e DATE: 过期期限,日期;
-i DAYS:非活动期限;
-n DAYS:密码的最短使用期限;
-x DAYS:密码的最长使用期限;
-w DAYS:警告期限;
用户组:
小baby和小boy两人打了一个赌,他们各成立一个小组组装机器人,让老师评定那个小组成绩最好.这时我们就要考虑到,让小baby的队友之间可以互相看到对方的文件并进行修改,她们又不能看到小boy小组的文件 ,然后还要让老师可以看到小baby和小boy两个小组的机器人文件.解决这种问题的时候,就用到了用户组的权限分配,权限方面我们后面会细讲,我们先来看用户组的指令
/etc/group
/etc/gshadow
我们先用cat /etc/group 查看一下group文件内容格式:
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
组名:密码:GID:[组内用户名],[组内用户名], ---
一个用户是可以属于多个组成员的.就象上方daemon用户,分别是bin,daemon,adm三个组的成员用户. 我们用 #id daemon 查看一下daemon用户的信息显示如下:
uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp)
显示了daemon用户的基本组是daemon,后面附加组有bin,adm,lp三个组.
我们再用cat /etc/gshadow ,查看一下gshadow文件,同用户的密码机制一样,组也使用了shadow密码机制.内容如下:
[plain] view plaincopy
[root@pinfun6 ~]# cat /etc/gshadow
root:空白:空白:root
| | | |--以逗号分隔的小组成员
| | |--以逗号分隔的组管理员
| |--加密的密码
|--组名
组的密码初衷是让用户临时加入组的,但操作起来不便,很少使用.
groupadd命令:添加组
groupadd [选项] group_name
-g GID:指定GID;默认是上一个组的GID+1;
-r: 创建系统组;
groupmod命令:修改组属性
groupmod [选项] GROUP
-g GID:修改GID;
-n new_name:修改组名;
groupdel命令:删除组
groupdel [选项] GROUP
当用户创建新的目录和文件时,会默认继承用户当前的用户和组做为属主和属组
比如小baby创建了一个new文件,new的文件属主是小baby ,属组是小baby.
如果小baby也加入了xx组,可以用chgrp命令来切换组环境 ,chgrp xx ,这时,小baby再创建一个新文件,属主就是小baby,属组则成为了xx,而不是小baby了. 这时再用exit命令退出xx组环境,返回到小baby组环境 下. 文件和目录的属主和属组概念下面马上讲到
最后一个大课题: 权限
linux的文件系统只包含目录(目录是一种特殊的文件)和文件
我们通过用命令 ll /etc 得到内容如下:
drwxr-xr-x. 3 root root 4096 Dec 8 16:07 abrt
drwxr-xr-x. 4 root root 4096 Dec 8 16:26 acpi
-rw-r--r--. 1 root root 46 Dec 13 22:24 adjtime
-rw-r--r--. 1 root root 1512 Jan 12 2010 aliases
-rw-r--r-- 1 root root 12288 Dec 8 16:38 aliases.db
drwxr-xr-x. 2 root root 4096 Dec 8 16:21 alsa
其中最前列的-rw-r--r-- 第一个字符是文件类型我们忽略掉,后面的rw-r--r--就是该文件的权限,分别对应了属主(rw-) 属组(r--) 其它(r--)的权限,三个字符r,w,x分别对应"读,修改,执行"三个动作,"-"表示没有该权限.属主的概念是文件或目录的拥有者,属组的概念是文件或目录的工作组,其它的概念是不是该文件的属主和属组的用户对文件拥有的权限.一般属主和属组是文件创建用户的用户名和基本组名,但可被管理员修改掉.
权限也分成了目录权限和文件权限,
我们先看目录权限,目录是特殊的文件,可把目录下的文件名称看为目录的数据
r 它的读权限 ,可用ls命令浏览目录下的文件名称列表
w 修改权限 ,可对目录增加删除文件
x 执行权限 ,可cd到目录下,用ll查看目录下文件的详细列表.
文件的权限描述:
r:可获取文件的数据;
w: 可修改文件的数据;
x:可将此文件运行为进程;
我们可能通过chmod命令来对文件或目录进行授权修改:
chmod命令:
chmod [OPTION]... MODE[,MODE]... FILE...
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
上表可以看出,三个字符的权限位的变化可以通过0--7八个数字来表示.
我们可以通过 chmod 444 file 来表示给file文件分配r--r--r--权限 .当然这是常用的表达方式,chmod命令还有别的参数形式修改权限,这里不细说了.
现在我们知道了用户、组、附加组和文件的属主、属组、其他 的概念,通过它们我们来把权限模型梳理一遍。我们回到小baby的机器人模型上来
小baby创建文件时,新文件会有默认的属主属组其它权限rwxrw-r--,哪里定义的默认权限这里我们不讲。
这个新文件的属主是小baby 属组是小baby ,权限的对应来看,她的队友只能对应到其它的权限r--,是可以读这个文件的,但不能修改,同时小boy也可以读到这个新文件,因为小boy也在其它的权限中.这显然是不行的,怎么让队友能读和改这个文件,又不能让小boy那帮人看到呢?首先小baby和队友都加入了一个xman的组里,这样他们就有一个共同的组,然后用chgrp命令,切换到xman组环境下,这时小baby从新创建的文件就是属主小baby 属组xman 权限rwxrw-r--, 因为队友都是xman组里人员,权限rw-就可以读和写这个文件了.但小boy还在其它权限里可以看到这个文件,还要修改这个文件的其它权限为---,但这样以后的所有文件都要修改,太麻烦了! 突然想到目录的权限,小baby在xman组环境下,新建了一个xxx目录,权限为rwxrw----这样,在xxx目录下的所有文件,只要不是属主属组成员,其他人连文件名子都看不到啦.相信小boy他们也是这样做的,这时候再把老师分别加入到小baby和小boy的两个组里,就可以同时看到他们的文件了.