C SHELL - 修改默认群组

Posted 王万林 Ben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C SHELL - 修改默认群组相关的知识,希望对你有一定的参考价值。

C SHELL - 修改默认群组

需求描述

用户发现有些存储有16群组数量的限制,不改变存储与挂载的情况下,排在17th以及以后的群组如何能提前使得用户有权限访问对应的项目数据?

需求分析

将需求总结一下:如何修改默认群组?

需求解决

方式一
假设用户信息存储在域控,并且服务器使用该域控进行认证,则在域控修改对应的default shell信息即可;

方式二
假设用户信息存储在本机,并且服务器使用本机认证,则修改/etc/passwd对应条目中的default shell信息即可;

方式三
假设因各种原因,用户无法(或无法立即)修改,则可以在自己的初始化文件中,加上一段切换群组的代码,以使得新shell下的primary group是自己期望的group。以C SHELL为例,我预期的group名称为stapusr,则在.cshrc中添加以下代码

set current_group=`id -g -n`
set expect_group="stapusr"
if ( $current_group != $expect_group ) then
    echo "Changing group with newgrp."
    newgrp $expect_group
endif
unset current_group expect_group

值得注意的是,我们在这里判断了是否已是期望群组,如果是否则执行newgrp命令。为什么我们要做这个判断?我们查看以下newgrp命令手册,
重点是log in,它是一个登陆shell(是已有进程的子进程),登陆时会读取对应的初始化文件。如C SHELL就会读取~/.cshrc文件。假设没有判断,则登陆时,newgrp执行log in,log in会读取~/.cshrc,读取这个文件又执行newgrp命令log in,如此反复。直到进程数量达到上限或者堆栈溢出,或者shell自有的报错。

报错示例

假设在~/.cshrc文件中只加newgrp stapusr,将导致报错,如下所示

参考文档

  • newgrp手册。

相关文章

  • 存储16群组限制的解决方法: https://blog.csdn.net/thesre/article/details/116947637

以上是关于C SHELL - 修改默认群组的主要内容,如果未能解决你的问题,请参考以下文章

usermod---修改用户账户信息

usermod命令,用户密码管理,mkpasswd随机生成密码

修改shell 将当前shell(默认是bash B SHELL )改为csh C SHELL

3.4 usermod命令 3.5 用户密码管理 3.6 mkpasswd命令

/etc/profile和/etc/bashrc、~/.bash_profile和~/.bashrc、.zshrc和.zprofile的区别

代码片段:Shell脚本实现重复执行和多进程