用户
Linux系统是一个多用户多任务的分时操作系统,用户可以属于一个或多个组方便系统管理员控制用户权限,默认有一个root管理员组并且root账户属于该组。可以使用logout登出当前用户账户。
查看用户信息
1. id查看用户信息
id [选项] [用户]
- 默认打印当前用户信息,返回用户号(uid)、组号(gid)、所属组名
- 用户可以通过ID或用户名指定,优先会查找用户名,可以使用+ UID形式让命令直接查找ID
- -u 仅打印用户ID
- -g 仅打印组ID
- -G 打印组ID和附加组ID
- -n 在指定了u、g、G选项时,打印对应的用户名或组名,而不是ID号
- -r 在指定了u、g、G选项时,打印有效ID号,而不是实际ID
- 有效ID:当用户使用su命令切换身份,或使用sudo执行命令时,用户的当前有效ID会修改为对应用户的ID,以便于临时获得其他用户的权限
- 实际ID:用户在创建账户时分配的真实ID
1. logname查看当前登录用户名
logname 查看用户的原始登录用户名,如果用户使用su命令等切换用户身份,也不会修改该命令的输出,该命令的输出值通常来自/var/run/utmp或/etc/utmp文件
2. whoami查看当前有效用户名
whoami查看当前的有效用户名,使用su、sudo等命令切换了用户身份时,该命令的输出会随着修改
3. who查看当前已登录用户的具体信息
主要用来查看哪些用户正在使用系统,以及他们登录时使用的终端设备、IP 地址和登录时间等
who [选项] [文件名] [am i]
- 默认打印所有已登录用户的信息,包括登录用户名、登录终端(tty表示本地登录终端,pts一般为远程登录)、登陆时间(如果是远程登录显示IP地址,如果是本地登录显示为(:0))
- 如果添加了am i参数,则只打印当前会话的用户信息
- 该命令的输出值默认来自/var/run/utmp或/etc/utmp文件,用户可以手动指定其他文件,如 /var/log/wtmp
- -a 显示所有信息,包括包括运行级别、系统启动时间等
- -b 显示上次系统启动(引导)的日期和时间
- -d 显示已终止的记录(登录结束的会话),即状态为 DEAD_PROCESS 的记录
- -H 显示输出结果时,首行添加该列的标题,解释该列是什么信息
- -l 只显示等待登录的进程记录,即 LOGIN_PROCESS 类型的记录
- -m 只打印当前会话的用户信息,等价于who am i
- -q 只显示已登录的用户名和总用户数,不显示其他详细信息
- -r 显示当前系统的运行级别(runlevel)
- -s 简单模式,只显示用户名、终端和登录时间(默认)
- -T 显示每个用户终端是否允许接收消息的状态(+表示允许接收消息,-表示不允许接收消息,?表示未知)
- -t 显示最后一次系统时间变化(通常是更改系统时间或重新启动时)
- -u 显示已登录用户的详细信息,包括空闲时间、登录进程 ID 以及会话进程的启动时间,.表示用户在最后一分钟处于活动状态,old表示用户已空闲超过 24 小时
- --lookup 显示远程登录用户的IP地址
4. w查看用户详细登录信息
该命令来源于procps-ng包,它会返回更详细的登录信息,包括当前系统上所有用户及其活动的进程
w
5. users查看当前已登录的所有用户
users [文件名]
- 命令会列出当前登录了系统的所有用户的用户名
- 该命令的输出值通常来自/var/run/utmp或/etc/utmp文件,用户可以手动指定其他文件,如 /var/log/wtmp
6. pinky打印有关用户的信息
该命令的输出信息比上述命令详细,输出包括主目录、默认shell、
pinky [选项] [用户名]
- -s 以短格式输出信息,显示用户名、终端、登录时间和远程主机名(默认)
- -w 以短格式打印时省略用户的真实姓名
- -i 以短格式打印时,不显示用户真实姓名和远程主机
- -q 以短格式打印时,省略用户的全名、远程主机和空闲时间
- -f 以短格式打印时,不显示首行的标题
- -l 生成长格式信息,必须指定至少一个用户名,输出信息包括用户名、用户真实姓名、用户主目录、shell,如果用户指定了,通常还可能包含远程主机、登录时间、空闲时间、邮件状态和计划
- -b 以长格式输出信息时,省略用户主目录和shell
- -h 以长格式打印时省略用户的工程文件
- -p 以长格式打印时省略用户的计划文件
用户管理
1. useradd添加用户
useradd [选项] 用户名
会在/home 目录下默认生成一个以用户名命名的文件夹作为用户的主文件夹,并且会生成一个与用户名同名的用户组
- -c 注释 为用户添加一段注释性描述
- -d /路径/目录名 自定义用户的主目录,即不使用与用户名同名的默认目录,如果该目录不存在,则可以同时使用-m参数来新建文件夹指定为主目录
- -g 用户组 指定用户所属的初始用户组
- -G 用户组,用户组 指定用户所属的附加用户组
- -s Shell文件 指定用户的登录Shell
- -u 用户号 指定用户的用户号,可以添加-o选项来重复使用与其他用户相同的标识号
- -D 查看添加用户时的默认设置值(如默认shell,用户密码过期是否禁用账户等)
- -e YYYY-MM-DD 指定账户过期日期
- -f 值 指定该账户密码过期多少天后禁用账户,0表示一过期就禁用,1表示禁用该功能示例: # useradd yg 新增用户yg,同时会新建一个组yg # useradd -g gumu lmc 新增用户lmc,并且将lmc添加到gumu组 # useradd -d /somedir/user2dir -m user2 新建用户user2,在 /somedir 文件夹下新建user2dir并将其主目录指定为user2dir (somedir文件夹必须存在,无法用上述命令直接新建)
2. userdel删除用户
只能在root账户下删除用户
- userdel 用户名 删除用户但保留用户的主目录(避免用户主目录有其他程序调用的重要数据)
- userdel -r 用户名 删除用户且不保留用户主目录
3.usermod修改用户信息
usermod [选项] 用户名
- -l 修改用户登录名
- -u UID 修改用户UID
- -c 用户说明 修改用户说明信息
- -G 组名 修改用户附加组
- -L 临时锁定用户
- -U 解锁用户
用户密码管理
1.passwd添加/修改密码
passwd [选项] [用户名]
不写用户名则会修改当前账户密码,输入密码时不会显示在终端上,选项:
- -l 锁定口令,禁止用户自行修改(参数为小写L)
- -u 解锁口令,允许用户自行修改
- -S 显示密码信息
- -d 删除账户口令
- -f 强迫用户下次登录时必须修改口令
- -x 指定口令最长存活期
- -k 保留即将过期的用户在期满后能仍能使用
- --stdin 允许从管道中输入口令
2.chage修改用户密码状态
chage [选项] 用户名
- -l 列出用户详细密码状态
- -d 日期 修改密码最后一次修改日期(修改shadow文件字段3)
- -m 天数 两次密码修改间隔(字段4)
- -M 天数 密码有效期(字段5)
- -W 天数 密码过期前警告天数(字段6)
- -I 天数 密码过期后宽限天数(字段7)
- -E 日期 账号失效时间(字段8)使用: # chage -d 0 user1 强制用户user1下次登录修改密码
su切换用户
su [选项] 用户名
从权限高的账户切换到权限低的用户不需要输入密码,反之需要。切换完用户后,可通过 exit 命令返回原来的用户
- 如果不指定用户,默认切换到root
- -或-l或--login切换用户时会以该用户登录shell方式启动新shell,这会加载.bash_profile、.bashrc等配置文件,并且加载新用户的环境变量,连带切换用户环境,如:家目录,用户邮箱等
- -c 命令:仅使用指定用户身份执行一次-c后的命令,执行完毕后切换回原用户身份
- -s shell路径:切换用户后使用指定的shell,而不使用passwd文件指定的用户默认shell
- -m或-p: 保留当前用户的环境变量,而不是使用目标用户的环境变量
- -w 变量1 变量2…:切换用户时,保留这些变量
- -g 用户组ID:切换用户并加入到指定的用户组
- -G 用户组ID1,用户组ID2…:切换用户并加入到多个指定的用户组
用户的相关文件
1. 用户的信息文件
文件位于/etc/passwd,每一行代表一个用户,并且以
- 密码标识中,有 X 表示用户有密码,用户登录时linux会前往/etc/shadow查找密码
- 用户UID:0 为超级管理员用户,1-999为系统用户,系统用户为ftp等由linux调用的用户,无法登录,修改可能会导致系统无法启动,1000及1000以上为普通用户(旧版本的linux可能1-500为系统用户)
- 用户说明可以为空
- 用户登录shell一般默认为/bin/bash,系统用户为/sbin/nologin,可以将普通用户的shell更改为/sbin/nologin来禁止用户登录
2. 用户的密码文件
文件位于/etc/shadow,保存了加密后的用户密码等信息,每一行代表一个用户,如:
- 字段一:用户名
- 字段二:加密后的密码,如果为”!”表示该用户的密码被禁用,无法使用密码登录(但仍可能可以通过密钥等方式登录),如果为”*”表示没有密码,常用于系统用户
- 字段三:密码最后一次修改日期,以1970年1月1日作为标准时间,每天+1
- 字段四:允许的两次密码修改间隔,如:10为只允许每10天修改一次密码
- 字段五:密码有效期,多少天后必须修改密码
- 字段六:密码到期提前警告时间
- 字段七:密码到期后仍然可使用时间,如:3为还可以使用3天,其中0代表到期立马失效,禁用账户,-1代表到期后仍然能永久使用
- 字段八:账号失效时间,使用时间戳(到期时间与1970-1-1的间隔天数)表示
- 字段九:保留字段(未使用)
3. 用户的邮箱文件
文件位于/var/spool/mail/用户名/,Linux用户可以相互发送内部邮件
4. 用户模板目录
文件位于/etc/skel/,用于制作一个模板文件,在新注册用户时会在用户家目录下自动生成该文件。如:给每个账户生成一个用户操作手册。
用户组
用户组管理
用户组方便系统对同一类型的用户进行管理,对用户组的修改实际上就是对/etc/group文件的更新。
1. 增加组
groupadd [选项] 组名
选项:
- -g GID 指定新用户组的组标识号(GID)
- -o 一般与-g参数同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
2.修改用户组
groupmod [选项] 组名
- -g GID 修改组ID
- -n 新组名 修改组名
3. 删除用户组
groupdel 组名
如果组中有初始用户,该组无法删除(以避免用户不属于任何一个组,想删除该组可以先删除该初始用户的账户),若组中都为附加用户则可以删除。
4. 把用户添加入组或从组中删除
gpasswd 必选参数 组名
- -a 用户名 把用户加入组中
- -d 用户名 把用户从组中删除
5.查看指定用户所在组
groups [用户名]
- 默认查看当前用户,等价于id -Gn命令
用户组的配置文件
1. 用户组的信息文件
组信息文件位于/etc/group,信息格式为:
2. 组密码文件
文件位于/etc/gshadow,密码文件书写格式为:
文件与目录权限管理
以下命令在指定用户、用户组时,可以使用用户名(组名),也可以使用用户ID(组GID)
权限管理中的参数
符号 | 含义 | 对文件 | 对目录 |
---|---|---|---|
r | 读权限 | 可以查看文件内容 | 可以列出目录中的文件,查看目录中文件的详细信息 |
w | 写权限 | 可以修改文件内容 | 可以在目录中创建、删除、重命名文件 |
x | 执行权限 | 可以执行文件 | 可以进入目录(包括使用cd命令进入目录,或通过路径/path/dir1/file造访目录),允许通过路径操作目录中的文件 |
- | 无权限 | 无权限 | 无权限 |
- 删除某个文件需要对包含该文件的父目录拥有w权限,对文件拥有w权限只能修改文件内容而不能进行删除
- 许多命令需要通过路径来操作目录中的文件,因此往往需要同时拥有对目录的w和x权限才能完成操作
递归选项-R与参数
以下命令都可以添加-R选项进行递归操作,该选项会对目录下的所有文件都进行递归处理,如果递归时遇到了软链接,而该软链接又指向了另外一个目录,是否对软链接指向的目录也进行遍历取决于以下选项:
- -p 不遍历任何软链接指向的目录(默认)
- -H 只遍历在命令行中显式指定的链接文件所指向的目录
- -L 遍历所有链接文件指向的目录,无论是否在命令行中指定
chown更改文件所有者(change file ownership)
chown[选项] [用户] 文件或目录1 文件或目录2…
- 用户值可以写为用户:组形式,其中用户、冒号、组都可以只指定其中某一部分:
- 如果只指定了用户(如user1),则将修改这些文件的所有者为指定用户
- 如果同时指定了用户与组(如user1:group1),则将同时修改文件的所有者和所属组
- 如果指定了用户并添加了冒号(如user1:),则文件所有者修改为该用户,所属组修改为该用户的默认登录组
- 如果指定了组并且有冒号(如:group1),则只修改文件所属组,功能和chgrp命令相同
- 如果只指定了冒号(:),则不进行任何修改
- -R 以递归方式修改目录和目录下所有文件的所有者
- -c 仅打印修改的部分,在指定了多个文件时,部分文件修改前后所有者一样,则不会打印这部分消息
- -f 静默模式,通常用于指定多个文件时,不打印某个文件无法修改所有权时的错误信息
- -v 详细输出每个信息
- --dereference 如果文件为软链接文件,则修改其指向的源文件或目录的所有者,而不是软链接文件本身(默认)
- -h 如果文件为软链接文件,则修改软链接文件本身的所有者,而不是链接指向的源文件或目录
- --reference=文件名R:将文件的所有者和组修改为与文件R相同的用户和组,如果文件R是软链接,则引用其源文件的用户和组,而不是链接文件本身
- --from=owner1:如果文件当前属于owner1,执行修改操作,如果文件当前属于其他用户,则不修改
- -H、-L、-p选项参考通用选项
只有文件所有者用户和root用户才能更改文件的所有者属性
chgrp更改文件所属组(change file group ownership)
默认情况下,文件的所属组是文件所在目录,该目录的所属组,文件创建时,所属组将设置为和父目录相同的组
chgrp [选项] [用户组] 文件或目录1 文件或目录2…
- -R 以递归方式修改目录和目录下所有文件的所属组
- -c 仅打印修改的部分,在指定了多个文件时,部分文件修改前后所属组一样,则不会打印这部分消息
- -f 静默模式,通常用于指定多个文件时,不打印某个文件无法修改所属组时的错误信息
- -v 详细输出每个信息
- --dereference 如果文件为软链接文件,则修改其指向的源文件或目录的属性,而不是软链接文件本身(默认)
- -h 如果文件为软链接文件,则修改软链接文件本身的所属组,而不是链接指向的源文件或目录
- --from=owner1:如果文件当前属于owner1,执行修改操作,如果文件当前属于其他用户,则不修改
- -H、-L、-p选项参考通用选项
只有文件所有者、root用户以及拥有sudo权限、ACL权限的用户才能更改文件所属组
chmod更改权限(change the permissions mode of a file)
chmod [选项] 用户操作权限 文件名或目录名
chmod [选项] 权限值 文件名或目录名
- 只有root用户与文件所有者才能修改文件的权限
- -R 递归修改,修改目录及其所有子文件的权限
- -c 仅打印修改的部分,在指定了多个文件时,部分文件修改前权限一样,则不会打印这部分消息
- --dereference 如果文件为软链接文件,则修改其指向的源文件或目录的权限,而不是软链接文件本身的权限(默认)
- -h 如果文件为软链接文件,则修改软链接文件本身的权限,而不是链接指向的源文件或目录
- -f 静默模式,通常用于指定多个文件时,不打印某个文件无法修改其权限时的错误信息
- -v 详细输出每个信息
- --reference=文件名R:将文件权限修改为与文件R相同,如果文件R是软链接,则引用其源文件的权限,而不是链接文件本身
- -H、-L、-p选项参考通用选项
以符号方式指定权限与用户
chmod命令接受通过符号来指定用户和权限,该符号参数的组成为:用户操作权限
- u为文件所有者,g为文件所属组,o为其他用户,a为所有用户(等价于ugo组合)
- +为添加权限,-为取消权限,=为修改权限为等号所指(如果等号右边为空则表示删除其所有rwx权限,如:og=等价于og-rwx)
- r为读权限,w为写权限,x为执行权限,s为SetUID或setGID权限(为u用户添加s权限即添加SetUID权限,为g用户组添加s权限即添加SetGID权限),t为粘着位(Sticky BIT)权限
- X为条件性执行权限,X权限符只会为目录或已有执行权限的文件设置执行权限。该符号用于在批量或递归赋予x权限时,如果为所有文件都添加x权限会导致系统会将这些文件都视为可执行文件,即便他们无法执行,这些文件后续也可能会被恶意或误改为实际可执行文件(比如注入恶意代码),从而带来安全风险。X权限符只会为目录或原本就拥有x权限的文件添加可执行权限,对于原本就拥有x权限的文件而言,使用X再次添加可执行权限无任何意义,只是用来避免为普通文件也添加可执行权限,对于目录,该权限符可以用来批量为目录添加x权限,方便用户获得进入目录以及使用路径的权限。
- 同时修改ugoa中的多个可以使用,号分隔
以权限值方式为用户指定权限
chmod命令也接受权限值作为指定用户权限的参数,权限值通常为3位或4位八进制的权限值:[特殊权限][所有者权限][所属组权限][其他用户权限],特殊权限不需要时可以省略,只写3位权限值
文件所有者、所属组、其他用户的权限值组成为:
- r 值为4
- w 值为2
- x 值为1
- rwx值为7,rw-值为6(4+2),r-x值为5(4+1),依此类推
特殊权限的权限值组成为:
- setUID 值为4
- setGID 值为2
- Sticky Bit值为1
- SetUID+SetGID+StickyBit 值为7,SetUID+SetGID值为6,依此类推
umask更改新建文件时的默认权限设置(the user file-creation mask)
- umask -S 显示新建目录时权限的默认设置
- umask 显示默认权限值
- umask 权限值 修改默认权限
文件的umask值代表了给与该文件的默认权限,但它只是个掩码,它会屏蔽掉不想授予该安全级别的权限,实际赋给权限时需要进行一定的异或运算(对于值来说可视为减法运算)
特殊权限
这里的特殊权限指除了读、写、执行外,为了方便文件共享设计的一些额外特殊控制权限,包括三种:SUID、SGID、粘着位权限,与读写执行类似,它们的八进制权限值分别为4、2、1,即1代表仅增加/减少粘着位权限,3代表同时增加/减少粘着位权限和SGID权限,依此类推。
1. SetUID权限
SUID权限只用于可执行的脚本文件、命令文件等,它指定用户在执行该文件时,是以文件所有者的身份执行而非当前用户来执行。这意味着用户可以执行特定程序并且具有该程序所有者的权限,而不是当前用户的权限,程序运行完毕后会收回所有者身份。进程的用户ID也将设置为该文件所有者的ID,而非启动该进程的用户ID。
对于目录,在该目录中创建文件时,文件的所有者将被设置为与目录所有者相同的用户,无论该文件是谁创建的。
该权限通常用于需要以特定用户的权限来执行的程序,例如系统管理工具或安全敏感的程序,如:普通用户对 /etc/shadow 文件的权限为 0 ,即无法查看无法修改,但通过执行passwd命令,普通用户会获得临时的所有者即root权限,可以修改密码。
- 只有可执行的二进制程序才能设置SUID权限
- 要求命令执行者要对该程序拥有x(执行)权限
- 命令执行者在运行该程序时会临时获得文件所有者身份
- SUID权限只在该程序执行时有效,程序执行完毕权限失效
设置SUID权限
4代表SUID
- chmod 4755 文件名 755为权限值可任意,但要保证用户有x权限
- chmod u+s 文件名
取消SUID权限
chmod 755 文件名
chmod u-s 文件名
2. SetGID权限
SGID权限常用于目录,一般用于在大范围环境中与人共享文档。当一个目录被设置了SGID权限后,该目录内所有新建的文件和子目录将继承该目录的所属组,而不再是创建者的所属组。因此SGID权限通常用于需要多个用户共享访问的目录,以确保目录内的文件和子目录都属于同一个特定组,让所有用户共享相同的所属组,确保文件和目录的一致性和权限的控制
对文件
- 只有可执行的二进制程序才能设置SGID权限
- 要求命令执行者要对该程序拥有x(执行)权限
- 命令执行者在运行该程序时,组身份会临时升为文件所属组身份
- 进程的组ID将设置为文件所属组的组ID,而不是启动该进程用户的组ID
- SGID权限只在该程序执行时有效,程序执行完毕权限失效
对目录
- 要求用户必须拥有此目录的 r 和 x 权限
- 普通用户进入该目录时,用户的组会升为此目录的所属组
- 如果用户对目录有w权限,新建文件的默认组 将变为目录的所属组,而非创建者的所属组
设置SGID权限
2代表SGID
- chmod 2755 文件名 755为权限值可任意,若为文件要保证拥有x权限,为目录则拥有r和x权限
- chmod g+s 文件名
取消SGID权限
chmod 755 文件名
chmod g-s 文件名
3. Sticky BIT(粘着位权限)
- 只对目录有效
- 要求用户对目录拥有w和x权限
- 没有设置粘着位权限时,用户拥有w权限后可以删除目录下的所有文件,包括其他用户创建的文件。设置粘着位后,用户只能删除自己创建的文件,root用户不受此规则影响
设置SBIT权限
1代表SBID
- chmod 1755 目录名 755为权限值可任意,要保证用户拥有w和x权限
- chmod o+t 目录名
取消SBIT权限
chmod 755 目录名
chmod o-t 目录名
ACL权限
ACL权限用于给文件所有者(u)、所属组(g)、其他用户(o)以外的用户提供权限
查看ACL权限
getfacl 文件名
设置mask权限
mask权限用于指定最大的权限,防止给与用户ACL权限时权限过大。用户最终得到的权限是ACL权限于mask权限相与以后得到的权限。
setfacl -m m:组名:权限 文件名
设置ACL权限
setfacl 参数 文件名
- -m 设定ACL权限
- -x 删除指定ACL权限
- -b 删除文件所有ACL权限
- -d 设定默认ACL权限
- -k 删除默认ACL权限
- -R 递归设置ACL权限
1. 设置ACL权限
- setfacl -m u:用户名:权限 文件名给用户设置ACL权限
- setfacl -m u:用户名:权限 -R 文件名递归设置,给用户设置目录下所有子文件的ACL权限
- setfacl -m g:组名:权限 文件名给组设置ACL权限
- setfacl -m g:组名:权限 -R 文件名递归设置,给组设置目录下所有子文件的ACL权限示例: setfacl -m u:lm:r-x index.html 给与用户lm对index.html的读和执行权限
2. 删除ACL权限
setfacl -x [u或g]:[用户名或组名] 文件名
删除对应用户或组的ACL权限
setfacl -b 文件名
删除对应文件所有ACL权限
3. 设置默认ACL权限
设置默认ACL权限的作用是给父目录设置ACL权限后,父目录中创建的所有子文件都会继承父目录的ACL权限,但执行命令前的文件不会拥有权限。与递归设置的区别是,递归设置的ACL权限只会给当前已经存在的子目录给与ACL权限,新建的后来文件不会拥有权限。
- setfacl -m d:u:用户名:权限 文件名设置默认ACL权限
- setfacl -m k:u:用户名:权限 文件名 删除默认ACL权限设置
可以添加-R参数递归给子目录的子文件也设置默认ACL权限,但执行命令前创建的文件依旧不会有ACL权限。
setfacl -m d:u:用户名:权限 -R 文件名
文件系统属性权限chattr权限
chattr [+-=][i或a] 文件或目录名
+为增加权限,-为删除权限,=为设置为指定权限
i 对文件:不允许删除、改名、添加内容或修改文件内容操作
对目录:只能修改目录下文件的内容,不允许新建和删除文件
对root用户生效!a 对文件:只能添加新内容,不能删除、修改已有内容(并且只允许使用echo添加,不能使用vi等编辑器添加)
对目录:只能新建和修改文件,不能删除文件
对root用户生效!
查看chattr权限方法
该权限无法使用 ls 命令查看,而需要使用:
lsattr [参数] 文件名
- -a 显示所有文件和目录
- -d 若为目录,则显示目录属性,而非子文件属性
sudo
sudo命令允许系统管理员root临时提高普通用户的权限,让用户可以以其他身份(包括root)执行某些命令,最常见的用法是授权普通用户使用原本只有root用户才能使用的系统命令。sudo 是通过软件包提供支持的,因此它并非在所有的 Linux 发行版中默认安装(如:Arch Linux默认不安装),但在大多数现代的 Linux 发行版中,特别是面向桌面和服务器用途的发行版,sudo 通常会默认安装并配置好
sudo命令
sudo [选项] [命令]
- 默认情况下,sudo命令会以root用户身份执行命令,且默认会在当前环境下执行命令,不会加载新的环境
- -u 用户名 指定以哪个用户的身份执行命令,如果不指定,默认以root用户执行,也可以使用-u #用户ID来指定用户,在某些Linux发行版中#号需要使用\#转义
- -s 以指定用户的交互式非登录shell身份执行命令,载入shell环境(如:shell中定义的变量、环境变量)但不加载登录shell配置文件
- -i 以指定用户的交互式登录shell身份执行命令,这会加载新的shell环境以及登录shell需要加载的.profile、.bash_profile等配置文件
- 默认情况下,首次执行sudo命令需要输入当前用户密码(不是-u选项指定用户的密码),该密码认证有效期默认为5分钟,5分钟后需要重新认证,如果是高权限用户身份(如root)向低权限用户身份切换,则不要输入密码
- -v 延长5分钟(默认)密码认证的有效时间
- -k 重置sudo的授权时间戳,强制下次执行sudo时必须重新输入当前账户密码
- -l 列出(list)当前用户可以使用sudo权限执行的命令,执行命令后Linux系统会要求输入当前账户密码
- -b 在后台执行命令,用户可以继续使用终端
- -e 文件:以指定身份使用默认编辑器编辑文件
- -D 目录:前往指定目录下运行命令但不切换当前工作目录,如果用户没有该目录的权限,则返回错误(仅高版本sudo支持)
- -R 目录:切换当前工作目录到指定目录,再执行命令,如果用户没有该目录权限则返回错误(仅高版本sudo支持)
- -H 将HOME环境变量设置为指定用户的主目录
- -E 保留当前环境变量,避免被清除
visudo命令与sudoers文件
visudo命令用来指定用户可以使用sudo提权执行哪些命令,visudo命令会打开 /etc/sudoers 文件让管理员进行编辑,文件配置格式为:
用户名 主机地址=(赋予的身份) 授权命令1的绝对路径, 命令2的绝对路径…..
给组添加相关权限格式类似,组名前加上%号即可。通过vi /etc/sudoers命令虽然也可以编辑该文件,但通过该修改方法容易出现语法错误从而导致配置出错,使用visudo命令虽然也会打开编辑软件,但该命令会阻止多个用户并发编辑等操作,可以在安全环境下编辑文件,并且该命令在退出时会对文件进行语法检查,避免配置出错
给用户发送消息
1. write 给某个在线用户发送信息
write 用户名 信息
给已经登录Linux的用户发送消息,Ctrl+D结束输入并发送,需要用户在线,可以使用w查询在线的账户。
2. wall 给所有在线用户发送信息(write all)
wall 信息
给所有在线用户发送广播信息mail 发送邮件
mail 用户名
当用户未登录无法使用上述命令发送消息时,可以发送邮件给Linux用户。
邮件接收:
~ mail //查看邮件箱
收到的邮件将以New标识(是否已读)、序号、发送用户、发送时间、邮件标题的格式列出
-> N 1 root Sun Feb 20 12:38 18/532 “test”
~ 1 //直接输入序号查看对应邮件
~ h //列出所有邮件
~ d1 //d+序号删除对应邮件
~ q //退出邮件查看系统