用户管理,文件管理,文件权限,sudo权限下放

用户管理,文件管理,文件权限,sudo权限下放

账号管理

切换用户

su studentsu - student的区别

前者只是把用户切换到student,但是环境还没有切换到student的环境

注意:切换用户的时候最好要写su - student

用户的管理

添加用户

命令:useradd

部分参数详解:

  • -u: 指定UID。
1
# useradd -u 500 test
  • -g: 指定初始组GID可以写成-g 1001 (当然,这里的1001组必须存在),或者-g westos,若不指定用户所在组的话,就会默认创建一个和用户名相同的组。
1
# useradd -g 502 cherish1
  • -G: 指定附加组。表明用户不仅属于自己的初始组,还属于其他的组,即为其他组的组成员。
1
2
3
# useradd -G 501 cherish2
# id cherish2
uid=501(cherish2) gid=502(cherish2) groups=502(cherish2),501(cherish0)

修改用户的这些属性使用命令usermod,在修改用户附加组时,需要注意:

  1. usermod -G westos test就是把用户test附加到westos组中,可使用id test查看;
  2. usermod -G redhat test就是把用户test又附加到redhat组中。但是此时用户test已经不属于westos了;
  3. 若你想让用户test在保留原来附加组的情况下,继续附加到其他组,要使用-aG,如下:
1
# usermod -aG redhat test
  • -c:指定注释信息(不常用)

  • -d:指定用户家目录

1
# useradd -d /mnt/test test
  • -md:移动用户家目录
1
2
# usermod -md /test test
# useradd -md /lala lala

这两种方式都可以,但是在使用useradd时,用户是之前不存在的,使用usermod时,是修改已经存在的用户的家目录,但是两者达到的效果是一样的。其实,对于其他参数来讲,它们两者的区别也就在于此而已。

  • -s:指定所使用的shell

禁止用户的交互行为使用/sbin/nologin,即其他用户不能su -此用户

1
# useradd -s /sbin/nologin test

删除用户

命令:userdel

主要参数:

  • -r:在删除用户时,将用户的家目录及家目录里面的文件,以及邮件池都删除。

如果不加-r,/etc/passwd /etc/group会发生相应变化,但是用户所对应的家目录不会被删除,当下次再创建此用户的时候,就会报错,home directorymailbox file已经存在。

但是报错也不怕,我们只要手动的去删除此用户的家目录和对应的邮件池就好啦!

修改用户

命令:usermod

部分参数:

  • 注:usermod的常用参数和useradd相似,前面学习过的,这里不再详解

  • -L:冻结用户(锁住),操作文件/etc/shadow。是在第二列即密码那一列前面加了一个!。只是让密码失效了,没有让用户失效。(前提:已经给过用户密码,否则一直都是两个感叹号)

手动建立用户

  1. useradd test
  2. passwd test #若不给密码,则不能切换至此用户

注:此时你会发现/etc/shadow里面用户的第二个字段发生了变化。现在就可以登录啦!

【注意】

如果是使用修改/etc/passwd来添加用户,以及修改/etc/group /etc/shadow等,还得在home下创建家目录,最后,把/etc/skel的1所有文件拷贝到家目录下。这样bash的命令提示符才正常。

组的管理

创建组

命令:groupadd

常用参数:

  • -g:指定组号

    groupadd -g 2000 test
    

修改组

命令:groupmod

常用参数:

  • -g:修改组号
1
groupmod -g 3000 test

删除组

命令:groupdel

1
groupdel test

文件管理

创建文件

1
2
touch filename
mkdir dirname #创建目录

使用vi/vim编译器,编译完之后保存

修改文件

  • 修改文件(目录)名字

    mv oldname newname
    
  • 移动文件(目录)

    mv oldpath newpath
    

删除文件

rm -fr filename/dirname

监控文件

1
2
watch tail filename
tail -f filename

eg.

1
2
watch tail /etc/group
tail -f /etc/group

更改文件的拥有者和组

ls -lR /mnt/递归显示/mnt里面的内容

  • 更改文件的所属人
    1
    chown owner filename/dirname

eg.

1
chown haha /mnt/test
  • 更改文件的所属组
1
chgrp group filename/dirname

eg.

1
chgrp haha /mnt/test
  • 同时更改文件或目录的所属人和所属组
1
2
3
chown owner.group filename/dirname
或者
chown owner:group fielname/dirname

eg.

1
2
chown haha.haha /mnt/test
chown haha:haha /mnt/test

文件权限的管理

基本权限

u g o
user group other
r w x
4 2 1
执行

eg.

1
2
3
4
5
6
chmod ugo-rwx file			//000
chmod u+rw,g+rw,o+r file
chmod -r file //等同于ugo-r
chmod go-r file
chmod 754 file //rwxr-wr--
chmod 755 /mnt/test -R //递归式的更改目录权限

特殊权限

特殊权限详解

Set uid, gid,sticky bit

一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.

如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.

setuid: 设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root
限, 从而可以更改用户的密码.

setgid: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.

sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于

该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件

但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录

具有写权限, 也不能删除该文件.

下面说一下如何操作这些标志:

操作这些标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来操作,

(1).

1
2
3
4
5
`chmod u+s temp` 	— 为temp文件加上setuid标志. (setuid 只对文件有效)

`chmod g+s tempdir` — 为tempdir目录加上setgid标志 (setgid 只对目录有效)

`chmod o+t temp` — 为temp文件加上sticky标志 (sticky只对文件有效)

(2).

采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如

4666, 2777等. 这一组八进制数字三位的意义如下,

abc

1
2
3
4
5
a - setuid位, 如果该位为1, 则表示设置setuid

b - setgid位, 如果该位为1, 则表示设置setgid

c - sticky位, 如果该位为1, 则表示设置sticky

设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如

1
2
3
4
5
6

rwsrw-r– 表示有setuid标志

rwxrwsrw- 表示有setgid标志

rwxrw-rwt 表示有sticky标志

那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

这三个权限的数字位可以这么理解

1
2
3
4
5
6
7
8

[root@server3 test]# 1 1 1

[root@server3 test]# rw s rws rwt

[root@server3 test]#

[root@server3 test]# SUID SGID Sticky

所以,可以得出

1
2
3
4
5
6

chmod 4777是设置uid

chmod 2777是设置gid

chmod 1777是设置sticky
常用操作
  • 找出所有危险的目录(设置目录所有人可读写却没有设置sticky位的目录)

find / -perm -0007 -type d

  • 找出所有设置了suid的文件

find / -perm -4000 -type f

【补充】: (angelus)

  • SGID位,文件也是可以被设置为SGID的,比如一个可执行文件为赋予SGID,它就具有所有组的特权,任意存取所有组所能使用的系统资源,复制到拥有

  • SGID位目录的文件,只有在复制时加上-p参数,才能保留原来的组群设置

  • 还有sticky-bit权限,简单说就是文件的其他用户即使有写权限也无法删除.移动等,只能被文件所有者删除,移动等

  • 在系统中典型例子就是/tmp(系统临时文件目录)避免不守法用户恣意乱删其他用户放置的文件

  • SUID占用属主x(执行)位,SGID占用组x位,sticky-bit占用其他x位,

  • 如果该位有x权限,就用小写s,没有就用大写S

  • 用数值设定特殊权限,需要4位8进制数,第一个表示特殊权限,后三位表示基本权限

  • 只说第一位8进制代表权限

1
2
3
4
5
6
7
8
0: 不设置特殊权限 
1: 只设置sticky
2: 只设置SGID
3: 只设置SGID和sticky
4: 只设置SUID
5: 只设置SUID和sticky
6: 只设置SUID和SGID
7: 设置3种权限

红帽的安全umask

umask:权限的补码,文件,目录的默认权限,称之为权限掩码

新建目录的默认权限是umask 022 drwxr_xr_x

新建文件会在上面的基础上再减去一个111 -rw-r--r-- 644

病毒是一个文件,下载到你的电脑以后,内核会自动把文件的可执行权限去掉,即去掉所有的x

umask可以列出当前环境的umask

1
2
umask
0022

/etc/profile中的第一个umask是用户的umask,第2个umask是系统用户的(root也是系统用户),另外/etc/bashrc/etc/login.defs里面也有umask这个参数

  • 普通用户

新建目录权限777-002=775,新建文件权限775-111=664

1
2
3
4
5
6
7
8
[lala@rhel7 ~]$ umask
0002
[lala@rhel7 ~]$ mkdir dir
[lala@rhel7 ~]$ touch file
[lala@rhel7 ~]$ ll
total 0
drwxrwxr-x. 2 root root 6 Jan 24 22:30 dir
-rw-rw-r--. 1 root root 0 Jan 24 22:30 file
  • 系统用户

新建目录权限777-022=755,新建文件权限755-111=644

1
2
3
4
5
6
7
8
[root@rhel7 test]# umask
0022
[root@rhel7 test]# mkdir dir
[root@rhel7 test]# touch file
[root@rhel7 test]# ll
total 0
drwxr-xr-x. 2 root root 6 Jan 24 22:30 dir
-rw-r--r--. 1 root root 0 Jan 24 22:30 file

【注】若要修改umask,在上面提到的三个文件中直接修改,然后使用source命令使之生效。

root用sudo下放权限

系统中有些命令只能用root身份执行,普通用户不能执行。如果想让普通用户以root身份来执行某些命令,可以用sudo来声明,所执行的命令是root下放的

eg.

virt-manager只有超级用户才可以执行成功

1
[lala@rhel7 ~]$ virt-manager

让lala用户输入root密码,才能使用这条命令,现在就需要root用户来下放权限给lala了。

第一步: 查看主机名,查看要执行的命令的绝对路径

1
2
3
4
[lala@rhel7 ~]$ hostname
rhel7.example.com
[lala@rhel7 ~]$ which virt-manager
/usr/bin/virt-manager

第二步:root执行以下命令:visudo 来编辑下放权限的列表。

【注】:visudo 修改的是/etc/sudoers这个文件。也可以vim /etc/sudoers 。 两种方式都可以。最好用visudo 因为它会进行语法检查。

1
[root@rhel7 ~]# visudo

在文件里面加入一行:

lala rhel7.example.com=(root) NOPASSWD:/usr/bin/virt-manager

在文件里面的任意一行加上都可以,意思是lala这个用户可以在rhel7.example.com这个主机上以root的身份来执行virt-manager这条命令。不过这时候要输入lala的密码,如果连lala的密码都不想输入,则在命令前面加上NOPASSWD

第三步:lala就可以用root身份执行那条命令了

1
[lala@rhel7 ~]$ sudo virt-manager

【注】:如果想要撤销授权的话将/etc/sudoers里面加的那句删除(或注释)掉就好啦

补充

本节课用到命令

  • which

查看命令的绝对路径

1
2
[root@rhel7 ~]# which cd
/usr/bin/cd
  • ss -antple | grep 80
  • systemctl restart httpd
  • id username
  • gurb-md5-cyrpt #加密
  • yum whatprovides */grub-md5*
  • /etc/issue是开机时会读取,显示给用户的。/etc/passwd /etc/group /etc/shadow /etc/skel/.*
  • touch -t 09280710 file

如果file是已经存在的文件,会改变文件的modify time。如果file不存在会创建,并把access timemodify time改称指定的时间,不过change time是以系统为准的。