标签:linux7、用户、组
Linux是通过UID和GID号来识别用户和组。对某个文件或程序的访问也是以UID和GID为基础。一个执行中的程序继承了调用它的用户的权利和访问权限。
根用户(0):UID为0的用户,能够访问系统任何文件和程序,而不论root根用户是否有权限。root用户通常称为“超级用户”
系统/服务用户(1-999):UID为1-999.系统保留账号,或者某些服务才能使用的的账号
普通用户(大于1000):UID大于1000,只能访问他们拥有的或者有权限执行的文件
每一个登入系统的用户都需要有地方保存那些专属于该用户的配置文件,这个目录就是用户根目录(home directory),类似于windows中的c:\Documents and Settings
root用户的根目录对于大多数Unix/Linux操作系统来说都处于“/root”下
普通用户的主目录位于“/home/yourname”(yourname是用户名)下,类似于windows下的c:\Documentsand Settings
Linux系统中,每个用户根目录下都有几个隐藏的脚本文件
例:查看root根目录下的几个脚本文件
[root@freeit ~]# ls -a . .bashrc Documents .local Videos .. .cache Downloads Music .viminfo anaconda-ks.cfg .config .esd_auth Pictures .bash_history .cshrc gyh Public .bash_logout .dbus .ICEauthority .tcshrc .bash_profile Desktop initial-setup-ks.cfg Templates |
.bash_history :命令历史记录
.bash_logout :退出shell时执行此脚本
.bash_profile :登陆shell时执行此脚本
Linux下每一个用户默认都有一个电子邮箱账号。电子邮箱保存在/var/spool/mail子目录中,以用户名命名的文件制定
例:
[root@freeit ~]# id freeit_gyh uid=1000(freeit_gyh) gid=1000(freeit_gyh) groups=1000(freeit_gyh) [root@freeit ~]# ls /var/spool/mail/ freeit_gyh rpc |
/etc/passwd
用户配置文件
[root@freeit ~]# ll /etc/passwd -rw-r--r--. 1 root root 1926 Dec 11 22:59 /etc/passwd
[root@freeit ~]# head /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 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin |
说明:
文件内容从左到右依次为:用户名、密码、UID、GID、描述说明、用户主目录、shell(默认为/bin/bash)
/etc/shadow
用户密码文件
[root@freeit ~]# ll /etc/shadow ----------. 1 root root 1141 Dec 11 22:59 /etc/shadow
[root@freeit ~]# head /etc/shadow root:$6$DcnwECzSOErax9TE$b0NLl5K.t6ouyQwS8Ewz8sn4Y9yQTYne7dodqlhpiNn2PCapPsvZG1s/XisrG.yxbgeWmn.xnKqsZ1S1.Q2.r/:16415:0:99999:7::: bin:*:16141:0:99999:7::: daemon:*:16141:0:99999:7::: adm:*:16141:0:99999:7::: lp:*:16141:0:99999:7::: sync:*:16141:0:99999:7::: shutdown:*:16141:0:99999:7::: halt:*:16141:0:99999:7::: mail:*:16141:0:99999:7::: operator:*:16141:0:99999:7::: |
说明:
文件内容从左到右依次为:
用户名
密码 : 默认MD5加密,密码前加*或!锁定账号
密码更改时间: 从1970.1.1开始算起
密码不可更改时间: 0表示可随时更改
密码失效时间: 99999表示永不失效
密码失效前警告时间: 默认7天
密码过期后的宽限时间
账号失效时间: 从1970.1.1开始计算
保留
命令:
Useradd [username]
参数:
-u:指定UID
-g:指定组
-G:指定附属组
-d:指定家目录
-m:自动建立用户的宿主目录
-s:指定shell环境
-c:描述说明和备注
-e:设定用户账号有效时间
-r:建立系统账号
例1:不带参数创建user1用户
[root@freeit ~]# useradd user1 [root@freeit ~]# id user1 uid=1001(user1) gid=1001(user1) groups=1001(user1) |
例2:带参数创建user2用户
[root@freeit ~]# useradd -u 1111 -G user1 -d /home/user2 -s /sbin/nologin -c gyh user2 //UID为1111、附属组为user1,shell为/sbin/nologin(不能交互式登录)、描述为gyh [root@freeit ~]# id user2 uid=1111(user2) gid=1111(user2) groups=1111(user2),1001(user1) |
注:用户私有组
当一个用户被创建时,与其同名的私有组会被同时创建,用户被关联到这个私有组,用户的新文件从属于这个组。
优点:防止用户的新文件属于一个“公众”组;
缺点:可能会导致用户把自己的文件都改成所有人可以访问
命令:
psswd [username]
参数:
-l:锁定账户
-u:解开账户锁定状态
-d:删除使用者的密码
-S:大s,检查指定使用者的密码认证种类
-x:--maximum=DAYS:最大密码使用时间(天)
-n:--minimum=DAYS:最小密码使用时间(天)
注:
root用户可以修改所有用户的密码
普通用户只能修改自己的密码
例:为user1用户更改密码
-----------------------------------------------方法一-------------------------------------------------------- [root@freeit ~]# passwd user1 Changing password for user user1. New password: //输入密码时默认不显示 BAD PASSWORD: The password is shorter than 7 characters Retype new password: passwd: all authentication tokens updated successfully. ------------------------------------------------方法二--------------------------------------------------------- [root@ns ~]# echo "redhat" | passwd user1 --stdin Changing password for user user1. passwd: all authentication tokens updated successfully. |
命令:
usermod [option] [username]
参数:
-c:备注,修改账户的备注文字
-d:登入目录,修改用户登陆时的目录
-e:有效期限,修改账户的有效期限
-f:缓冲天数,修改在密码过期多少天即关闭该账号
-g:修改用户所属组
-G:修改用户所属的附加组
-l:修改用户账号名称
-L:锁定用户密码,是密码无效
-s:修改用户登陆后使用的shell
-u:修改用户ID
-U:解除密码锁定
例1:修改user1用户的UID为1110,GID为1111,附属组为user2,shell环境为/sbin/nologin
[root@freeit ~]# id user1 uid=1001(user1) gid=1001(user1) groups=1001(user1) [root@freeit ~]# cat /etc/passwd |grep user1 user1:x:1001:1001::/home/user1:/bin/bash [root@freeit ~]# usermod -u 1110 -g 1111 -G user2 -s /sbin/nologin user1 [root@freeit ~]# id user1 uid=1110(user1) gid=1111(user2) groups=1111(user2) [root@freeit~]#cat /etc/passwd |grep user1 user1:x:1110:1111::/home/user1:/sbin/nologin |
例2:把用户user1改为gyh
参数:-l
格式:usermod –l newuser olduser
[root@ns ~]# usermod -l gyh user1 [root@ns ~]# id user1 id: user1: No such user [root@ns ~]# id gyh uid=501(gyh) gid=501(user1) groups=501(user1) |
修改文件所有者
例:创建aaa文件,修改其所有者为user1
[root@freeit ~]# touch aaa [root@freeit ~]# ll aaa -rw-r--r--. 1 root root 0 May 4 08:35 aaa [root@freeit ~]# chown user1 aaa [root@freeit ~]# ll aaa -rw-r--r--. 1 user1 root 0 May 4 08:35 aaa |
/etc/group
组配置文件
[root@freeit ~]# ll /etc/group -rw-r--r--. 1 root root 871 May 3 21:12 /etc/group
[root@freeit ~]# head /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: mem:x:8: kmem:x:9: |
说明:从左向右依次为:组名、组密码、GID、组内用户(以UID显示)
/etc/gshadow
组密码文件
[root@freeit ~]# ll /etc/gshadow ----------. 1 root root 701 May 3 21:12 /etc/gshadow
[root@freeit ~]# head /etc/gshadow root::: bin::: daemon::: sys::: adm::: tty::: disk::: lp::: mem::: kmem::: |
说明:从左向右依次为:组名、组密码、管理员账号、组内用户
创建组
例:创建一个组gyh
[root@freeit ~]# groupadd gyh [root@freeit ~]# tail /etc/group | grep gyh gyh:x:1112: |
参数:
-g:指定GID
-r:创建一个系统账户
删除组
例:删除gyh组
[root@freeit ~]# groupdel gyh [root@freeit ~]# tail /etc/group | grep gyh [root@freeit ~]# //删除之后,组配置文件中没有这个组 |
设置组密码
例:创建一个freeit组,并为这个组设置一个密码,最后把用户加入到组验证
[root@freeit ~]# groupadd freeit [root@freeit ~]# gpasswd freeit Changing the password for group freeit New Password: Re-enter new password: [root@ freeit ~]# [root@ freeit ~]# su user1 [user1@ freeit root]$ newgrp freeit Password: //如上,组设置密码之后,用户想要加入到这个组,必须要有这个组的组密码方能加入,这样也就保证了组的安全性、专用性 |
修改组属性
例:修改组freeit的GID
[root@ freeit ~]# tail /etc/group |grep freeit freeit:x:1112: //修改之前为1112 [root@ freeit ~]# groupmod -g 2222 freeit [root@ freeit ~]# tail /etc/group |grep freeit freeit:x:2222: //修改之后变为2222 |
参数:
-g:修改GID
-o:允许重复
-p:更改组的密码
chgrp
修改文件所属组信息
例:在root用户下创建一个文件abc,更改其所属组为freeit
[root@ freeit ~]# touch abc [root@ freeit ~]# ll abc -rw-r--r--. 1 root root 0 May 4 08:27 abc [root@ freeit ~]# chgrp freeit abc [root@ freeit ~]# ll abc -rw-r--r--. 1 root freeit 0 May 4 08:27 abc |
当一个二进制文件(即命令)上应用了SUID后,任何人在执行该命令时,临时拥有命令拥有人的权限,只能应用在可执行文件上。
例1:创建用户user1,登录此用户,并在/tmp/test下使用mkdir命令创建目录gyh
[root@ freeit tmp]# mkdir test [root@ freeit tmp]# ll total 0 drwxr-xr-x. 2 root root 6 May 4 08:50 test //文件拥有者有rwx的权限 [root@ freeit tmp]# su user1 [user1@ freeit tmp]$ cd test/ [root@ freeit test]# ll /tmp total 0 drwxr-xr-x. 3 root root 16 May 4 08:53 test [user1@ freeit test]$ mkdir gyh mkdir: cannot create directory ‘gyh’: Permission denied //如上,没有创建的权限 |
例2:为mkdir赋予s权限,再次以同样方式创建
[root@ freeit ~]# whereis mkdir mkdir: /usr/bin/mkdir /usr/share/man/man1/mkdir.1.gz /usr/share/man/man1p/mkdir.1p.gz /usr/share/man/man2/mkdir.2.gz /usr/share/man/man3p/mkdir.3p.gz //查看二进制文件的位置 [root@ freeit ~]# ll /usr/bin/mkdir -rwxr-xr-x. 1 root root 79712 Jan 25 2014 /usr/bin/mkdir //查看二进制文件的权限,是可执行文件 [root@ freeit ~]# chmod u+s /usr/bin/mkdir [root@ freeit ~]# ll /usr/bin/mkdir -rwsr-xr-x. 1 root root 79712 Jan 25 2014 /usr/bin/mkdir [root@ freeit test]# su user1 [user1@ freeit test]$ pwd /tmp/test [user1@ freeit test]$ mkdir gyh [user1@ freeit test]$ ls gyh [user1@ freeit test]$ ll total 0 drwxrwxr-x. 2 root user1 6 May 4 08:53 gyh //创建成功 |
说明:
当未给mkdir这个二进制文件s权限前,文件只有所有者root有rwx权限,其他用户只有rx权限,不能在没有w权限的文件(/tmp/test对于其他用户没有w权限)下使用此命令创建目录。当给二进制文件s权限后,使用此命令的用户就临时拥有了root的权限,所以user1后来就可以在/tmp/test下创建目录。
当在一个二进制文件上应用了SGID后,任何人在执行此命令时临时拥有文件所属组的权限,同样也只能用在可执行文件上。如果在一个目录上应用了Sgid,那么任何人在该目录下创建的文件/目录的所属组会继承该目录的组
实验一:
例1:去除上个实验/usr/bin/mkdir的SUID权限,修改此文件的所属组权限为775,
[root@ freeit test]# chmod u-s /usr/bin/mkdir [root@ freeit test]# ll /usr/bin/mkdir -rwxr-xr-x. 1 root root 79712 Jan 25 2014 /usr/bin/mkdir [root@ freeit test]# chmod 775 /usr/bin/mkdir [root@ freeit test]# ll /usr/bin/mkdir -rwxrwxr-x. 1 root root 79712 Jan 25 2014 /usr/bin/mkdir //此时,文件所属组内的用户也能执行w权限,即在所属组为同一个组,并且具有rwx权限的目录下创建目录 |
例2:给test所属组rwx权限、/usr/bin/mkdir SGID权限,cd到/tmp/test目录下,切换到user1用户继续创建
[root@ freeit test]# chmod 775 /tmp/test/ [root@ freeit test]# ll /tmp/ total 0 drwxrwxr-x. 2 root root 6 May 4 09:03 test [root@ freeit test]# chmod g+s /usr/bin/mkdir [root@ freeit test]# ll /usr/bin/mkdir -rwxrwsr-x. 1 root root 79712 Jan 25 2014 /usr/bin/mkdir [root@ freeit test]# su user1 [user1@ freeit test]$ pwd /tmp/test [user1@ freeit test]$ mkdir gyh [user1@ freeit test]$ ll total 0 drwxrwxr-x. 2 user1 root 6 May 4 09:17 gyh //创建成功 |
说明:
给/usr/bin/mkdir&/tmp/test所属组root rwx权限前,我们是不能在/tmp/test下使用命令mkdir创建目录的。要同时赋予/usr/bin/mkdir以SGID权限方能创建成功。始初,由于其他用户没有在/tmp/test 下创建目录的权限,所以不能创建gyh目录。赋予SGID之后,user1使用mkdir命令,临时拥有了命令所属组的权限,在/tmp/test下具有rwx权限,所以能够创建成功。
实验二:
例1:删除上个实验所做的操作,创建user2用户,给/usr/bin/mkdir SUID权限。User1在/tmp下创建test目录,切换到user2,并在test下创建目录gyh,查看此时gyh的所属组
[root@ freeit tmp]# useradd user2 [root@ freeit tmp]# chmod u+s /usr/bin/mkdir //给SUID权限,就是为后面的user2创建目录做铺垫,让user2能够在user1创建的test目录下使用mkdir命令时临时拥有root的权限。本实验验证的是文件所属组的内容,所以给SUID无影响。 [root@ freeit tmp]# ll /usr/bin/mkdir -rwsr-xr-x. 1 root root 79712 Jan 25 2014 /usr/bin/mkdir
[root@ freeit tmp]# su user1 [user1@ freeit tmp]$ pwd /tmp [user1@ freeit tmp]$ mkdir test [user1@ freeit tmp]$ ll total 0 drwxrwxr-x. 2 user1 user1 6 May 4 09:44 test
[root@ freeit tmp]# su user2 [user2@ freeit tmp]$ cd test/ [user2@ freeit test]$ mkdir gyh [user2@ freeit test]$ ll total 0 drwxrwxr-x. 2 root user2 6 May 4 09:40 gyhuser1
//如上,此时其他用户在user1创建的目录test下创建的目录,文件所属组是创建者本身的组 |
例2:给目录/tmp/test SGID权限,然后user2继续在其下创建目录aaa,查看此时的所属组
[root@ freeit test]# chmod g+s /tmp/test/ [root@ freeit test]# ll /tmp/ total 0 drwxrwsr-x. 3 user1 user1 16 May 4 09:45 test [root@ freeit test]# su user2 [user2@ freeit test]$ mkdir aaa [user2@ freeit test]$ ll total 0 drwxrwsr-x. 2 root user1 6 May 4 09:50 aaa drwxrwxr-x. 2 root user2 6 May 4 09:45 gyh //如上,此时user2在目录下创建的目录的所属组继承了test的所属组 |
如果在一个目录上应用了sticky权限,那么该目录中的文件仅文件拥有者和root能删除
例1:查看/tmp的权限,默认是O+t的,具有sticky权限。然后登陆user1&user2,分别在/tmp下创建自己的文件,然后其中一个用户删除另一个的文件。验证能否删除。然后去掉/tmp的t权限,再次验证
[root@ freeit tmp]# su user1 [user1@ freeit tmp]$ mkdir user1 [user1@ freeit tmp]$ ll total 0 drwxrwxr-x. 2 user1 user1 6 May 4 09:55 user1 [root@ freeit tmp]# su user2 [user2@ freeit tmp]$ mkdir user2 [user2@ freeit tmp]$ ll total 0 drwxrwxr-x. 2 user1 user1 6 May 4 09:55 user1 drwxrwxr-x. 2 user2 user2 6 May 4 09:55 user2 [user2@ freeit tmp]$ rm -rf user1 rm: cannot remove ‘user1’: Operation not permitted //如上,因为/tmp具有o+t的权限,所以user2不能删除user1的文件。 ------------------------------------------去除/tmp的o+t权限再次实验--------------------------------------- [root@ freeit tmp]# chmod o-t /tmp/ [root@ freeit tmp]# ll / |grep tmp drwxrwxrwx. 4 root root 29 May 4 10:01 tmp [root@ freeit tmp]# su user2 [user2@ freeit tmp]$ rm -rf user1 [user2@ freeit tmp]$ ll total 0 drwxrwxr-x. 2 user2 user2 6 May 4 09:55 user2 //去除/tmp的o+t权限后,user2成功删除user1的文件 |
注:
前面我们说过,root为超级管理员,不论有没有权限都能执行操作,所以此处就不再验证root。
本文出自 “我就是天使” 博客,请务必保留此出处http://freeitgyh.blog.51cto.com/7297595/1771136
标签:linux7、用户、组
原文地址:http://freeitgyh.blog.51cto.com/7297595/1771136