用户管理,文件管理,文件权限,sudo权限下放
账号管理
切换用户
su student
和 su - 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 | # useradd -G 501 cherish2 |
修改用户的这些属性使用命令usermod
,在修改用户附加组时,需要注意:
usermod -G westos test
就是把用户test附加到westos组中,可使用id test
查看;usermod -G redhat test
就是把用户test又附加到redhat组中。但是此时用户test已经不属于westos了;- 若你想让用户test在保留原来附加组的情况下,继续附加到其他组,要使用-aG,如下:
1 | # usermod -aG redhat test |
-c:指定注释信息(不常用)
-d:指定用户家目录
1 | # useradd -d /mnt/test test |
- -md:移动用户家目录
1 | # usermod -md /test test |
这两种方式都可以,但是在使用useradd
时,用户是之前不存在的,使用usermod
时,是修改已经存在的用户的家目录,但是两者达到的效果是一样的。其实,对于其他参数来讲,它们两者的区别也就在于此而已。
- -s:指定所使用的shell
禁止用户的交互行为使用/sbin/nologin
,即其他用户不能su -
此用户
1 | # useradd -s /sbin/nologin test |
删除用户
命令:userdel
主要参数:
- -r:在删除用户时,将用户的家目录及家目录里面的文件,以及邮件池都删除。
如果不加-r
,/etc/passwd /etc/group
会发生相应变化,但是用户所对应的家目录不会被删除,当下次再创建此用户的时候,就会报错,home directory
和mailbox file
已经存在。
但是报错也不怕,我们只要手动的去删除此用户的家目录和对应的邮件池就好啦!
修改用户
命令:usermod
部分参数:
注:usermod的常用参数和useradd相似,前面学习过的,这里不再详解
-L:冻结用户(锁住),操作文件
/etc/shadow
。是在第二列即密码那一列前面加了一个!
。只是让密码失效了,没有让用户失效。(前提:已经给过用户密码,否则一直都是两个感叹号)
手动建立用户
useradd test
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 | touch filename |
使用vi/vim编译器,编译完之后保存
修改文件
修改文件(目录)名字
mv oldname newname
移动文件(目录)
mv oldpath newpath
删除文件
rm -fr filename/dirname
监控文件
1 | watch tail filename |
eg.
1 | watch tail /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 | chown owner.group filename/dirname |
eg.
1 | chown haha.haha /mnt/test |
文件权限的管理
基本权限
u | g | o |
---|---|---|
user | group | other |
r | w | x |
---|---|---|
4 | 2 | 1 |
读 | 写 | 执行 |
eg.
1 | chmod ugo-rwx file //000 |
特殊权限
特殊权限详解
Set uid, gid,sticky bit
一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.
如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid
, setgid
可以来改变这种设置.
setuid
: 设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd
. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root
权
限, 从而可以更改用户的密码.
setgid
: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.
sticky bit
: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于
该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件
但同时不能删除文件, 则可以对文件使用sticky bit
位. 设置该位后, 就算用户对目录
具有写权限, 也不能删除该文件.
下面说一下如何操作这些标志:
操作这些标志与操作文件权限的命令是一样的, 都是 chmod
. 有两种方法来操作,
(1).
1 | `chmod u+s temp` — 为temp文件加上setuid标志. (setuid 只对文件有效) |
(2).
采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如
4666, 2777等. 这一组八进制数字三位的意义如下,
abc
1 | a - setuid位, 如果该位为1, 则表示设置setuid |
设置完这些标志后, 可以用 ls -l
来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如
1 |
|
那么原来的执行标志x
到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x
, 则这些特殊标志显示为小写字母 (s, s, t)
. 否则, 显示为大写字母 (S, S, T)
这三个权限的数字位可以这么理解
1 |
|
所以,可以得出
1 |
|
常用操作
- 找出所有危险的目录(设置目录所有人可读写却没有设置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 | 0: 不设置特殊权限 |
红帽的安全umask
umask:权限的补码,文件,目录的默认权限,称之为权限掩码
新建目录的默认权限是umask 022 drwxr_xr_x
新建文件会在上面的基础上再减去一个111 -rw-r--r-- 644
病毒是一个文件,下载到你的电脑以后,内核会自动把文件的可执行权限去掉,即去掉所有的x
umask可以列出当前环境的umask
1 | umask |
/etc/profile
中的第一个umask是用户的umask,第2个umask是系统用户的(root也是系统用户),另外/etc/bashrc
和/etc/login.defs
里面也有umask这个参数
- 普通用户
新建目录权限777-002=775,新建文件权限775-111=664
1 | [lala@rhel7 ~]$ umask |
- 系统用户
新建目录权限777-022=755,新建文件权限755-111=644
1 | [root@rhel7 test]# umask |
【注】若要修改umask
,在上面提到的三个文件中直接修改,然后使用source
命令使之生效。
root用sudo下放权限
系统中有些命令只能用root
身份执行,普通用户不能执行。如果想让普通用户以root
身份来执行某些命令,可以用sudo来声明,所执行的命令是root下放的
eg.
virt-manager只有超级用户才可以执行成功
1 | [lala@rhel7 ~]$ virt-manager |
让lala用户输入root密码,才能使用这条命令,现在就需要root用户来下放权限给lala了。
第一步: 查看主机名,查看要执行的命令的绝对路径
1 | [lala@rhel7 ~]$ hostname |
第二步: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 | [root@rhel7 ~]# which 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 time
和modify time
改称指定的时间,不过change time
是以系统为准的。