2.linux用户管理1

来源:互联网 发布:linux view 最后一页 编辑:程序博客网 时间:2024/05/21 19:37

一. 用户管理

         用户管理相关的文件

         /etc/passwd                                --存放用户信息

         /etc/shadow                                --存放用户密码

         /etc/group                                    --存放组信息

         /etc/gshadow                    --存放组密码

 

         #vim /etc/passwd

         root:x:0:0:root:/root:/bin/bash

 

         第一列:用户名

         第二列:密码         老版本这里放的就是密码,为了安全性考虑,密码放到了/etc/shadow的第二列

                                     x代表/etc/shadow的第二列生效,去掉x就表示此用户登录的时候没有密码

         第三列:uid    用户识别ID值,系统是通过这个值来确认是哪个用户

         第四列:gid    组识别ID值

         第五列:描述项     comment

         第六列:家目录    

         第七个:bash   当前用户使用的bash

 

         管理员              root    uid=0

         系统帐号                   uid 1-499   65534

         普通用户帐号        uid 500-65535(2.6.xxx的内核支持的uid数量为 2^32-1个)        

 

 

         id  查看当前使用用户的用户信息和组信息

 

         #id

         uid=0(root)gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

         #id user1

         uid=500(user1)gid=500(user1) groups=500(user1)

 

         切换用户

         su= switch user

        

         suuser5   非完全切换 继承上一个用户的环境变量

         su- user5 完全切换       不继承上一个用户的环境变量

 

         #su - user1      --切换到user1,不需要密码

         #su                    --切换到root,需要密码

 

         /bin/bash          表示此用户使用bash,用户可以登录系统,可以收邮件,可以登录FTP(只要是有效的shell都可以)

         /sbin/nologin   表示用户不能登录系统,可以收邮件,可以登录FTP

         /bin/false          表示用户不能登录系统,可以收邮件,不能登录FTP

 

         #cat /etc/shells

 

 

         #vipw                         直接打开/etc/passwd文件

 

         小实验:

         1,去掉/etc/passwd里root用户第二列的x,确认登录系统不需要密码,加回x,密码不变

         2,useraddabc增加一个abc用户,passwd abc修改一个登录密码,把uid改为0,使用abc登录,会发现你其实登录的是root管理员

         3,把abc用户的/bin/bash分别改成/sbin/nologin,/bin/false,然后使用su - abc来测试,发现都登录不了

 

---------------------------------------------------------------------

 

         #vim /etc/shadow

         root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::

         与/etc/passwd相对应 (但这里有九列)

         第一列:用户名

         第二列:密码   (这里以*号开头或!开头默认是不能登陆的),加密过后的密码,使用crypt加密

         第三列:上一次修改密码的时间      linux以1970年1月1日到现在的天数来算的

         第四列:修改密码后几天内不允许再修改         如果这里为5,那改过密码后5天内不能再修改 0代表不限制(只对普通用户有效)

         第五列:多少天内必须要求你改         99999代表不限制

         第六列:过期前几天给你一个告警信息

         第七列:密码过期后还给的一个宽限天数

         第八列: 这里可以写一个过期天数    这里也是以1970年1月1日到现在的天数来计算的,多用于收费系统

         第九列: 保留,留着以后功能扩展

 

 

         用户相关的命令

         useradd                               --增加用户,add

         usermod                              --修改用户,modify

         userdel                                 --删除用户,delete

         passwd                                --修改密码,password

 

 

 

         useradd  增加一个普通用户

                   -c  comment                     /etc/passwd第5列

                   -d      home                           /etc/passwd第7列

                   -u  uid                                 /etc/passwd第3列

                   -g  gid                                 /etc/passwd第4列

                   ..........     找man

 

         #echo $[2**32-1]

         4294967295

 

         #useradd -u 4294967295 user2      --不成功,报错

         #useradd -u 4294967294 user2      --成功,这个数就是linux目前版本支持的最大uid数

         #id user2

         uid=4294967294(user2)gid=502(user2) groups=502(user2)

 

 

         usermod修改一个用户信息,参数基本与useradd相同

 

         #usermod -u 502 user2

         #id user2

         uid=502(user2)gid=502(user2) groups=502(user2)

 

         创建一个用户时,系统做了2件事:

         1.homedirectory

         2.mail      

 

         #ls /home/

         #ls /var/mail/

 

         userdel删除一个用户

                   -r参数  连同家目录与邮件目录全删除

 

         #userdel -r user2

 

         passwd  修改密码

 

         普通用户修改密码和管理员有些不同:

        # passwd user1                                                       --root用户修改user1的密码,密码的长度没有限制

         Changingpassword for user user1.

         Newpassword:

         BADPASSWORD: it is WAY too short

         BADPASSWORD: is too simple

         Retypenew password:

         passwd:all authentication tokens updated successfully.

 

         $passwd                                                         --普通用户修改密码

         Changingpassword for user user1.

         Changingpassword for user1.

         (current)UNIX password:

         Newpassword:

 

         $passwd user1

         passwd:Only root can specify a user name.

 

         几个小实验:

 

         1,普通用户只能自己改自己的密码,还需要原密码才能改,改的密码还要一定的密码复杂度(最少8位,字母,数字,符号最好都有就没问题)

 

         2,手动建立一个用户abc用户

         vim/etc/passwd

         vim/etc/shadow

         #grub-md5-crypt     --使用这个命令产生密码的加密字符串,粘贴到shadow文件

 

         vim/etc/group

         vim/etc/gshadow

         mkdir/home/abc

         touch/var/mail/abc

 

         chownabc.abc /home/abc

         chmod700 /home/abc

         chownabc.mail /var/mail/abc

         chmod660 /var/mail/abc

 

         cp/etc/skel/.bash* /home/abc/                                           --abc登录时运行的环境变量

 

二. 组管理

         vim/etc/group

         bin:x:1:root,bin,daemon

 

         第一列:组名

         第二列:与/etc/passwd第二列一样

         第三列:gid

         第四列:组成员

 

         vim/etc/gshadow

         bin:::root,bin,daemon

 

 

 

         组管理的相关命令:

 

         groupadd                   --增加新组

         groupdel                     --删除组

         groupmod                           --修改组信息,不是修改组成员

         gpasswd                              --添加和删除组员,添加组密码

 

 

         #groupadd group1

         #groupadd group2

         #useradd -G group1 user1

         #useradd -G group1,group2 user2          --增加用户时指定组

         #id user1

         uid=501(user1)gid=503(user1) groups=503(user1),501(group1)

         #id user2

         uid=502(user2)gid=504(user2) groups=504(user2),501(group1),502(group2)

 

 

         #id user3

         uid=503(user3)gid=505(user3) groups=505(user3)

         #usermod -g group1 user3                                 --修改用户的组信息

         #id user3

         uid=503(user3)gid=501(group1) groups=501(group1)

 

 

         #groupmod group1 -n group3                                     --将group1修改为group3

         #groupmod group2 -g 510                                  --将group2的gid改为510

 

         #gpasswd -a abc group3                                     --add,将已经存在的用户添加到某个组   

         #gpasswd -d user1 group3                                 --delete,将组里的用户删除

         #groupdel group1                                                  --删除组

 

         --关于有效组和初始组的讨论

 

         #id user5

         uid=505(user5)gid=506(user5) groups=506(user5),503(group1),505(group2)

 

         gid=那个组就是你的初始组

         #su - user5

         $groups                             --user5用户用此命令查看 靠前的是有效组

         user5group1 group2

 

 

         --那么此用户现在创建目录或者文件的属组为 有效组user5

 

         $touch 1

         $ll

         total0

         -rw-rw-r--.1 user5 user5 0 Jul 16 16:08 1

 

         $newgrp group1               --这个操作其实就是登录group1组,但是因为user5也属于group1组,所以不需要密码

         $groups                             --现在发现group1组靠前了

         group1user5 group2

 

         $touch 2          

         $ll             --这次创建的文件,发现属组变成了group1,就也就是说user5的有效组现在是group1;但你用另一个终端root用户id user5去查看,它的gid还是user5,并没有变成group1

         total0

         -rw-rw-r--.1 user5 user5  0 Jul 16 16:08 1

         -rw-r--r--.1 user5 group1 0 Jul 16 16:10 2

 

 

         #groupadd group3

         #gpasswd group3   --另一个终端使用root用户新建一个组,给一个组密码

         Changingthe password for group group3

         NewPassword:

         Re-enternew password:

 

 

         $groups

         group1user5 group2

         $newgrp group3     --你登录一个你没有加入的组,那么就需要组密码了

         Password:

         $groups

         group3user5 group1 group2  --登录成功,现在user5有效组为group3

 

 

         $touch 3

         $ll             --这次创建的文件,发现属组变成了group3

         total0

         -rw-rw-r--.1 user5 user5  0 Jul 16 16:08 1

         -rw-r--r--.1 user5 group1 0 Jul 16 16:10 2

         -rw-r--r--.1 user5 group3 0 Jul 16 16:13 3

 

 

三. 用户权限 (permission)   

 

 

         -       rw------- 1     root root 1112 Mar 27 03:14 anaconda-ks.cfg

         文件类型  权限     硬链接   用户  组    大小  修改时间              文件名

 

 

         rw-   ---   ---       权限用九位来表示

         u         g            o

 

         前三位代表用户u(user),中间三位代表组g(group),后三位代表o(others) 

 

         权限有三种     r (read) 读    w (write)  写     x (execute)   执行 

 

         a表示all

 

 

         r  读  权限

                   针对目录,有r权限,就代表能对此目录有列表的功能   (就是ls列出来的功能)

                   针对文件,有r权限,就代表能对此文件有阅读的功能   (就是指cat一类的命令)

 

         w  写  权限

                   针对目录,有w权限,就代表在此目录下创建文件或者子目录    (touch,mkdir等)

                   针对文件,有w权限,就代表能在此文件写入内容或者修改         (>  ,>>, vi 再写等)

        

         x执行 权限

                   针对目录,有x权限,就代表能进入此目录   (cd)

                   针对文件,有x权限,就代表能执行它  (命令,可执行文件等)

 

         Permissiondenied: 权限拒绝,没有权限

 

         权限的修改

 

         #chmod a+x 1.txt                      --changefile mode bits

         #chmod g+x 1.txt

         #chmod a+x 1.txt

         #chmod a-r 1.txt

         #chmod o-rwx 1.txt

         #chmod u-w,g+x,o+x abc         --也可以一次性连写

         #chmod o=rwx 1.txt

 

         rw---- ---

         110000 000   --二进制          600  --十进制             

 

         权限用数字来表示  (r,w,x都可以用数字来表示)

         r        4

         w      2

         x       1

 

         rwx  7

         rw_  6

         r_x   5

         r__   4

         _wx  3

         _w_ 2

         __x   1

         ___  0

 

         -rw-r--r--  这个以数字表示为644(严谨的说,不能叫它六百四十四,要叫它六四四)

         每三位里r代表4,w代表2,x代表1;由三个数组成一个三位数,就是你的权限

 

         修改文件所有者和组:

         chown                                                     --changeowner

        

         #touch 1.txt

         #ll 1.txt

         -rw-r--r--1 root root 0 Aug 20 15:28 1.txt

         #chown user2.user2 1.txt

         #ll 1.txt

         -rw-r--r--1 user2 user2 0 Aug 20 15:28 1.txt

         #chown user3:user3 1.txt

         #ll 1.txt

         -rw-r--r--1 user3 user3 0 Aug 20 15:28 1.txt

         #chown user2:user3 1.txt

         #ll 1.txt

         -rw-r--r--1 user2 user3 0 Aug 20 15:28 1.txt

 

         umask                                                              --权限掩码

         系统默认的umask是0022,创建文件默认的权限是644,创建目录默认权限是755

 

         修改系统的umask

         #umask 0

         #umask

         0000

         umask等于0,创建文件默认的权限是666,创建目录默认权限是777

 

四. 特殊权限位(s,t)

1. s位叫特权位,英文的叫法有setuid,setgid,suid,sgid等

 

         特权位s    

         一个可执行文件拥有s位时,当别的用户来执行这个可执行文件的话,使用的权限是此可执行文件属主或者属组的权限

 

         只针对前三位,中间三位

         对目录可以加,但是无效,因为目录不是命令,根本不能执行它

 

         #ll /usr/bin/passwd

         -rwsr-xr-x.1 root root 30768 Feb 17  2012/usr/bin/passwd

         #ll /etc/shadow

         ----------.1 root root 1434 Jul 17 09:27 /etc/shadow

 

 

         --普通用户修改密码使用passwd能改自己的密码,但是密码是存放在/etc/shadow里,也就是说普通用户对/etc/shadow没有写的权限,但passwd可执行文件的前三位有s位,所以普通在调用passswd时是用的root的权限

        

         #chmod u+s 1.txt                                --suid

         #chmod g+s 1.txt                                --guid

 

         小实验:

         <1>,测试passwd命令的s位,去掉其s位,普通用户就不能自己改自己密码了,加上s位就可以了

         chmod777 /usr/bin/passwd             去掉s位

 

         chmod4755 /usr/bin/passwd          添加s位

 

         <2>,/bin/touch这个命令是没有s位的,你可以尝试加上s位,然后用普通用户touch文件,观察效果。做完测试后,记得改回来也就是把s位去掉

 

         chmod4755  /bin/touch

 

 

         <3>,普通用户能关机吗?怎么让普通用户关机

 

         可以对关机命令加s位来让普通用户能关机,在rhel6下测试shutdown可以这样做,halt,init不能这样做

         这只是一个理论讨论,实际情况不会这么做的

        

         #shutdown -h now

 

2. 粘贴位t     --只针对目录有效

 

         特别用在/tmp目录

 

         有t位的目录,任何用户在有权限的情况下是可以创建文件和目录,就算是有权限删除别人的文件或目录也不能删除

         自己只能删除自己创建的目录,用于一些共享上传的文件服务器场合

 

         会提示Operationnot permitted    --这是操作不允许,不是pemissiondenied  

 

         s位和t位注意的地方:

 

         用数字表示

 

         前三位上加s      4

         中间三位加s           2

         后三位加t                         1

        

        

         chmod1777 /tmp

        

         s位和t位大小写的区别 

 

         小写的话就表示 有x执行权限

         大写的话就表示 没有x执行权限 

 

3. 隐藏属性

 

         lsattr                                    --查看隐藏属性

         chattr                                   --修改隐藏属性

 

         #lsattr 1.txt

         -------------e-1.txt

 

         #chattr +A 1.txt                --这个属性让文件的accesstime访问后也不会变化,节省了IO(IO优化);默认情况下rhel5,访问一次atime就会跟着变一次,rhel6下只有当atime等于或早于mtime和ctime之一时,才会访问跟着变,否则不会变。(原因我们在后面讲mount参数时再补充)

 

         #lsattr 1.txt

         -------A-----e-1.txt    

 

         #stat 1.txt |tail -3            --用cat命令访问这个文件,再用此命令查看access time,会发现不再变化

         Access:2014-07-17 11:12:58.589838878 +0800

         Modify:2014-07-17 11:12:58.589838878 +0800

         Change:2014-07-17 11:13:15.405701371 +0800

 

         #chattr +a 1.txt

 

         一个文件加了a属性,重定向覆盖以前的内容不允许,也不可修改和删除,不可重命名,不可硬链接,可以软链接,但追加内容是可以的

         #lsattr 1.txt

         -----a-------e-1.txt

 

         #echo 456 > 1.txt

         bash:1.txt: Operation not permitted

         #echo 456 >> 1.txt          

 

         #chattr -a 1.txt

         #chattr +i 1.txt  --加了i属性,此文件不可被修改,不可重命名,不可删除,不可做硬链接,可以软链接,只可以看内容

         普通用户使用隐藏属性,可以添加A位,不能添加a和i位,也不能删除a和i位

0 0