首页 > 代码库 > 在Linux系统中文件(资源)和用户的管理
在Linux系统中文件(资源)和用户的管理
一个可执行二进制程序,被加载到内存,被内核调度到CPU上运行,这时候,就表现了一个进程。也可以说进程是程序的一个实例,是程序的动态表现。
在 Linux 系统中进程(process)是有属主的,也就是该进程以哪个用户的身份运行的。大家都知道,程序有输入和输出,也称这为程序IO。如果我们程序数据输入是磁盘。如,Web 服务器,接收用户的请求之后,把网页数据从磁盘中读入加工之后再把数据响应给用户。如果,发起Web 服务进程的用户没有读取该用户请求网页文件的权限。则无法响应用户的请求了。所以,文件(资源)的管理和用户的管理是我们与Linux 打交道经常遇到的。
一、资源(文件)的管理;
Linux 是一个多任务多用户的操作系统。可以多个人使用同一台主机来进行工作,A用户在这台linux计算机编辑文档、B用户也在该台计算机编辑文档,
C用户也在该台计算机编辑文档。三个用户都把自己编辑好的文档保存在该台计算上。那么三个用户把编辑好的文档保存(不是保存在自己的家目录中)下来以后,
怎么知道一个文件是不是自己的呢?
在 Linux 系统中,使用”文件属主“的概念来描述一个文件(资源)的主人是哪个用户。用户操作一个文件通常是:读、写、执行。“分享”是群体的精神,
那么一个文件的属主,把自己的文件(资源)分享(并不是复制一份给另外一个用户,而是共同使用该资源)给另处一个用户了,那么该用户如何使用该资源,进行哪些操作呢?可以读、还是可以写,这就涉及到授权了。
【chmod】命令就是授与一个用户对资源有什么使用权限的,是:读(w)、写(r)、执行(x)中的哪些呢。如果,A用户把自己的文件分享给了100个用户,则要对每个用户分别进行授权,很麻烦。引用了”组“的概念,如:只要授与这个组(机构)有对该文件(资源)的读(r)权限,而该文件又是这个组拥有的资源。只要这100个用户加入这个组(机构),它们都拥有对该文件的读(r)权限了。所以说,组是快速分配资源的方法。-----> 所以一个资源通常是属于某个用户的,叫属主。资源是一个组的资源,叫属组。改变资源的属组使用的命令【chchgrp】
因为,在 linux 中每一个用户都是至少属于一个组的。所以,它创建文件的时候就确定该资源属于哪个组的了。但是,我们也可以使用【chown】修改资源的属主和属组。
所以一个文件的拥有者有两个:属主、属组。
Linux 的一个重要哲学思想“一切皆文件”。我们在Linux系统下,用户访问的资源都是文件,所以资源的管理就简化了对文件的管理了。
所以,我们对资源的管理,无非是,下面两点:
1、改变资源的拥有者(用户、组)
在 linux 系统中,资源的占用者为:属主、属组,所以对资源的拥有者的改变就是改变资源的属主和属组。
使用【chown】,注意这是管理类命令,普通用户不可以执行。管理员,才有权限执行该命令。
[system@Node1 tmp]$ chown :admin a.txt chown: changing group of `a.txt‘: Operation not permitted
(A)、使用命令【chown】Change the owner,提供的选项可以改变文件的属主和属组。
Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE... or: chown [OPTION]... --reference=RFILE FILE... chown -R OWNER: 递归修改一个目录中的文件及其子目录中的文件属主 chown -R :GROUP 递归修改一个目录中的文件及其子目录中的文件属组 chown -R OWNER:GROUP 递归修改一个目录中的文件及其子目录中的文件属主和属组 chown --reference=file FILE... 把文件(FILE)的属主属组修改与file的属主属组相同。 注意:【chown】参考时,不仅修改属主,和属组。 【chgrp】参考时,仅修改属组。
[root@Node1 tmp]# ll total 108 -rw-r--r--. 1 root root 0 Sep 8 2012 abc.txt -rw-rw-r-x. 1 admin admin 0 Jul 8 22:48 a.txt [root@Node1 tmp]# chown --reference=/tmp/abc.txt a.txt ---> 使用参考时,属主属组也改变了 [root@Node1 tmp]# ll total 108 -rw-r--r--. 1 root root 0 Sep 8 2012 abc.txt -rw-rw-r-x. 1 root root 0 Jul 8 22:48 a.txt
(B)、改变文件的属组的命令【chgrp】
Usage: chgrp [OPTION]... GROUP FILE... or: chgrp [OPTION]... --reference=RFILE FILE... [root@Node1 tmp]# ll total 108 -rw-r--r--. 1 root root 0 Sep 8 2012 abc.txt -rw-rw-r-x. 1 admin admin 0 Jul 8 22:48 a.txt [root@Node1 tmp]# chgrp --reference=/tmp/abc.txt a.txt [root@Node1 tmp]# ll total 108 -rw-r--r--. 1 root root 0 Sep 8 2012 abc.txt -rw-rw-r-x. 1 admin root 0 Jul 8 22:48 a.txt --------> 使用参考时,仅属组改变
2、既然我们把资源共享给别的用户了(该资源同时可以有多个用户可以使用),就要授与该资源的使用者权限。坧
使用【chmod】change file mode bits 改变文件权限模型的权限位。实现资源的授权。
注意:资源的属主,才可以使用【chmod】授权资源是如何使用的,但是系统管理员可以对任何资源进行授权。
[admin@Node1 tmp]$ ll a.txt -rw-rw-r-x. 1 system system 0 Jul 8 22:48 a.txt [admin@Node1 tmp]$ chmod o-x a.txt chmod: changing permissions of `a.txt‘: Operation not permitted [system@Node1 tmp]$ chmod o+x a.txt [system@Node1 tmp]$ ll a.txt -rw-rw-r-x. 1 system system 0 Jul 8 22:48 a.txt
使用方法:
Usage: chmod [OPTION]... MODE[,MODE]... FILE... or: chmod [OPTION]... OCTAL-MODE FILE... or: chmod [OPTION]... --reference=RFILE FILE... -R 递归修改(如果我们修改的是一个目录中的文件而且还有子目录中的文件时,这个选项是很方便的) --reference=FILE 参考 FILE 的权限
(1)、此种方法。修改指定类别的使用者的权限位,是很方便的。但是如果我们要对不同类别的使用者授与不同的权限。使用该种方法是很麻烦了,可以选择第二种方法。
操作指定类别的使用者(属主、属组、其它用户)的权限位:
+/- 增加(授权)/减去(撤消) u 属主 g 属组 0 其它用户 a 所有,包括:u,g,o chmod u+rwx 增加文件的属主的读(r)、写(w)、执行(x)权限。 chmod u-rwx 减去文件的属主的读(r)、写(w)、执行(x)权限。 chmod u+x 增加文件的属主的写(w)权限 chmod a+rwx 增加文件的属主、属组、其它用户的读(r)、写(w)、执行(x)权限。
注意:
没有指定对谁(属主、属组、其它用户)增加或减去权限,则是对文件的属主、属组、其它用户都进行“权限位”的改变操作。
”增加/减去“写(W),只对属主有效。如下例子:
[root@Node1 tmp]# ll a.txt -rw-r--r--. 1 admin root 0 Jul 8 22:48 a.txt [root@Node1 tmp]# chmod +x a.txt [root@Node1 tmp]# ll a.txt -rwxr-xr-x. 1 admin root 0 Jul 8 22:48 a.txt [root@Node1 tmp]# chmod 777 a.txt [root@Node1 tmp]# ll a.txt -rwxrwxrwx. 1 admin root 0 Jul 8 22:48 a.txt [root@Node1 tmp]# chmod -w a.txt chmod: a.txt: new permissions are r-xrwxrwx, not r-xr-xr-x --- [root@Node1 tmp]# ll a.txt -r-xrwxrwx. 1 admin root 0 Jul 8 22:48 a.txt
(2)、一次性完成文件的“属主、属组和其它用户”的权限位的改变操作。
使用三位二进制分别表示:"读写执行" 也就是 rwx. 0表示该位无效,1表示该位有效。
r--:100 转成 8进制 4 -w-:010 2 --x:001 1 r-x:101 5
chmod 属主(8进制值)属组(8进制值)其它用户(8进行值) FILE...
如:chmod 754 FILE....
说明: 属主: 第一位数字:7 ------>转成二进制:111 也就是:rwx 属组: 第二位数字:5 ------>转成二进制:101 也就是:r-x 其它用户: 第三位数字:4 ------>转成二进制:100 也就是:r--
所以,就把 FILE 的权限属性修改为: rwxr-xr-- 所就是使用【ll】列出文件的的时候显示的内容
[root@Node1 ~]# chmod 754 /tmp/a.txt [root@Node1 ~]# ll /tmp/a.txt -rwxr-xr--. 1 admin root 0 Jul 8 22:48 /tmp/a.txt
说明:此种修改文件的权限的方法,有局限性,不太适合只修改某类使用者(属主、属组、其它)的权限。
如果想更灵活地修改权限,可以参考上述第一种方法。
二、用户的管理;
使计算机主机工作的正是核心的任务,但操作核心来替用户工作的,却是 Shell 。
通常用户都是以 shell 来与核心沟通,让核心达到我们所想要实现的目的,Shell 有两种:登陆 shell 和 非登陆 shell.系统有很多 Shell 可用,如:sh,bash,nologindash,tcsh,csh 我们新建用户的时候要指定使用什么shell 来作为该用户的登陆 shell. 当在登陆提示符 " Nodel login: " 输入用户时,login 会会检查用户使用的 shell是不是系统认为是安全的,CentOS 系统中存放在 /etc/shells 文件中的 shell 都是安全的。如果用户默认登陆系统的 shell 不是该文件的 shell ,就会被拒绝登陆系统的。
1、创建组和用户
在 Linux 系统中组是实现对资源的快速授权的一种机制。用户是属于组的,且可以属于多个组,如果新建用户的时候,不指定该用户属于哪个组的,就以用户名作为组名。
Linux 中用户又分为系统用户和普通用户。
所以,我们新建用户的时候:
A、如果,我们创建的系统用户,一般是不会有家目录的(home directory).
B、默认是创建普通用户的。我们需要指定新建用户的默认登陆 shell,该用户属于哪个组,
组又分为:基本组和附加组。分别使用 -g 和 -G。基本组只能有一个,附加组可以有多个。
[root@Node1 ~]# id mandriva uid=4004(mandriva) gid=3301(linux) groups=3301(linux),3300(distro),2201(fedora) 用户名 基本组 附加组(linux,distro,fefora)
(1)、添加用户的命令使用方法
useradd [options] LOGIN -s|--shell SHELL 指定用户的默认登陆 shell -r 创建的新用户为系统用户 -P 选项指定密码,是明文的。 -g 用户属于哪个组的。使用该选项,一定要先创建组。 -G 用户的附加组。可以指定多个,但要使用逗号(,)隔开。 -u 可以创建指定 uid 的用户,但该 uid 没有用户占用。 -d 指定用户的家目录的位置,默认在 /home 目录下。 -M 创建用户的时候不创建家目录。 -m 创建家目录。创建普通用户是默认创建家目录的。
[root@Node1 ~]# useradd -r -s /bin/bash -p user user [root@Node1 ~]# tail -1 /etc/shadow user:user:16256::::::
使用命令【useradd】创建的用户如果没有密码是不可以登陆系统的。
[root@Node1 ~]# cat /etc/shadow | grep mysql mysql:!!:16255::::::
说明:
密码文件/etc/shadow 第二字段,只显示两个叹号(!!),表示:该用户是没有密码的。我们也可以使用这种方式,限制用户登陆系统。方法:在用户的密码前加两个叹号。
另个一种方式使用【 usermod -L user_name】锁定用户,如果用户再次登陆就无法登陆了。 【usermod -U user_name】解锁用户就可以登陆系统了。
(2)、添加组使用【group,add】
Usage: groupadd [options] GROUP -g 指定新建的组的UID号 -f 如果创建的组已经存在,就成功退出。即出状态码为“0” -r 创建系统组
2、设置用户密码
管理员可以修改任意用户的密码。普通用户只可以修改自己的密码。
(A)、自己修改自己的密码
例,普通用户修改自己的密码
[system@Node1 ~]$ passwd Changing password for user system. Changing password for system. (current) UNIX password:
说明:普通用户修改自己的密码,必需符合 PAM(插入式验证模块)的要求,否则修改不成功。
管理员用户修改则不受该PAM限制,但是会警告。
(B)、管理员修改用户密码使用下述方法
Usage: passwd [OPTION...] <accountName> --stdin 使用标准输入,避免交互式,可以使用管道
查看一个用户的密码信息,如密码的加密方式、什么时候设置的密码、密码的有效时间等,其实这是显示 /etc/shadow 文件中内容。
3、修改用户的各项属性
其实就是修改 /etc/passwd 文件的各段的内容的,不过它还可以管理用户如:锁定用户。
[root@Node1 ~]# tail -1 /etc/passwd user1:x:4028:4028::/home/user1:/bin/bash
命令的使用方法
Usage: usermod [options] LOGIN -l New_Login 修改用户名 -L 锁住帐户(用户),用户就不可以登陆系统了。需要解锁才可以。 -U 解锁。 -u Uid 修改uid -g groupName|gid 修改gid -G groupName1,groupName2,...|gid1,gid2,... 修改附加组,附加组可以有多个。 有多个时需要使用逗号(,)分隔。 -a 以追加文件修改一个用户的附加组。如果没有该选项, 只使用 -G 会把原来的附加组删除的。所以它们一起使用 -aG groupName1,groupName2,...|gid1,gid2,... 以追加方式给追加附加组 -c "string..." 修改用户的注释信息 -s SHELL 修改用户的登陆shell
4、修改用户密码的各项属性change user password expiry information
其实就是修改 /etc/shadow 文件的各段的内容的。
[root@Node1 ~]# head -1 /etc/shadow root:$6$Ej0XQ5rP$5D50AwSMJNy01z3nc86WBeXjqFk/xeB3x0wlh6HNfC2AwWjF9V2U3sUSa4iArVFL7Ijaz3HPZVpl5t7XuQvO7.:16251:0:99999:7:::
Usage: chage [options] [LOGIN] -l userName 显示userName 用户的密码的各项属性。 也就是密码的有效期、什么时候过期。。。等信息。
[root@Node1 ~]# chage -l admin Last password change : Jul 06, 2014 ----> chage -d DATE userName Password expires : never ------> chage -E DATE userName 最后失效时间 Password inactive : never ------> chage -I INACTIVE 密码非活动时间。 Account expires : never ------> 帐号是否失效 Minimum number of days between password change : 0 ------> chage -m DATE userNameMaximum number of days between password change : 99999 --> chage -M DATE userName Number of days of warning before password expires : 7 ----> chage -W DATA userName
5、删除用户
Usage: userdel [options] LOGIN
-r 删除用户的家目录和邮箱目录。
这两上目录是创建用户的时候默认创建的。
使用【userdel】默认是不会删除用户的家目录和邮件目录的。
所以,有时候我们明明使用【userdel】把用户删除了,
下一次又创建用户与删除的用户同名的时候,就不会显示一些信息.
[root@Node1 ~]# useradd user1 useradd: warning: the home directory already exists. Not copying any file from skel directory into it. Creating mailbox file: File exists [root@Node1 ~]# echo $? 0 [root@Node1 ~]# id user1 uid=4028(user1) gid=4028(user1) groups=4028(user1)
6、删除组
group groupName
7、修改用户的说明信息
[root@Node1 ~]# chfn admin Changing finger information for admin. Name []: RedHat Office []: 801 Office Phone []: 86268 Home Phone []: 18600000000 Finger information changed.
本文出自 “Linux” 博客,请务必保留此出处http://9528du.blog.51cto.com/8979089/1436417