У нас есть сценарий автоматизации Go, который создает пользователей Linux. Этот сценарий запускается под другим пользователем, который называется scriptuser, но этот сценарий использует exec.Command для создания новых пользователей. Проблема в том, что мы хотим добавить пользователя scriptuser внутри вновь созданной группы пользователей, чтобы scriptuser мог читать/записывать в домашний каталог пользователя всякий раз, когда ему необходимо внести новые изменения. Мы можем без проблем добавить пользователя сценария в вновь созданную группу пользователей, но группы пользователей сценария не изменяются, пока мы не выйдем из системы и не войдем снова в оболочку. Как мы можем добиться этого, не выходя из системы и не входя снова?
ПРИМЕЧАНИЕ: scriptuser имеет привилегии sudo
Приведенный ниже код запускается с пользователем scriptuser
Пример кода
Код: Выделить всё
func setupUser(username string) {
cmd,err := exec.Command("sudo", "useradd","-m",username)
cmd.Run()
if err!=nil {
// handle error
}
cmd,err exec.Command("sudo","chmod","g+w","/home/"+username) // provide write perms at a group level
cmd, err = exec.Command("sudo", "adduser", "scriptuser", username) // add scriptuser to the newly created user's group
out, err = cmd.Output()
if err != nil {
log.Fatal(err)
}
os.Create("/home/"+username + "/sample.txt") // get a permission denied error even though I have added `scriptuser` as part of the new user's group, that is because scriptuser's groups have not been reloaded yet.
}
Я попробовал добавить exec.Command("newgrp", "") и exec.Command("newgrp") последовательно, но группы не перезагрузились.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... ion-script