用户管理和权限管理

时间:2023-01-18 15:24:28

1、用户管理

用户分为:

     超级用户:又称为root或根目录,拥有系统最高权限

     系统用户:与系统服务相关,通常在安装软件时自动安装

     普通用户:由超级用户创建,只能管理自己启动的进程

 

用户UID范围:

      管 理 员:0
     普通用户:1-65535
     系统用户:1-499(centos 6),1-999(centos 7)
     普通登入用户:500-60000 (centos 6),1000-60000(centos 7)

用户管理相关的文件

          /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 description
第六列:家目录    
第七个:bash   当前用户使用的bash
更改shell:可在/etc/passwd(超级用户)中更改’/bin/bash‘;也可使用命令useradd -s /bin/zsh(要求更改的shell) +用户名  usermod -s /bin/shell(or  其他shell)+用户   普通用户:chsh -s /bin/shell+用户

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

--vim /etc/shadow
root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::
与/etc/passwd相对应 (但这里有九列)
第一列: 用户名
第二列:密码   (这里以*号开头或!开头默认是不能登陆的)
第三列:上一次修改密码的时间      linux以1970年1月1日到现在的天数来算的
第四列:修改密码后几天内不允许再修改    如果这里为5,那改过密码后5天内不能再修改 0代表不限制(只对普通用户有效)
第五列:多少天内必须要求你改    99999代表不限制
第六列:过期前几天给你一个告警信息
第七列:密码过期后还给的一个宽限天数
第8列: 这里可以写一个过期天数    这里也是以1970年1月1日到现在的天数来计算的,多用于收费系统
第九列: 保留,留着以后功能扩展


组管理:(groups:查看有效组)

vim /etc/group
bin:x:1:root,bin,daemon

第一列:组名
第二列:与/etc/passwd第二列一样
第三列:gid
第四列:哪些用户属于这个组

vim /etc/gshadow
bin:::root,bin,daemon

 

用户相关命令:

       useradd -u(uid), -g(guid),-G(附加组),-c(指定用户全称),-d(指定用户主目录), -s(指定                 shell), -r(创建系统用户), -M(不创建家目录)

思考题:删除dog用户家目录,如何还原(root用户重新创建dog的家目录,拷贝/etc/skel/.bash* 的三个文件到/home/dog/下即可)

    步骤:

       1)mkdir /home/dog

       2)cp /etc/skel/.bash*   /home/dog

       3)chmod -R  root.root  /home/dog(-R表递归)

 

          usermod -u, -g, -G, -a, -c, -l(修改用户名), -s, -L(锁定用户密码), -U(解锁用户密码)

       userdel -r(同时删除家目录)

       passwd -d(删除用户密码),-e(设置用户过期期限),–stdin

            (方法1:echo "123" |passwd --stdin dog

             方法2:passwd dog)

       gpasswd-a(向组中添加用户),-d(向组中移除用户),

       chage修改密码过期时间

       groupadd -g, -r(创建系统用户)

       groupmod-g, -n(修改组名)

       groupdel (删除组)

       chown:改变文件的所有者,所属组群。(chown dog:dog  1.txt 即把1.txt文件的所有者和所属组群都改为了             dog)

       chmod:修改用户权限

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

          # id
          uid=0(root) gid=0(root) groups=0(root))

          # id bin
          uid=1(bin) gid=1(bin) groups=1(bin),2(daemon),3(sys)

 su切换环境变量,和不切换环境变量 给大家演示:

       su - yhy1 -c “whoami” 不切换用户,以目标用户执行命令

2、权限管理


权限的判断为:一个用户(非一个程序)对一个文件拥有什么样的权限

-rw------- 1 root root  1112 Mar 27 03:14 anaconda-ks.cfg
rw-------    权限用九位来表示

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

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

a表示all  a=u+g+o( user+group+other)


    r  读  权限
        针对目录,有r权限,就代表能对此目录有列表的功能   (就是ls列出来的功能)
        针对文件,有r权限,就代表能对此文件有阅读的功能   (就是指cat一类的命令)
    w  写  权限
        针对目录,有w权限,就代表在此目录下创建(删除)文件或者子目录    (touch,mkdir等)
        针对文件,有w权限,就代表能在此文件写入内容或者修改    (>  ,>>, vi 再写等)
    x 执行 权限
        针对目录,有x权限,就代表能进入此目录   (cd)
        针对文件,有x权限,就代表能执行它  (命令,可执行文件等)

 

思考:

1)创建一个文件test,要求它实现user1只读,user2,user3可读可写,user4,user5可读可执行

先把user2,user3加入到group1组,然后创建下面的一个文件
r--rw-r-x user1  group1  test

2)创建一个文件test,要求它实现user1只读,user2,user3可读可写,user4,user5可读可执行,user6,user7可读可写可执行,user8,user9对其没有任何权限

这样的需求,仅靠九位权限实现不了;一定要实现,可以用文件file acl来做(主要的命令为setfacl和getfacl)


权限的修改

# chmod a+x 1.txt
# chmod g+x 1.txt
# chmod a+x 1.txt
# chmod a-r 1.txt
chmod u-w,g+x,o+x 1.txt    --也可以一次性连写



权限用数字来表示  (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;由三个数组成一个三位数,就是你的权限
注意:文件默认权限为644,目录默认权限为755

# chmod 755 1.txt
# chmod 644 1.txt

chown user1.user1 1.txt   --这个是改owner和group属性的
chown user1:user1 1.txt


思考:
3)什么情况下才能删除一个文件或目录?


答:跟这个文件或目录本身的权限无关,跟你对它们的上一级目录是否有写权限有关。你对一个目录有写权限,你就可以删除这个目录里任何文件

4)请问下面的情况,我一个普通用户能否rm -rf /test/abc/删除这个子目录


# ll -d /test
drwxr-xrwx. 3 root root 12288 Jul 16 17:42 /test
# ll /test
drwxr-xr-x. 2 root root 4096 Jul 16 17:40 abc
# ll /test/abc/
-rw-r--r--. 1 root root 0 Jul 16 17:40 1.txt

答案:删除不了,因为如果abc是个空目录就可以,但因为删除不了abc下的1.txt这个文件,所以造成abc也删除不了

5)什么情况下修改了一个文件才需要强制保存,什么情况下能够成功强制保存?

答案:如果你对一个文件没有写权限,那么修改后,要保存就会出现强制保存的选项;
     虽然你对这个文件没有写权限,但如果你对文件所在的上一级目录有写权限,则可以强制保存成功,并且保存后,把文件的owner和group属性改成了你自己
     如果对上一级目录没有写权限,则不可以强制保存;但也有一个例外,就是如果这个文件的owner就是你,那么你对它没有写权限,对它上级目录也没写权限,也可以强制保存成功
    如果文件有i属性,那么无论什么情况都不能强制保存

6)如果一个用户对一个目录有r没有x会怎么样?有x没有r会怎么样?
这两种情况都是错误的情况,一般对目录要么能r能x,要么就都不行.

特殊权限位(s,t)
s位叫特权位,英文的叫法有setuid,setgid,suid,sgid等


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

    只针对前三位,中间三位
    对目录可以加,但是无效,因为目录不是命令,根本不能执行它


[root@li ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 17  2012 /usr/bin/passwd
[root@li ~]# ll /etc/shadow
----------. 1 root root 1434 Jul 17 09:27 /etc/shadow

facl ----- 文件访问控制列表   
 
1、设置facl权限   
 
针对单个用户:
 
# setfacl -m u:<user>:<rwx> <file>
 
[root@test01 ~]# setfacl -m u:user4:r /uplooking/2.txt  
 
 
 
针对单个用户组:
 
# setfacl -m g:<grp_name>:<rwx> <file>
 
[root@test01 ~]# setfacl -m g:shichang:rw /uplooking/2.txt
 
 
 
 
2、查看facl权限   
 
[root@test01 ~]# getfacl /uplooking/2.txt
getfacl: Removing leading '/' from absolute path names
# file: uplooking/2.txt
# owner: user1
# group: user3
user::rwx
user:user4:r--
group::r-x
mask::r-x
other::rw-
 
 
3、删除facl权限   
 
[root@test01 ~]# setfacl -x u:user4 /uplooking/2.txt
 
[root@test01 ~]# setfacl -x g:shichang /uplooking/2.txt
 
[root@test01 ~]# getfacl /uplooking/2.txt
getfacl: Removing leading '/' from absolute path names
# file: uplooking/2.txt
# owner: user1
# group: user3
user::rwx
group::r-x
mask::r-x
other::rw-
 
 
共同选项:
    -R     递归修改权限   
    
    
 
特殊权限:                # chmod 2600  
 
    suid            4
    sgid            2
    sticky bit         1
    
    
1、suid  
 
    针对命令、脚本文件设置  
    作用: 当普通用户执行命令期间,会临时获取到命令的属主用户对系统的操作权限  
    
    [root@test01 ~]# ls -l /usr/bin/passwd  
    -rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
 
    设置suid
    
    # chmod u+s <file>
    
    
    
2、sgid  
 
    针对目录设置
    作用: 在目录下创建文件时,所有文件会继承目录的属组  
    
    [root@test01 ~]# chmod g+s /uplooking/
 
    [root@test01 ~]# ls -ldh /uplooking/
    drwxr-sr-x. 2 root caiwu 18 2月  10 23:36 /uplooking/
 
    
3、sticky bit  
 
    针对目录设置  
    作用: 目录下的文件只有文件属主用户、目录属主用户、root用可删除  
    
    # chmod o+t <dir_name>
   
    --普通用户修改密码使用passwd能改自己的密码,但是密码是存放在/etc/shadow里,也就是说普通用户对/etc/shadow没有写的权限,但passwd可执行文件的前三位有s位,所以普通在调用passswd时是用的root的权限



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



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



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

可以对关机命令加s位来让普通用户能关机,在rhel6下测试reboot,shutdown可以这样做,init不能这样做
这只是一个理论讨论,实际情况不会这么做的

--生产环境很多root的事情给普通用户做,是使用sudo工具来授权


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

特别用在/tmp目录

    有t位的目录,任何用户在有权限的情况下是可以创建文件和目录,就算是有权限删除别人的文件或目录也不能删除
    自己只能删除自己创建的目录,用于一些共享上传的文件服务器场合

会提示Operation not permitted    --这是操作不允许,不是pemission denied   


小实验:
用一个测试目录(比如:/test/),再用两个普通用户,分别在此目录里建立不同的文件
测试结果:
目录没有t位,只要能写,能删除里面的任何文件
有t位,只能删除自己的文件




s位和t位注意的地方:

用数字表示

前三位上加s        4
中间三位加s        2
后三位加t             1


chmod 1777 /tmp        --/tmp目录的t位很重要,不要把它去掉,否则会影响很多程序的运行

注意:s位和t位大小写的区别  

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

umask:权限遮罩码

查看当前的umask的值

    umask UMASK值:设置umask的值,且仅对当前shell进程有效

    install:复制文件并设置文件属性

    install anaconda-ks.cfg -m 633 anaconda.new :复制anaconda文件为anaconda.new,并设置其权限

    -o:指定属主

    -g:指定属组

    -d:创建目录

      install -d data:创建data目录,类似与mkdir

setfacl:查看文档的ACL权限

 选项:

    -m  添加ACL条目

    -x    删除指定的ACL条目

    -R  递归处理所有的子文件与子目录

例:setfacl -m user:root:rwx  /bin/chmod  (设置该目录属于root用户并且设置他的权限为 rwx)