linux操作系统中的组分为基本组和附加组,一个用户同意时刻仅能加入一个基本组,但可以同时加入多个附加组。默认在创建用户时,系统默认会自动创建同名的组,并设置用户加入该基本组中
1. useradd
例子:
1)创建普通账户Frank,以及对应的组
useradd Frank
2)创建普通账户admin,全名为administrator,账户家目录为/home/admin,账户失效日期为2017/12/24,账户基本组为root,附加组为bin,adm,mail
useradd -c administrator -d /home/admin -e 2017-12-24 -g root -G bin,adm,mail admin
3)创建无法登陆系统且没家目录的用户user2
useradd -s /sbin/nologin -M user2
2. groupadd--创建组账户
groupadd tom #创建tom组
groupadd -g 1000 jerry #创建GID为1000的组jerry
3. id--显示账户及组信息
id root #查看root账户及相关组信息
4. passwd
-l:锁定账户,例如passwd -l tom,仅root可用此项
--stdin:从文件或管到读取密码,例如echo "1234" | passwd --stdin tom(ubuntu不能用)
-u:解锁账户
-d:快速清空账户密码,例如passwd -d tom,这样无密码也可登陆系统,仅root可用此项
5. usermod
例子:
usermod -d /home/tomcat tom #修改tom的家目录为/home/tomcat,此目录必须存在
usermod -e 2018-1-1 tom
usermod -g mail tom #修改账户tom的基本组为mail, 追加用户到组中,usermod -aG mail tom, 把tom用户加入mail组中
usermod -s /bin/bash user2 #修改user2登陆的shell为bash
usermod -u 1001 tom #修改tom的UID为1001
6. userdel,groupdel
userdel tom #删除账户tom,但该账户的文件不删除
userdel -r tom #删除账户tom,并删除相应的家目录
groupdel jerry #删除组jerry
7. chmod--修改文档属性
--reference=FILE #根据参考文档设置权限
-R #递归将权限应用到所有子目录与子文件
chmod命令参数中,u代表所有者,g代表所属组,o代表其他用户,a代表所有人
例如:
1)chmod u=rwx,g=rwx,o=rwx test.log
2)chmod a=rw test.log
3)chmod g-x,o-wx test.log
4)chmod 755 /home
5)chmod --reference=test.log test1.log #以test.log的标准修改test1.log的权限。
8. gpasswd
-a:添加用户到组; -d:从组删除用户; -A:指定管理员; -M:指定组成员和-A的用途差不多; -r:删除密码; -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
例子:
1) gpasswd admin #给admin组设置组密码
设置个组密码啥用啊?首先要说下newgrp命令,使某个用户暂时切换到其他组。
例如,newgrp hong admin,此时需要输入密码,这个密码就是gpasswd设置的。之后用户hong建立的文件属组就是admin,而非自身所属组hong
2)gpasswd -A hong admin #将账户hong设置为admin组的管理员,这样用户hong就可以执行gpasswd -a mary admin #添加mary到admin组中
注意:
1. 添加用户到某一个组,有两种方式
1). usermod -aG group_name user_name, 如果不加参数a,usermod -G group_name user_name可以添加一个用户到指定的组,但是以前添加的组就会清空掉。
2). gpasswd -a user_name group_name
2. 从一个组中删除用户,命令为:gpasswd group_name -d user_name
9. ACL访问控制权限
问题:系统的基本权限是针对文档的所有者,所属组或其他账户进行控制的,无法针对某个单独的账户进行控制。
而使用ACL,可针对单一账户设置文档的访问权限,linux系统使用getfacl查看文档的ACL权限,使用setfacl来设置文档的ACL权限
setfacl用法:setfacl [选项] [{-m|-x} acl条目] 文件或目录
选项:-b 删除所有ACL条目
-m 添加ACL条目
-x 删除指定的ACL条目
-R 递归处理所有的子文件和子目录
例子:
setfacl -m u:user1:rw test.txt #添加ACL条目,使用户user1对test.txt文件可读写
setfacl -m g:user1:r test.txt #添加ACL条目,使user1组对test.txt文件可读
setfacl -x g:user1 test.txt #删除user1组的ACL条目
setfacl -x u:user1 test.txt #删除账户user1的ACL条目
setfacl -b test.txt #删除所有附加的ACL条目
10. suid,sgid,sbit
1)suid:它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限
例如:ls -l /usr/bin/passwd,显示结果为 -rwsr-xr-x 1 root root 42824 Sep 13 2012 /usr/bin/passwd
在文件拥有者的执行位上出现的是s而不是x,所以说passwd这个程序是具有SUID权限的。我们在修改用户密码的时候,用的就是passwd命令,而用户密码存储在/etc/shadow。
那么查看一下/etc/shadow这个文件的权限:ls -l /etc/shadow ,结果为:-rw-r----- 1 root shadow 1138 Dec 13 20:00 /etc/shadow
由上面的结果,我们知道只有root可以往shadow文件中写入数据,其他用户连查看的权限都没有。那我们平时是怎么修改密码呢?没错,就是和SUID有关。当我们使用passwd命令时,就获得了passwd的所有者即root的权限,进而可以对shadow文件进行写入操作。
使用SUID肯定满足一下几点:
1.SUID只对二进制文件有效
2.调用者对该文件有执行权
3.在执行过程中,调用者会暂时获得该文件的所有者权限
4.该权限只在程序执行的过程中有效
2)sgid
它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。
当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。
当SGID作用于目录时,若某用户对此目录有写和执行权限,则该用户在这个目录下建立的文件都是属于这个目录所属的组。
3)sbit
它出现在其他用户权限的执行位上,它只能用来修饰一个目录。
当某一个目录拥有SBIT权限时,任何用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。
例如:ls -ld /tmp ,结果为drwxrwxrwt 12 root root 12288 Dec 17 16:33 /tmp ;可以看到最后一位为t,这说明/tmp文件就是这种文件。
4) 那么,如何设置上面所说的三种权限呢?
很简单,在普通文件权限前面再加上这些特殊权限值就可以了,其中4表示SUID,2表示SGID,1表示SBIT,
例如:使test文件具有SUID权限,chmod 4777 test即可;要想有SUID,SGID,SBIT权限,chmod 7777 test就行了
实例1:更改用户家目录