mirror of
https://github.com/go-gitea/gitea.git
synced 2026-03-13 02:57:44 -05:00
gitea and read-only filsystems #5534
Closed
opened 2025-11-02 06:28:05 -06:00 by GiteaMirror
·
19 comments
No Branch/Tag Specified
main
release/v1.25
release/v1.24
release/v1.23
release/v1.22
release/v1.21
release/v1.20
release/v1.19
release/v1.18
release/v1.17
release/v1.16
release/v1.15
release/v1.14
release/v1.13
release/v1.12
release/v1.11
release/v1.10
release/v1.9
release/v1.8
v1.25.3
v1.25.2
v1.25.1
v1.25.0
v1.24.7
v1.25.0-rc0
v1.26.0-dev
v1.24.6
v1.24.5
v1.24.4
v1.24.3
v1.24.2
v1.24.1
v1.24.0
v1.23.8
v1.24.0-rc0
v1.25.0-dev
v1.23.7
v1.23.6
v1.23.5
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.23.0-rc0
v1.24.0-dev
v1.22.6
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.23.0-dev
v1.22.0-rc1
v1.21.11
v1.22.0-rc0
v1.21.10
v1.21.9
v1.21.8
v1.21.7
v1.21.6
v1.21.5
v1.21.4
v1.21.3
v1.21.2
v1.20.6
v1.21.1
v1.21.0
v1.21.0-rc2
v1.21.0-rc1
v1.20.5
v1.22.0-dev
v1.21.0-rc0
v1.20.4
v1.20.3
v1.20.2
v1.20.1
v1.20.0
v1.19.4
v1.21.0-dev
v1.20.0-rc2
v1.20.0-rc1
v1.20.0-rc0
v1.19.3
v1.19.2
v1.19.1
v1.19.0
v1.19.0-rc1
v1.20.0-dev
v1.19.0-rc0
v1.18.5
v1.18.4
v1.18.3
v1.18.2
v1.18.1
v1.18.0
v1.17.4
v1.18.0-rc1
v1.19.0-dev
v1.18.0-rc0
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
$20
$250
$50
$500
backport/done
💎 Bounty
docs-update-needed
good first issue
hacktoberfest
issue/bounty
issue/confirmed
issue/critical
issue/duplicate
issue/needs-feedback
issue/not-a-bug
issue/regression
issue/stale
issue/workaround
lgtm/need 2
modifies/api
modifies/translation
outdated/backport/v1.18
outdated/theme/markdown
outdated/theme/timetracker
performance/bigrepo
performance/cpu
performance/memory
performance/speed
pr/breaking
proposal/accepted
proposal/rejected
pr/wip
pull-request
reviewed/wontfix
💰 Rewarded
skip-changelog
status/blocked
topic/accessibility
topic/api
topic/authentication
topic/build
topic/code-linting
topic/commit-signing
topic/content-rendering
topic/deployment
topic/distribution
topic/federation
topic/gitea-actions
topic/issues
topic/lfs
topic/mobile
topic/moderation
topic/packages
topic/pr
topic/projects
topic/repo
topic/repo-migration
topic/security
topic/theme
topic/ui
topic/ui-interaction
topic/ux
topic/webhooks
topic/wiki
type/bug
type/deprecation
type/docs
type/enhancement
type/feature
type/miscellaneous
type/proposal
type/question
type/refactoring
type/summary
type/testing
type/upstream
Mirrored from GitHub Pull Request
No Label
type/enhancement
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/gitea#5534
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @micheelengronne on GitHub (Jun 11, 2020).
Gitea wants to modify files even if they are present and with the content gitea wants to put in.
Therefore, Gitea breaks on read-only filesystems (like an hardened docker container.)
My problem is simple.
This method wants to modify a
.gitconfigfile:9a2e47b23a/modules/git/git.go (L109)It runs even if the
.gitconfigfile exists with the correct content.Is it possible to stop that behaviour ?
Thanks.
@CirnoT commented on GitHub (Jun 11, 2020):
We rely on
git config --globalto make changes to Git config file@micheelengronne commented on GitHub (Jun 11, 2020):
Yes, but can we disable this method when the file already exists ?
@zeripath commented on GitHub (Jun 11, 2020):
Just set the HOME environment variable as appropriate to somewhere that can be changed.
@CirnoT commented on GitHub (Jun 11, 2020):
No, because we don't know whether correct values are set or not. The fact that file exists tells us nothing. The
.gitconfigis supposed to be writable should new version introduce some new config to be set there.@micheelengronne commented on GitHub (Jun 11, 2020):
My usecase happens in a container environment. A new version is introduced by creating a new container image, not updating the existing one.
@micheelengronne commented on GitHub (Jun 12, 2020):
I tried to do an init container that sets everything and a container with
gitea webbut still thegitea webcli wants to use this method.It is a security issue as it forces to use a read-write filesystem for just a file that can easily be commmited in a git.
Can we, at least, have an option to use
gitea weband other production-running state commands in a read-only filesystem ?@zeripath commented on GitHub (Jun 12, 2020):
@micheelengronne have you set the HOME environment variable appropriately?
@micheelengronne commented on GitHub (Jun 12, 2020):
Changing the
HOMEvariable is not a solution either. In an immutable hardened container, only data should change, nothing else.@micheelengronne commented on GitHub (Jun 12, 2020):
So, what can change is the content of
ROOTaccording to the config cheat sheet.@micheelengronne commented on GitHub (Jun 12, 2020):
I am sorry to be strict on that. But this is an absolute condition to make gitea run in security hardened infrastructures. Containers must work with read-only FS and read-only configurations and secrets.
@zeripath commented on GitHub (Jun 12, 2020):
Right the issue is that Git is making the change to the file.
We are limited in how we can tell Git to look for its .gitconfig.
Git uses HOME to determine the global gitconfig which we use to set various global settings and to look up various things.
So I ask again, have you tried setting the HOME variable to a mutable place?
@zeripath commented on GitHub (Jun 12, 2020):
If that works then can consider if there is a place for using ROOT to artificially change the HOME for git etc. but without knowing that then we're likely leading down a blind alley and we might have to think about if we need to set things a different way eg. through the default args system
@micheelengronne commented on GitHub (Jun 12, 2020):
To be sure we talk about the same thing. If I move
HOME, I move my user directory, right ? So, I move all configurations in it ?Did I understand correctly ?
In that way, configurations are not immutables and that will not pass hardened security tests.
Why can't we have a way to include a
.gitconfigfile containing the same content and for the method to check if the file exists with the correct content prior to create it ?@zeripath commented on GitHub (Jun 12, 2020):
No I mean just set the HOME environment variable when you run gitea
@micheelengronne commented on GitHub (Jun 12, 2020):
But that will screw up my user directory.
For instance, my user is
git. I put this file content in/home/git/.gitconfig.Then the init method should not try to write this file.
Do you suggest, I move
HOMEto/home/git/mutableand make this directory writable ?If it works that's better than nothing but that will still break the security hardening check as
.gitconfigis also a configuration file.I try.
@micheelengronne commented on GitHub (Jun 12, 2020):
That works but that's not really the best solution. It would be far better to test if the file exists with the correct values before trying to create it.
If a gitea update occurs that change the file content, the CI job that creates the docker (podman) image would break so future compatibilities would be ensured by that way.
@micheelengronne commented on GitHub (Jun 12, 2020):
BTW, the 2 first git executions do what I think is the correct way to do.
83e9ac57a1/modules/git/git.go (L112)They check if the values exist and they are the same than the ones provided and they execute the git command if one of these assertions is false.
The problem is for these lines:
83e9ac57a1/modules/git/git.go (L126)83e9ac57a1/modules/git/git.go (L132)83e9ac57a1/modules/git/git.go (L137)They do not check so they always try to write.
I am not fluent enough in go to do it myself right now.
@zeripath commented on GitHub (Jun 13, 2020):
So any configuration in
$HOME/.gitconfigcan be overridden by a repository's local "project" git config ($GITEA_REPOSITORIES/owner/name.git/config) including in particulardiff.tool. Gitea needs to be able to change these config files in order to manage mirrors and remotes amongst other things - and we regularly create temporary repositories which git gives a local project config. I'm not saying that we shouldn't make changing$HOME/.gitconfigunnecessary - but unless you can get to the point that these local project config files are controllable or removable - which I haven't been able to find a way of doing - locking down the$HOME/.gitconfigis of very limited use.$HOME/.gitconfigis the GLOBAL config only in that it provides defaults to the local project git configs - it cannot and does not override local project git config.@micheelengronne commented on GitHub (Jun 15, 2020):
I know that. But that was not the point. Anyway, thanks for the commit.