将一个原来运行在root环境下的程序运行在普通用户的环境下,需要了解用户,权限,环境变量,一些知识。

需要学习的内容 用户,组,权限,环境变量

用户

1.新建用户 useradd

———————————-
-g 属组
-u 设置uid
-m 创建家目录
-M 没有家目录
-G 指定属于多个组
-s 指定登录shell
-d 指定家目录
-c 注释
-D 改变它默认的属性
-e 指定的日期是帐号失效的日期,
——————————————————
useradd emsadm
passwd emsadm Dbadmin@231
创建成功后再home目录下自动创建一个 emsadm的文件夹
可以很明显的看到,emsadm和root用户的权限是不同的。
image.png

1.1新建用户同时加上组权限

useradd -g 组名 用户名

2.给emsadm加上root的权限:

①修改 /etc/sudoers 文件,找到下面一行,把前面的注释(#)去掉
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
然后修改用户,使其属于root组(wheel),命令如下:
#usermod -g root tommy
修改完毕,现在可以用tommy帐号登录,然后用命令 su – ,即可获得root权限进行操作。

②修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tommy ALL=(ALL) ALL
修改完毕,现在可以用tommy帐号登录,然后用命令 sudo – ,即可获得root权限进行操作。
修改这个/etc/sudoers 的时候会提示是文件是只读的没有权限,需要给它加权限
chmod 777 /etc/sudoers
但最后需要把权限改回来。
不然切换用户会报错,原来的权限是
chmod 0440 /etc/sudoers

  1. [root@kylin236 /home 16:52:33]# chmod 777 /etc/sudoers
  2. [root@kylin236 /home 16:59:37]# sudo emsadm
  3. sudo: /etc/sudoers 可被任何人写
  4. sudo: 没有找到有效的 sudoers 资源,退出
  5. sudo: 无法初始化策略插件
  6. [root@kylin236 /home 16:59:45]# chmod 0440 /etc/sudoers
  7. [root@kylin236 /home 17:00:46]# ll -l /etc/sudoers
  8. -r--r-----. 1 root root 4571 12 21 15:03 /etc/sudoers

修改 /etc/passwd 文件,找到如下行,把用户ID修改为 0 ,如下所示:
tommy:x:0:33:tommy:/data/webroot:/bin/bash
======================================================================

3.修改用户: usermod

——————————————-
usermod 参数 用户名
-c:修改用户帐号的备注文字。
-d:修改用户登入时的目录。
-e:修改帐号的有效期限。
-f: 改在密码过期后多少天即关闭该帐号。
-g:修改用户所属的群组。
-G:修改用户所属的附加群组。
-l:修改用户帐号名称。
-L:锁定用户密码,使密码无效。
-s:修改用户登入后所使用的shell。
-u:修改用户ID。
-U:解除密码锁定。
———————————————-
usermod -g 组名 用户名 修改用户的组名

4.删除用户: userdel

关闭所有 emsadm正在登陆的窗口,正在使用的进程
userdel emsadm
常用的选项是-r,它的作用是把用户的家目录一起删除。
userdel -r emsadm

5.查看用户: who、w,id

who、w,id 输入就可以显示 id要再找例子贴近代码框里

  1. [root@kylin236 /opt/goldwind 08:45:17]# w
  2. 08:45:23 up 17:30, 2 users, load average: 2.07, 2.05, 2.05
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. root pts/0 10.80.26.72 15 3.00s 0.43s 0.00s w
  5. root pts/2 10.80.26.72 15 17:18m 0.09s 0.09s -bash
  6. [root@kylin236 /opt/goldwind 08:45:23]# who
  7. root pts/0 2020-12-21 15:16 (10.80.26.72)
  8. root pts/2 2020-12-21 15:19 (10.80.26.72)
  9. [root@kylin236 /opt/goldwind 08:45:35]#

6.切换用户

权限高往权限低的用户切换不需要输入密码,反过来需要输入密码
返回之前的用户用exit,这个有待实验

组相关

1.创建用户组

groupadd 参数 用户组名
-g:指定新建用户组的gid;
-r:创建系统工作组,系统用户的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。
groupadd -g 101nl

2.修改组

groupmod 参数 用户组名
groupmod -g 356 -n bqh1 nl
-g: GID 为用户组指定新的组标识号。
-o:与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n:新用户组 将用户组的名字改为新名字

3.查看组

1.当前用户组里有哪些用户
groups root

  1. [root@kylin236 /home 17:06:11]# groups root
  2. root : root rradmin

查看当前用户组
groups

  1. [root@kylin236 /home 17:00:54]# groups
  2. root rradmin

.查看id
id root

  1. [root@kylin236 /home 17:06:38]# id root
  2. uid=0(root) gid=0(root) 组=0(root),1003(rradmin)

4.查看组文件

  1. 三种查看文件的方式:
  2. more /etc/group
  3. cat /etc/group
  4. cat /etc/group|more
  5. root:x:0:
  6. ...
  7. sysadm:x:1000:
  8. secadm:x:1001:
  9. audadm:x:1002:
  10. rradmin:x:1003:root
  11. emsadm:x:1005:

4.更改文件的用户和组权限

  1.  -c 显示更改的部分的信息<br />    -f 忽略错误信息<br />    -h 修复符号链接<br />    -R 处理指定目录以及其子目录下的所有文件<br />    -v 显示详细的处理信息

chgrp

chgrp只能更改文件的属组
chgrp root XX文件
chgrp -R root XX文件

chown

更改文件的用户和组的权限
chown root:root XX文件
更改文件的组权限
chown :root XX文件

更改文件的拥有者权限
带不带冒号效果都一样
chown root: XX文件
chown ems XX文件

更改指定目录以及其子目录下的所有文件包括子目录的拥有者和群组
chown -R -v root:mail test6

更改指定目录以及其子目录下的所有文件包括子目录的拥有者
chwon -R root kkk

默认情况下,当一个用户创建一个文件后,这个文件的所在组就是该用户所在的组

5.删除组

groupdel

groupdel 用户名
groupdel nl

读写执行rwx权限

查看权限 ls -l

文件的类型
- 表示普通文件
d 表示目录
l 表示软连接
c 表示字符设备 键盘,鼠标
b 块文件,硬盘
权限和用户组之间的数字
如果是1 表示这个文件是硬连接
如果是目录,则表示这个目录下的子目录有多少个
月份前面的是大小,单位是字节
对于文件来说,就是文件本身的大小
对于目录来说,就是目录本身占用的空间大小,目录本身对于linux来说也是一个文件
—————————————
每三位分别对应一个,前三位对应user,中间三位对应group,最后三位对应other
user是文件所有者
group是与文件所有者的同一组的用户
other是不与文件所有者同组的其他用户
———————————————————
u 代表所有者(user)
g 代表所有者所在的组群(group)
o 代表其他人,但不是u和g (other)
a 代表全部的人,也就是包括u,g和o
————————————-

r—权重4 可读
w-权重2 可写
x-权重1 可执行 execute [ˈeksɪkjuːt]
7=4+2+1,即为有rwx权限。
drwxrwxrwx 777
———————————

r权限表示可读:

对于文件,就是能够读取文件中的数据
对于目录而言,目录中的数据就是目录下面的文件或者目录,就是能够看到这个目录下面的内容

w权限表示可写:

对于文件,就是能够在文件里写入、删除数据
对于目录,就是能够在目录内创建+删除+重命名目录

x权限表示可执行:

对于文件,就是说明这个文件可以运行,
对于目录,特别注意,x对于目录表示能够进入这个目录,就是能够通过cd进入目录。所以,一般目录默认都是具有x权限的,而文件一般则没有x权限。
权限的开头:文件是-,文件夹是d
-rwx———:等于数字表示700。
drwx———:等于数字表示700。
drwx—x—x:等于数字表示711
drwxr-xr-x 表示755 读法是 d rwx r-x r-x
image.png

chmod修改权限:

使用字母 ugoa:

u表示所有者,g表示所有组,O表示其他人, a表示所有人 (ugo的总和)
根据ugo,a字母来加权限:

  //表示添加用户和组群和其他人的所有权限
chmod ugo+rwx Debug.sh == ** chmod 777 Debug.sh ==** chmod a+rwx Debug.sh
// 给所有用户加上读的权限
chmod a+r Debug.sh

  1. [root@kylin236 /opt/goldwind/EMS 10:27:11]# chmod a+rwx Debug.sh
  2. [root@kylin236 /opt/goldwind/EMS 10:27:17]# ll -l
  3. -rwxrwxrwx 1 1003 root 205 12 18 13:34 Debug.sh
  4. [root@kylin236 /opt/goldwind/EMS 10:26:46]# chmod ugo+rwx Debug.sh
  5. [root@kylin236 /opt/goldwind/EMS 10:26:56]# ll -l
  6. -rwxrwxrwx 1 1003 root 205 12 18 13:34 Debug.sh
  7. [root@kylin236 /opt/goldwind/EMS 10:26:59]# chmod ugo-rwx Debug.sh
  8. [root@kylin236 /opt/goldwind/EMS 10:33:17]# ll -l
  9. ---------- 1 1003 root 205 12 18 13:34 Debug.sh

也可以用 chmod u=rwx,g=rx,o=rx 用等号表示加权限
chmod u=rw,g=rwx,o=rx 和上一条相比,用户减去了执行权限,组多了写的权限
chmod u-x,g+w 文件名

使用数字 rwx 421来看

chmod 755 Debug.sh 就是 user—>rwx,group—>rx,other—>rx user可以读写执行
设置700就是user—>rwx,group—>_
,other—>_ user可以读写执行
设置400就是user—>r,group—>_,other—>_ 只读文件
设置100就是user—>x,group—>_,other—>_ user只可以读

  1. 降权 ugo都设为0
  2. [root@kylin236 /opt/goldwind/EMS 10:25:43]# chmod 000 Debug.sh
  3. [root@kylin236 /opt/goldwind/EMS 10:26:19]# ll -l
  4. ---------- 1 1003 root 205 12 18 13:34 Debug.sh

也可以遍历更改权限
chmod -R 744 /EMS 将EMS目录与其中的文件和子目录的权限都设置为744

umask权限的计算和应用

umask权限是用来计算文件和文件夹默认权限用的
文件的最大默认权限是666,-rwrwrw-,
文件夹最大默认权限是777,rdwxrwxrwx
也就是但新建文件后默认权限是不带执行权限的。
所以如果 系统的umask默认权限是022
那么 对于文件来说
666-022=644 -rw_r__r

对于文件夹来说
drwxrwxrwx 减 d___w—w等于 drwx-r-xr-x也就是755

如果umask权限是033,计算文件的默认权限不是简单的666-033,而是要用rwx来计算
-rwrwrw- 减 -__-wx_wx 等于 rw_rr
rw-wx=r, 空减x是负的x,没有负的执行权限,所以最终结果要用rwx来计算才是正确的。