Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 用于在登录时为用户创建文件夹并设置访问权限的bash脚本_Macos_Bash_Logout - Fatal编程技术网

Macos 用于在登录时为用户创建文件夹并设置访问权限的bash脚本

Macos 用于在登录时为用户创建文件夹并设置访问权限的bash脚本,macos,bash,logout,Macos,Bash,Logout,我是一所小型艺术学校的新摄影技术员,负责一个小型mac实验室。不幸的是,我们的IT部门没有为mac提供直接支持(只有网络),所以我不得不卷起袖子边走边学 实验室在所有机器上都作为单一的托管登录(无密码)运行了很长时间,这造成了很多困难,但我正在努力将其更改为接受Active Directory凭据的模式,以便动态创建新用户。注销时,该用户帐户将被销毁,以使每个会话之间的用户环境正常化 缺点是,对于少数在特定站点重复工作的学生来说,他们创建的任何文件当然都会被销毁。作为解决方法,我想创建一个登录脚

我是一所小型艺术学校的新摄影技术员,负责一个小型mac实验室。不幸的是,我们的IT部门没有为mac提供直接支持(只有网络),所以我不得不卷起袖子边走边学

实验室在所有机器上都作为单一的托管登录(无密码)运行了很长时间,这造成了很多困难,但我正在努力将其更改为接受Active Directory凭据的模式,以便动态创建新用户。注销时,该用户帐户将被销毁,以使每个会话之间的用户环境正常化

缺点是,对于少数在特定站点重复工作的学生来说,他们创建的任何文件当然都会被销毁。作为解决方法,我想创建一个登录脚本,为他们在分区驱动器上保存文件创建一个安全的位置,并将该目录的权限设置为仅对除admin之外的所有其他用户进行写入

我已经把大部分内容拼凑在一起了,但是我真的很想从我的上级那里得到一般性的反馈(我在这里做的任何事情都是不明智的)以及关于如何设置权限的指导,因为我在这里得到的似乎不起作用,坦率地说,我只是对UNIX权限的来龙去脉有一个松散的理解

我已将其设置为.command文件,并具有测试它的执行权限-文件夹和别名已按预期创建,但所有者/组设置不起作用。-所有者是我的管理员帐户,组仍然是“工作人员”。我还设置了一个“测试”用户和一个学生组

非常感谢你的想法

#!/bin/bash
# Create a safe place for users to save their files
# We will destroy this directory if it's empty on log out
# Using sudo for the time being for testing, wont have to when it's run at login by root

# Dont run if user is admin
if [ `whoami` == "comdesadmin" ]; then
exit 1
fi

if [ `whoami` != "comdesadmin" ]; then

#User name
USERNAME="test";
#USERNAME=`whoami` ;

# Group name
USERGROUP=student;
#Set direcory path
USERSAFEFOLDER=/Volumes/nest/$USERNAME

# Create the directory for the user if it isn't there
# user names shouldn't have any spaces so this should be ok
mkdir -p $USERSAFEFOLDER;

# Set the ownership to the current users (as this be being run by root)
sudo chown -R guest $USERSAFEFOLDER;

# Set the group
sudo chgrp $USERGROUP $USERSAFEFOLDER;

# Set write only to everyone else
chmod 700 $USERSAFEFOLDER;

# Make alias on the desktop for them
osascript <<END_SCRIPT
tell application "Finder"
   make new alias to folder (posix file "$USERSAFEFOLDER") at desktop
end tell
END_SCRIPT

echo "Sucess";

fi
exit 0
#/bin/bash
#为用户保存文件创建一个安全的地方
#如果此目录在注销时为空,我们将销毁它
#暂时使用sudo进行测试,不必在root登录时运行它
#如果用户是管理员,则不运行
如果[`whoami`==“comdesadmin”];然后
出口1
fi
如果[`whoami`!=“comdesadmin”];然后
#用户名
用户名=“测试”;
#用户名=`whoami`;
#组名
用户组=学生;
#设置目录路径
USERSAFEFOLDER=/Volumes/nest/$USERNAME
#为用户创建目录(如果不存在)
#用户名不应该有任何空格,所以这应该可以
mkdir-p$USERSAFEFOLDER;
#将所有权设置为当前用户(因为这将由root用户运行)
sudo chown-R guest$USERSAFEFOLDER;
#组队
sudo chgrp$USERGROUP$USERSAFEFOLDER;
#设置只写给其他人
chmod 700$USERSAFEFOLDER;
#在桌面上为他们创建别名
奥萨Script
  • 第二个
    if
    是完全不必要的(
    if[`whoami`!=“comdesadmin”]
    ),因为它与第一个正好相反。您只需删除该行(及其底部的结束
    fi

  • 将第一行更改为
    #可能是个好主意/bin/bash-e
    这样,当一个步骤失败时,脚本会立即退出

  • 不包括用于测试的
    sudo
    ,在没有sudo行的情况下进行测试更容易、更好,并且通过使用sudo作为您想要测试的用户调用脚本本身,例如:

    sudo -u username -g groupname .command
    
  • sudo一起运行时,不需要使用
    chown
    chgrp

  • 末尾的
    exit 0
    是不必要的,因为前面的
    echo
    命令将以0退出,0将用作脚本本身的退出代码

  • 是不必要的

  • 最好使用
    $()
    在各个方面都使用反勾号,例如
    $(whoami)
    而不是
    `whoami`


  • 我建议在apple.stackexchange.com上问这个问题,以获得正确的基于Mac OS X的用户管理的帮助。我不知道apple.stackexchange-好消息。非常感谢这些清理提示。我加入了sudo,因为我没有看到来自
    chown
    chgrp
    的结果,我认为这可能是权限问题。关于为什么这些不适用于正确的群体或用户,你有什么想法吗?你能给我指一篇关于你在第三号中描述的内容的文章或图坦卡蒙吗?我不确定我在这一点上是否跟得上你。我补充说#7。至于#3,由于您希望脚本在登录时由用户执行,因此最好通过作为这些用户之一或测试用户运行来测试脚本。适当地替换示例命令中的
    username
    groupname
    。根据
    chown
    chgrp
    ,我真的看不出你想做什么。该脚本将由用户在登录时运行,但普通用户无论如何都无法更改文件的所有权。我认为这是不必要的,也许你会感到困惑。很可能我很困惑,但我的理解是,登录挂钩是以root身份运行的,因此假设我需要明确说明用户和组。再次感谢您的帮助。用户创建必须以管理员身份运行,但登录脚本应以用户身份运行。否则,这将是一个安全风险。不客气。