Linux账号管理与文件权限管理
Linux操作系统,不论什么发行版本,不管是Redhat系还是debain系亦或是Unix系,他们在对于系统账号管理的实现上都是基于ID号来实现的,我们在登录操作系统的时候,输入用户和密码,后台会将用户名转为ID号后在判断该账号是否存在,UID的范围是0-65535,其中,UID是0,则表示这个是超级管理员root,普通的用户会从1-60000开始算,在这里又会包含系统用户和登录用户,不同版本的系统也会有差异,比如centos6和7,那么,在centos6中,系统用户,也就是一些系统进程所需要使用的用户,比如web程序,ftp程序等,他们的范围是1-499,那么500开始创建的就是登录用户,在centos7中,系统用户则是1-999,登录用户从1000开始。
创建和管理Linux用户的命令和相关参数:
useradd
描述:创建新的账户
用法:useradd[选项]用户名称
我们可以使用man useradd去看下他有哪些选项,首先我们看下和useradd的相关信息都在man手册中的哪个位置,可以使用whatis useradd命令去查看
在执行后的结果中,我们看到与useradd相关的信息在man手册的第8项,那么我们可以使用man 8 useradd去查看,我们重点看下OPTIOS下面的相关信息。
那么,这里看到有很多的选项,我们常用的与useradd相关的参数有下面几种:
-c 设置账号描述信息,一般为账号全程。
-d 设置账号的home目录
-e 设置账号的失效日期,格式为YYYY-MM-DD
-g 设置账号的基本组
-G 设置账号的附加组,多个附加组需要用","隔开
-M 不创建家目录,一般与-s结合使用
-s 设置账号的登录shell,默认为bash
-u 指定账号UID
假如我们要创建一个账户叫nginx,不允许它登录,只是希望它作为nginx的进程用户,那么我们就可以使用如下命令去创建:
[root@HZ-CDN-1 ~]# useradd -s /sbin/nologin -M nginx
在比如,我们要创建一个账号mayun,他的UID是600,家目录是home下的ali_mayun,登录时所使用的shell是sh,那么我们就可以使用下面的命令去创建,创建完之后,我们可以使用id mayun去查看,这里面我们可以看到他的uid是他的用户id 后面还有,gid和groups,这个是他的组id,创建一个新用户时,系统会自动创建一个与其名字一样的组
[root@HZ-CDN-1 ~]# useradd -u 600 -d /home/ali_mayun -s /bin/sh mayun [root@HZ-CDN-1 ~]# id mayun uid=600(mayun) gid=600(mayun) groups=600(mayun)
2.groupadd
linux的组有基本组合附加组之分,一个用户只能加入一个基本组,但是可以加入多个附加组。我们上面说了,一个用户当创建完后系统会自动创建一个与用户名相同的组,并且设置用户加入这个基本组,linux的组由groupname/GID组成,其中超级管理员的组为0,系统用户的组为1-499,centos7为1-999,普通用户的组为500+,centos7为1000+,那么我们来看下创建组的一些参数都有哪些,还是使用如下命令去查看man手册。
[root@HZ-CDN-1 ~]# whatis groupadd groupadd (8) - create a new group [root@HZ-CDN-1 ~]# man 8 groupadd GROUPADD(8) System Management Commands GROUPADD(8) ……
创建组常用的选项:
-g 设置组的ID号
比如我们要创建一个组mayun_ali 指定它的id为1000,并且我们希望将他设置为我们之前创建的mayun那小子的附加组。
(1)首选,需要创建一个组为1000的mayun_ali
[root@HZ-CDN-1 ~]# groupadd -g 1000 mayun_ali
(2) 然后执行以下命令,那么我们对比下输出的id mayun的值,可以看到区别,这里的usermod是修改创建完的用户相关信息。
[root@HZ-CDN-1 ~]# id mayun uid=600(mayun) gid=600(mayun) groups=600(mayun) [root@HZ-CDN-1 ~]# usermod -a -G mayun_ali mayun [root@HZ-CDN-1 ~]# id mayun uid=600(mayun) gid=600(mayun) groups=600(mayun),1000(mayun_ali) [root@HZ-CDN-1 ~]#
3.usermod
描述:修改账号信息
用法:usermod[选项] 账户名称
选项:
-d 修改账户的home目录
-e 修改账户失效的日期
-g 修改用户的基本组
-G 修改用户的附加组
-a 如果要增加用户的附加组,必须加-a参数
-s 修改用户的登录shell
-u 修改用户的UID
例如,我们将刚才mayun那小子的家目录换成home目录下的alibaba,登录shell换成tcsh,并且让他能够加入taobao这个组,那么我们可以这样子去操作:
[root@HZ-CDN-1 ~]# mkdir /home/alibaba [root@HZ-CDN-1 ~]# groupadd taobao [root@HZ-CDN-1 ~]# usermod -d /home/alibaba/ -s /bin/tcsh -a -G taobao mayun [root@HZ-CDN-1 ~]# id mayun uid=600(mayun) gid=600(mayun) groups=600(mayun),1000(mayun_ali),1001(taobao)
我们刚才已经创建完mayun这个用户,并且设置了一些组的信息,但是,这个用户目前还不能登录,因为他没有密码。
4.passwd
描述:更新账号认证信息
用法:passwd [选项][账户名称]
选项:
-l 锁定账号,仅root可以使用此选项
--stdin 从管道读取密码
-u 解锁用户
-d 快速清空密码,仅root可以使用此命令
例如,设置mayun的密码,注意,我们输入密码是看不见的,你输入错了只能重新输入,没法删除。
[root@HZ-CDN-1 ~]# passwd mayun Changing password for user mayun. New password: Retype new password: passwd: all authentication tokens updated successfully.
我们要想从管道读取密码去设置mayun的账号,可以这样操作,这样子就重新设置了mayun的密码,覆盖了之前的密码。
[root@HZ-CDN-1 ~]# echo "alibaba@woshimayun" | passwd --stdin mayun Changing password for user mayun. passwd: all authentication tokens updated successfully.
我们现在从另外一个普通用户登录mayun这个账号,可以看到是正常可以登录的,这里的su 是switch user的意思 意思为切换用户,直接su将会使用当前用户的环境变量去登录到另外的用户,使用su - 将会使用登录后的用户环境变量去登录。
[root@HZ-CDN-1 ~]# su robin [robin@HZ-CDN-1 root]$ su - mayun Password: [mayun@HZ-CDN-1 ~]$
那么,我们在切换到root用户,使用如下命令,这样子就锁定了mayun这个账号了,他不能进行登录
[root@HZ-CDN-1 ]# passwd -l mayun Locking password for user mayun. passwd: Success
5.userdel
选项:
-r 删除账户以及相关文件
root@HZ-CDN-1 robin]# userdel robin //删除robin,但是该账户的文件不会删除 userdel: user robin is currently used by process 1973 [root@HZ-CDN-1 home]# userdel -r mayun //删除mayun,但是会删除相应的家目录 userdel: user mayun is currently used by process 1945
那么,我们刚才说了这么多,创建用户,删除用,用户的账号密码信息都是保存在哪里的呢?
/etc/passwd文件
系统账号的所有用户的信息都是保存在/etc/passwd这个文件下的。我们可以使用cat /etc/passwd去查看,如下所示:
[root@HZ-CDN-1 home]# cat /etc/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 …… nginx:x:502:502::/home/nginx:/sbin/nologin mayun:x:600:600::/home/alibaba/:/bin/tcsh robin:x:601:601::/home/robin:/bin/bash
文件的格式是:登录名:x:UID:GID:comment:主目录:用户默认shell
那么,你可以看到,这个文件其实并没有密码信息,那么密码信息究竟保存在哪里呢?
2./etc/shadow文件
[root@HZ-CDN-1 home]# cat /etc/shadow bin:*:15980:0:99999:7::: daemon:*:15980:0:99999:7::: adm:*:15980:0:99999:7::: lp:*:15980:0:99999:7::: sync:*:15980:0:99999:7::: shutdown:*:15980:0:99999:7::: halt:*:15980:0:99999:7::: …… mayun:!!$6$CT0Iu7L9$yQXE2rwL5g2yIP8diu1/brnSziC5aOg.OUXZiOyOHXzvvzxv1Hi.pQ5xh5fqhKtJbNuMhy8KOneE2M6CME7Eg0:16673:0:99999:7::: ……
shadow文件是保存了用户的密码信息,这个密码不是明文的,而是经过加密的密文,并且是不可逆的单向加密。
它的格式:
login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field,它有9组字段以:隔开
(1)账号名称:必须与/etc/passwd相同才行
(2)encrypted password(加密口令),这里的密码中用户名后面的!!表示密码不可用,因为我之前已经将他禁止了。
(3)最近改动密码的日期,显示的是16673,这个是linux时间戳从1970.1.1开始到当前的时间,可以这样去计算
[root@HZ-CDN-1 home]# echo $(($(date --date="2015/08/26" +%s)/86400+1)) 16673
(4)密码不可被更改的天数
(5)密码需要重新更换的天数
(6)密码需要更改期间前的警告天数
(7)密码过期后的账号宽限期
(8)账号失效日期
(9)保留
本文出自 “方文俊的IT技术博客” 博客,转载请与作者联系!
原文地址:http://fangwenjun.blog.51cto.com/7806977/1688366